我正在使用cfspreadsheet(在ColdFusion中)将查询结果写入excel电子表格。客户不希望在Excel工作表上显示标题行。 excludeheaderrow属性仅用于阅读。有谁知道是否可以不将标题行写入电子表格?
谢谢!
答案 0 :(得分:3)
spreadSheetAddRows
和spreadSheetWrite
将创建没有列标题的电子表格。
此轰鸣声片段将写入一个.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标记(用于指定文本)。这可能需要一些实验,但它并不是非常困难。