我正在使用 cfspreadsheet(在 ColdFusion 中)将查询结果写入 excel 电子表格。客户不希望在 Excel 表上显示标题行。excludeheaderrow 属性仅用于读取。有谁知道是否可以不将标题行写入电子表格?
谢谢!
我正在使用 cfspreadsheet(在 ColdFusion 中)将查询结果写入 excel 电子表格。客户不希望在 Excel 表上显示标题行。excludeheaderrow 属性仅用于读取。有谁知道是否可以不将标题行写入电子表格?
谢谢!
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>
如果可以合理地假设要检索的列数是相当静态的并且行可能会增长/缩小,那么查询具有工作簿范围的“命名范围”可能是最好的方法。
您没有提供样本数据,但让我们进一步假设数据块从 A 列到 N 列,虽然可能有一些空白字段,但 A 列始终具有数字性质的部件号/序列号/标识符。数据位于名为Sheet2的工作表上。
转到公式 ► 定义的名称 ► 名称管理器。开始一个New命名范围。使用myData作为 Name:,确保 Scope: 是Workbook,而不是 Worksheet,并使用以下内容作为引用:
=Sheet2!$A$2:INDEX(Sheet2!$N:$N, MATCH(1e99, Sheet2!$A:$A))
如果您选择定义数据范围的列本质上是字母(又名文本),那么该公式将,
=Sheet2!$A$2:INDEX(Sheet2!$N:$N, MATCH("zzz", Sheet2!$A:$A))
单击确定以创建新的命名范围,然后单击关闭以关闭名称管理器。通过点击并在Reference:框中F5键入myData并单击 OK来测试您定义的数据范围。
如果一切都按计划进行,则应选择您的数据范围。您应该能够查询它而不是工作表名称或工作表单元格范围。
以下内容可能有助于设计您的查询:在 VBScript 的 sql 字符串中使用名为 range 的 excel。搜索将产生许多其他资源。
将您的数据导出为直接的 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>
注意使用边框、宽度、P 标签(用于指定文本)。这可能需要一些实验,但这并不是非常困难。