7

免责声明:我是冷融合的新手。我正在尝试创建一个包含图像和多个选项卡的 Excel 2010 文档。我已经能够将其输出到 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 函数的文档。如果将xmlformat参数设置为“true”,它将创建一个 .xlsx 文件。

关于如何使用这些 ColdFusion 功能,网络上有几个示例(以及这里的 SO)。 Raymond Camden 在这里有一个很好的示例,说明如何生成电子表格并使用cfcontent标签直接将其交付给用户。 这是 Raymond 的另一个示例,它建立在第一个示例的基础上。

于 2013-03-04T13:50:31.627 回答
4

我整个星期都在做这件事,并想分享结果。此代码适用于我在 Windows Server 2008 R2 上使用 CF 9。顺便说一句,CFSpreadsheet 似乎在较大的导出上消耗了大量内存。为此,我们增加了服务器的物理内存,然后在 Administrator -> Java and JVM settings 中使用 CF Administrator 来增加 jvm 堆大小。我的最大 Java 堆大小现在是 3072 Gig。需要帮忙?我建议您就服务器问题联系 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 回答