如何修复在 cfspreadsheet 中存储为文本的数字

How to fix Number stored as text in cfspreadsheet

我正在 cfspreadsheet (Coldfusion 10) 中制作 excel 单元格格式作为数字,但是当它转换为 excel 时,它会在 [=16] 单元格处显示警告=]

Number Stored as Text.

我能知道如何解决这个问题吗?因为我需要格式 number.Here 是我的代码:

<cfscript> 
  theSheet = SpreadsheetNew("Order Details 1");
  SpreadsheetAddRow(theSheet, "NO,VENDOR, PART NUMBER, PART NAME, PSI, LEAD TIME, ,N-5, N-4, N-3,N-2, N-1, N, N+1, N+2, N+3, N+4, PACKING MONTH, PRODUCTION MONTH ,MONTH,YEAR",5,1);
  myFormat2=StructNew();
  myFormat2.bold=false;

  SpreadsheetFormatRow(theSheet,myFormat2,6);
  SpreadsheetAddRows(theSheet,getROW);
  SpreadsheetFormatColumn(theSheet,{dataformat="0"},5);
  SpreadsheetFormatColumn(theSheet,{alignment="right"},5);
  SpreadsheetFormatCellRange (theSheet,{font="Calibri"}, 7, 1, 2006, 17);
</cfscript>

根据评论更新:

示例查询值为 50,数据类型为 number。我的查询是这样的。

SELECT psi||'%' FROM  vendor 

我认为这是因为数据类型是数字并与 % 连接,这就是它存储为文本的原因。

尝试:

SpreadsheetFormatCell(sheet, {dataformat="0"}, rowCounter, columnCounter)

Adobe Help docs for SpreadSheetFormatCell.

上有可用于单个单元格的格式设置选项的完整列表

一样,如果查询值包含“%”(或附加一个),则它不是数字。这是一个 string,这就是它没有按预期工作的原因。

-- returns a string
SELECT  numericColumnName ||'%' FROM tableName

相反,查询应该 return 原始数值:

  SELECT  numericColumnName FROM tableName

然后使用 {dataformat='0"%"'} 格式化电子表格单元格。请注意嵌套引号以防止 Excel 将该值乘以 100 使其成为百分比。

SpreadsheetFormatColumn(theSheet,{dataformat='0"%"'}, colNumber);

Runnable Example

更新:

But now when I tried to sum with other value from other cell lets say column E1=50% , column D1=8 it will come to 58 instead of 8.5

哦...这与仅用“%”显示 50 不同。听起来您确实希望单元格值为 0.50(而不是 50),但将其显示为 50%。为此,请在查询中将该值除以 100。

 SELECT NumericColumnName / 100.0 AS NumericColumnName FROM tableName

然后将电子表格单元格的格式设置为 "0%"

 SpreadsheetFormatColumn(theSheet,{dataformat="0%"}, colNumber);

Runnable Example