7

免責事項:私はColdFusionを初めて使用します。画像と複数のタブを含むExcel2010ドキュメントを作成しようとしています。これをXLSに出力することはできましたが、画像をファイルに入れることができません。

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

2 に答える 2

7

ColdFusion (バージョン 9 で初めて導入) の組み込みスプレッドシート関数を使用することをお勧めします。SpreadsheetNew 関数のドキュメントは次のとおりです。パラメータを「true」に設定xmlformatすると、.xlsx ファイルが作成されます。

これらの ColdFusion 関数の使用方法の例が Web (および SO) にいくつかあります。 Raymond Camden はcfcontent、スプレッドシートを生成し、タグ を使用してユーザーに直接配信する方法の良い例をここに示しています。これは、最初の例に基づいて作成されたRaymond の別の例です。

于 2013-03-04T13:50:31.627 に答える
4

私は一週間ずっとこれに取り組んできたので、結果を共有したいと思いました。このコードは、Windows Server 2008 R2 で CF 9 を使用している場合に機能します。ところで、CFSpreadsheet は、大きなエクスポートで多くのメモリを消費するようです。このため、サーバーの物理メモリを増やしてから、CF アドミニストレータを使用して、[アドミニストレータ] -> [Java および JVM] 設定で jvm ヒープ サイズを増やしました。私の最大 Java ヒープ サイズは現在 3072 ギガです。助けが必要?サーバーの問題については、Charlie Arehart に連絡することをお勧めします: charlie@carehart.org

コード:

クエリの例は「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#">  

デイブ・クラフト

于 2013-07-25T11:59:13.157 に答える