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。搜索将产生许多其他资源。
spreadSheetAddRows
和 spreadSheetWrite
将创建没有列 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>
我正在使用 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。搜索将产生许多其他资源。
spreadSheetAddRows
和 spreadSheetWrite
将创建没有列 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>