2

我正在使用 cfspeadsheet 将查询导出到 Excel 文件。它正在工作并创建 Excel 工作表。但是,问题是其中一列,即card_number,包含一个 15 位数字,显示如下:4.5421E+15。有没有办法可以显示完整的数字:4254218068670980

<!--- create manual query for demo --->
<cfset qData = queryNew("")>
<cfset queryAddColumn(qData, "NumericCol", "BigInt",["4254218068670980"])>
<cfset queryAddColumn(qData, "StringCol", "Varchar",["4254218068670980"])>
<cfset queryAddColumn(qData, "DecimalCol", "Decimal",["4254218068670980"])>

<!--- export to file --->
<cfspreadsheet action="write" 
        filename="c:/path/to/myFile.xls"
        query="qData" 
        overwrite="true">
4

2 回答 2

2

您需要为单元格定义并使用一种格式来显示完整的数字。以下是您的代码的示例代码片段:

<cfscript> 
theFile=GetDirectoryFromPath(GetCurrentTemplatePath()) & "new_data.xls"; 
//Create a new Excel spreadsheet object. 
theSheet = SpreadsheetNew("Expenses"); 
//Set the value a cell. 
SpreadsheetSetCellValue(theSheet,"4254218068670980",1,4);
//Set value into another cell. 
SpreadsheetSetCellValue(theSheet,"4254218068670980",2,4);
// Define a format class for for number. 
longNum=StructNew(); 
longNum.dataformat = "0"; 
//Now use this class to format cell 
SpreadsheetFormatCell(theSheet,longNum,2,4); 
</cfscript>

有许多支持的格式可用;如需完整列表,您可以在此处查看。此外,就像SpreadsheetFormatCell一样,您可能想要使用SpreadsheetFormatColumn或其他相关函数。

于 2016-08-23T02:01:58.227 回答
1

(评论太长了……)

FWIW,CFSpreadsheet 是为非常简单的导出而设计的,没有很多花里胡哨。如果您需要特殊格式,则必须改用电子表格函数。

与当前代码最接近的可能是SpreadsheetAddRows(sheet, query)函数。它使用提供的查询对象中的数据填充工作表。正如Viv 的回答所提到的,您可以根据需要格式化列。例如,如果您希望将值视为文本,请使用{dataformat = "@"}

<cfscript>
   SpreadsheetAddRows(theSheet, qData); 
   SpreadsheetFormatColumns(theSheet, {dataformat = "@"}, "1-3"); 
   SpreadSheetWrite(theSheet, "c:/path/to/myFile.xls", true);
</cfscript>

顺便说一句,文档中的示例并不总是最好或最干净的。将它们视为一个起点,而不是完全“按原样”使用代码..

于 2016-09-01T01:09:23.000 回答