cfspreadsheet - 如何写入excel而不显示列标题

时间:2015-03-27 19:22:39

标签: excel coldfusion cfspreadsheet

我正在使用cfspreadsheet(在ColdFusion中)将查询结果写入excel电子表格。客户不希望在Excel工作表上显示标题行。 excludeheaderrow属性仅用于阅读。有谁知道是否可以不将标题行写入电子表格?

谢谢!

3 个答案:

答案 0 :(得分:3)

spreadSheetAddRowsspreadSheetWrite将创建没有列标题的电子表格。

此轰鸣声片段将写入一个.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>

答案 1 :(得分:0)

如果可以合理地假设要检索的列数是相当静态的并且行可能会增长/缩小,则使用工作簿范围查询“命名范围”可能是最好的方法。

您没有提供样本数据,但让我们进一步假设数据块从A列到N列,而且可能有一些空白字段,A列总是有一个部件号/序列号/标识符数字性质。数据驻留在名为 Sheet2 的工作表上。

转到公式►定义的名称►名称管理器。启动 New 命名范围。使用 myData 作为名称:,确保范围:工作簿,而不是工作表,并使用以下内容参考:

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

如果您选择定义数据范围的列本质上是字母(也称为文本),那么该公式将

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

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

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

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

答案 2 :(得分:-2)

将数据导出为直接HTML表格可能对您有用。不确定你在输出中究竟做了多少,但它非常直接。像这样:

<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>

注意使用border,width,P标记(用于指定文本)。这可能需要一些实验,但它并不是非常困难。