1

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

谢谢!

4

3 回答 3

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>
于 2015-03-27T20:52:44.707 回答
0

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

您没有提供样本数据,但让我们进一步假设数据块从 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。搜索将产生许多其他资源。

于 2015-03-27T20:01:38.173 回答
-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>

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

于 2015-03-27T20:01:10.470 回答