2013-02-21 31 views
5

免責事項:私はcoldfusionに新しいです。 イメージと複数のタブを含むExcel 2010ドキュメントを作成しようとしています。 これをXLSに出力することができましたが、イメージをファイルに取り込むことができません。coldfusionを使用してxlsxファイルを作成する方法

XLSxファイルを適切に作成する方法の完全な例が見つかりませんでした。 私は悪い習慣があるのではなく、正しい方法を学び、自分の悪い習慣を後で開発することを好むだろう。ここ

は一例であり:

<!--- Make CF export to Excel ---> 
<!--- This will create a XLS file ---> 
<!--- <cfheader name="Content-Disposition" value="attachment; filename=#URL.TRNo#_image.xls"> 
<cfcontent type="application/vnd.msexcel"> ---> 

<!--- This does not work to create an XLSX file ---> 
<cfheader name="Content-Disposition" value="inline; filename=#URL.TRNo#_image.xlsx"> 
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"> 

<cfparam name="URL.TRNo" default="AD0310"> 

<cfoutput> 
    <?xml version="1.0"?> 
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
     <ss:Styles> 
      <ss:Style ss:ID="Default" ss:Name="Normal"> 
       <ss:Font ss:Size="11" ss:FontName="Calibri"/> 
      </ss:Style> 
      <ss:Style ss:ID="Left"> 
       <ss:Alignment ss:Horizontal="Left"/> 
      </ss:Style> 
      <ss:Style ss:ID="Center"> 
       <ss:Alignment ss:Horizontal="Center"/> 
      </ss:Style> 
      <ss:Style ss:ID="Right"> 
       <ss:Alignment ss:Horizontal="Right"/> 
      </ss:Style> 
     </ss:Styles> 


     <Worksheet ss:Name="#URL.TRNo# page 1"> 
      <ss:Table ss:DefaultColumnWidth="15" ss:DefaultRowHeight="15"> 
       <Row ss:Height="51"><!--- Start Row 1 ---> 
        <Cell ss:Index="1" ss:MergeAcross="9"> 
         <Data ss:Type="String">Final Test Report</Data> 
        </Cell> 
        <Cell ss:Index="11" ss:MergeAcross="10" ss:StyleID="Center"> 
         <Data ss:Type="String"><!--- <img src="http://wwwdev.elmsweb.ford.com/elmsGEN3/SafetyLab/FMVSS/ReportWriter/img/fordLogo_transparent_small.png" height="68" width="181" alt="13"> ---></Data> 
        </Cell> 
        <Cell ss:Index="22" ss:MergeAcross="9" ss:StyleID="Right"> 
         <Data ss:Type="String">Confidential</Data> 
        </Cell> 
       </Row><!--- End Row 1 ---> 
       <Row/><!--- Row 2 Blank ---> 
       <Row><!--- Start Row 3 ---> 
        <Cell ss:Index="1" ss:MergeAcross="1" ss:StyleID="Right"> 
         <Data ss:Type="String">To:</Data> 
        </Cell> 
        <Cell ss:Index="3" ss:MergeAcross="12"> 
         <Data ss:Type="String"></Data> 
        </Cell> 
        <Cell ss:Index="16" ss:MergeAcross="10" ss:StyleID="Right"> 
         <Data ss:Type="String">Test Order:</Data> 
        </Cell> 
        <Cell ss:Index="27" ss:MergeAcross="4"> 
         <Data ss:Type="String">#URL.TRNo#</Data> 
        </Cell> 
       </Row><!--- End Row 3 ---> 
      </ss:Table> 
     </Worksheet> 
    </Workbook> 
</cfoutput> 
+4

あなたは、ColdFusionのビルトインスプレッドシート関数を使用してみましたか? [SpreadsheetNew関数のドキュメント](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-747b.html)。 'xmlformat'パラメータを 'true'に設定すると、.xlsxファイルが作成されます。 _これらの機能には少なくともColdFusion 9が必要です。 –

+1

これらのどちらも、技術的にXLSファイルまたはXLSXファイルを作成することはなく、Excelに提供されるXMLファイルを作成します。最初の行から 'cfheader/content'を簡単に使い、XLSXファイルとして表示されるように拡張子を変更することはできますが、XLS/XLSX形式にはなりません。 – Busches

+0

@ Miguel-Fありがとう、私はそれが正しいディレクションの一歩だと思う。ユーザーはどのようにしてファイルを取得できますか?サーバーに保存する必要はありませんか? – BTThomas

答えて

6

Iは、(最初​​のバージョン9で導入された)のColdFusionのビルトインスプレッドシート関数を使用してお勧めします。ここにはdocumentation for the SpreadsheetNew functionがあります。 xmlformatパラメータを 'true'に設定すると、.xlsxファイルが作成されます。

これらのColdFusion機能の使用方法に関するWeb(およびここではSO)の例がいくつかあります。 Raymond Camden has a nice example hereスプレッドシートを生成し、cfcontentタグを使用してユーザーに直接配信する方法について説明します。 Here is another example from Raymondは、最初の例で構築されています。

3

私は一週間中この作業を続けており、結果を共有したいと考えていました。このコードは、Windows Server 2008 R2のCF 9を使用して私の仕事をしています。ところで、CFSpreadsheetはより大きなエクスポートで多くのメモリを消費するようです。このため、サーバーの物理メモリーを増やしてから、CF管理者を使用してAdministrator - > JavaおよびJVM設定でjvmヒープ・サイズを増やしました。私の最大のJavaヒープサイズは今3072ギグです。 ヘルプが必要ですか?私は、サーバーの問題にチャーリーArehartにご連絡をお勧めします:[email protected]

コード:

例のクエリは、「MYQUERY」スプレッドシート「がMyspreadsheet」私は私を「XLSX」と呼ばれるサブディレクトリにスプレッドシートをエクスポートすると呼ばれると呼ばれていますcflocationを使用してブラウザをスプレッドシートに誘導します。ブラウザは、ユーザに対して、開く、保存する、またはキャンセルするように促す。

<cfset var_filenameis = "Myspreadsheet.xlsx"> 
<cfset SpreadsheetObj = spreadsheetNew("true")> 
<cfset SpreadsheetObj = spreadsheetNew("#var_filenameis#","yes")> 

<cfspreadsheet action="write" filename="./xlsx/#var_filenameis#" query="Myquery" overwrite="true"> 

<cflocation url = "./xlsx/#var_filenameis#"> 

デイブ・クラフト

+0

実際のExcelファイルをサーバーにローカルに保存しますか?それは必要なステップですか? (それを行うには奇妙な方法だと思われるが、私はまだ別のものを見つけていない) –