2017-07-12 1 views
0

私は、たくさんのデータからxlsxレポートを作成しようとしています。私は携帯電話の番号、市外局番、友人の名前を持っており、xmlとxslを使ってxlsxファイルに挿入したいと思っています。 データのヘッダーを挿入するのに苦労していますが、各列のデータを取得できないようです。さて、彼らはセパレータなしで一緒にマッシュアップしました。xmlとxslを使ってxlsxファイルを作成する

XMLファイル

<?xml version="1.0" encoding="ISO-8859-1"?> 
<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"> 
    <friends> 
     <jx:forEach var="friendsDetail" items="${friendList}"> 
      <friend 
        Name="${friendsDetail.getName()}/"             
        MobileNumber="${friendsDetail.getMobileNumber()}" 
        AreaCode="${friendsDetail.getAreaCode()}" 
      /> 
     </jx:forEach> 
    </friends> 
</jx:template> 

XSLファイル

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" /> 
<xsl:strip-space elements="*" /> 
    <xsl:template match="friend"> 
    <xsl:value-of select="@Name" /><xsl:text/> 
    <xsl:value-of select="@MobileNumber" /><xsl:text/> 
    <xsl:value-of select="@AreaCode" /><xsl:text/> 
</xsl:template> 
</xsl:stylesheet> 

だから、基本的に、私は次のようにデータがXLSXファイルに出て来てほしい:

 Column 1. Column 2.  Column 3. 

Row 1. Name  Mobilenumber Areacode 

Row 2. Peter  48785635  4817 

あらゆるヒントは素晴らしいでしょうありがとう!

出力はこのようになります。

enter image description here

+0

あなたのXSLTは、実際にここでテキスト出力を生成し、このXSLTを試すことができ、xslxありません。これはExcelでカンマ区切りのテキストファイル(たとえば)を使用できるため問題ではありません。実際にここにCSVファイルを作成しようとしていますか? (タブ区切りの場合もあります) –

+0

@TimCええ、xlsx形式の出力ファイルがありますが、セパレータはありません。私は、タブデリミタが正しいと思います)。質問にした編集(出力ファイル)を見てください。 – Captainslow

答えて

1

あなたがExcelにインポートするタブ区切りファイルをしたい場合は、あなたがxsl:variableを使用することができ区切​​り

<xsl:param name="separator" select="'&#x9;'" /> 

のための文字を保持するためのパラメータを定義することによって開始でしたが、呼び出し元のアプリケーションによってパラメータがオーバーライドされ、カンマに簡単にスワップすることができます。

あなたは、あなたのテンプレート

<xsl:value-of select="@Name" /> 
<xsl:value-of select="$separator" /> 

で簡単に出力セパレータは

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" /> 

<xsl:param name="separator" select="'&#x9;'" /> 

<xsl:strip-space elements="*" /> 

<xsl:template match="friends"> 
    <xsl:text>Name</xsl:text> 
    <xsl:value-of select="$separator" /> 
    <xsl:text>Mobile Number</xsl:text> 
    <xsl:value-of select="$separator" /> 
    <xsl:text>Area Code</xsl:text> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:apply-templates select="friend" /> 
</xsl:template> 

<xsl:template match="friend"> 
    <xsl:value-of select="@Name" /> 
    <xsl:value-of select="$separator" /> 
    <xsl:value-of select="@MobileNumber" /> 
    <xsl:value-of select="$separator" /> 
    <xsl:value-of select="@AreaCode" /> 
    <xsl:text>&#10;</xsl:text> 
</xsl:template> 

</xsl:stylesheet> 
+0

これはすごくうまくいった!本当にありがとう! :) – Captainslow

+0

は、出力をExcelファイルの行1に強制的に送る方法です。それは2行目に入ってくるので、読み込みに失敗した関数を作ることになります。 – Captainslow

+0

ヘッダー行が不要な場合は、「友人」と一致するテンプレートを削除してください。 –

関連する問題