我使用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">
答案 0 :(得分:1)
您需要定义并使用单元格格式来显示完整的数字。以下是代码的示例代码段:
<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>
有许多支持的格式可用;如需完整列表,您可以查看here。 此外,就像SpreadsheetFormatCell一样,您可能希望使用SpreadsheetFormatColumn或其他相关功能。
答案 1 :(得分:0)
(评论太长了......)
FWIW,CFSpreadsheet专为非常简单的导出而设计,没有太多的花里胡哨。如果需要特殊格式,则必须使用电子表格函数。
与当前代码最接近的等价物可能是SpreadsheetAddRows(sheet, query)函数。它使用提供的查询对象中的数据填充工作表。如Viv's answer所述,您可以根据需要格式化列。例如,如果您希望将值视为文本,请使用{dataformat = "@"}
:
<cfscript>
SpreadsheetAddRows(theSheet, qData);
SpreadsheetFormatColumns(theSheet, {dataformat = "@"}, "1-3");
SpreadSheetWrite(theSheet, "c:/path/to/myFile.xls", true);
</cfscript>
顺便说一下,文档中的示例并不总是最好或最干净的。将它们视为一个起点,而不是完全“按原样”使用代码。