cfspreadsheet - 如何在不显示列 headers 的情况下写入 excel

cfspreadsheet - how to write to excel WITHOUT showing column headers

我正在使用 cfspreadsheet(在 ColdFusion 中)将查询结果写入 excel spreadsheet。客户不希望 header 行显示在 excel sheet 上。 excludeheaderrow 属性仅供阅读。有谁知道是否可以不将 header 行写入传播 sheet?

谢谢!

直接导出数据 HTML table 可能适合您。不确定您在输出中做了多少,但这很简单。像这样:

<Cfsavecontent name="myExcelFile">
<table>
<cfoutput query="blah">
    <tr border="1">
        <td width="400">#col1#</td>
        <td><p>#col2#</p></td>
        <td>#col3#</td>
    </tr>
</cfoutput>
</table>
</CFSAVECONTENT>

<cfheader name="Content-Disposition" value="inline; filename=somefilename.xls">
<cfcontent type="application/vnd.ms-excel"><cfoutput>#myExcelFile#</cfoutput>

注意边框、宽度和 P 标签(用于指定文本)的使用。可能需要做一些实验,但这并不难。

如果可以合理地假设要检索的列数是相当静态的并且行可能 grow/shrink 然后使用工作簿 范围查询 'named range' 可能是最好的方法。

您没有提供示例数据,但让我们进一步假设数据块从 A 列到 N 列,虽然可能有一些空白字段,但 A 列总是有一部分 number/serial number/identifier 的数字性质。数据位于名为 Sheet2.

的工作表中

转到公式 } 定义的名称 } 名称管理器。启动一个 New 命名范围。使用 myData 作为 Name:,确保 Scope: 是 Workbook,而不是 Worksheet,并使用以下内容作为 Refers to:

=Sheet2!$A:INDEX(Sheet2!$N:$N, MATCH(1e99, Sheet2!$A:$A))

如果您选择用于定义数据范围的列本质上是字母(又名文本),则该公式会,

=Sheet2!$A:INDEX(Sheet2!$N:$N, MATCH("zzz", Sheet2!$A:$A))

单击确定 创建新的命名范围,然后单击关闭 关闭名称管理器。通过点击 F5 并在 Reference: 框中键入 myData 并单击确定来测试您定义的数据范围。

如果一切都按计划进行,则应选择您的数据范围。您应该能够查询它而不是工作表名称或工作表单元格区域。

以下内容可能有助于您设计查询:Using excels named range in a sql string in VBScript。搜索将产生许多其他资源。

spreadSheetAddRowsspreadSheetWrite 将创建没有列 headers.

的电子表格

下面的代码片段将写入一个 .xls 文件,该文件的第 1 行仅包含值 1、2、3。cfscript 块中的最后 3 行可用于代替:<cfspreadsheet action="write" query="qTest" filename="temp.xls">。如果您的 cfspreasheet 标签中有额外的属性,则需要额外的属性和功能。

<cfscript>
    qTest = queryNew("Column1,Column2,Column3");
    queryaddRow(qTest);
    querySetCell(qTest ,"Column1",1);
    querySetCell(qTest ,"Column2",2);
    querySetCell(qTest ,"Column3",3);

    spreadSheetObj= spreadsheetNew(false); //true for xlsx format
    spreadsheetAddRows(spreadSheetObj,qTest);
    spreadSheetWrite(spreadSheetObj,expandPath("./") &"temp.xls");
</cfscript>