以d结尾的cfspreadsheet字母数字值

<cfscript> Workbook = Spreadsheetnew("Workbook"); SpreadSheetSetCellValue(WorkBook, "4D", 1, 1); // displayed 4 SpreadSheetSetCellValue(WorkBook, "4C", 1, 2); // displayed 4C SpreadSheetSetCellValue(WorkBook, "4E", 1, 3); // displayed 4E SpreadSheetSetCellValue(WorkBook, "5C", 1, 4); // displayed 5C SpreadSheetSetCellValue(WorkBook, "5D", 1, 5); // displayed 5 SpreadSheetSetCellValue(WorkBook, "4d", 1, 6); // displayed 4 MYfile = "d:\dw\dwtest\dan\abc.xls"; </cfscript> <cfspreadsheet action="write" filename="#MYFile#" name="Workbook" sheet=1 overwrite=true> 

ColdFusionbuild立:版本9,0,1,274733
版企业版
操作系统Windows 2003
OS版本5.2

Excel版本 Office 2010版本14.0.6129.5000(32位)。

如果你在你的系统上运行这个代码,你会得到相同的结果吗?

更重要的是,如果你得到相同的结果,你知道该怎么做吗?

编辑

检查其他有问题的字母:

 RowNumber = 1; for (i = 65; i <= 90; i++){ SpreadSheetSetCellValue(WorkBook, chr(i), RowNumber, 1); SpreadSheetSetCellValue(WorkBook, "4#chr(i)#", RowNumber, 2); RowNumber ++; } 

string4F也只显示数字。

这里的问题是,POI将F和D解释为Java所具有的单精度/双精度后缀。 在这里看到文档。

我会说这是一个CF错误,因为CFML没有这些后缀的概念(或者实际上是单精度浮点数或双精度浮点数的概念),所以它应该确保这些string在传递给POI时被视为string。

使用Dan的原始代码检查有问题的字符,我更新它以search字符(通过预先确定或附加到给定的文本来使用)以隐藏此ColdFusionfunction:

 WorkBook = spreadsheetNew('Test', true); RowNumber = 1; for (i = 1; i <= 255; i++){ SpreadSheetSetCellValue(WorkBook, i, RowNumber, 1); // what character are we displaying SpreadSheetSetCellValue(WorkBook, chr(i), RowNumber, 2); // see if appending chr(i) allows 4F to display SpreadSheetSetCellValue(WorkBook, "4F#chr(i)#", RowNumber, 3); // see if appending chr(i) allows 4F to display SpreadSheetSetCellValue(WorkBook, "#chr(i)#4F", RowNumber, 4); RowNumber ++; } 

结果是前置或附加不可打印字符chr(127)和chr(160)保持4F或4D的显示。

如果米格尔回答,我会标记为正确的。 这个答案的目的是展示我尝试过的各种各样的事情,以及它们是如何发生的。

 <cfoutput> <cfscript> Workbook = Spreadsheetnew("Workbook"); RowNumber = 1; for (i = 1; i <= 26; i++){ ThisUpperCaseLetter = chr(i + 64); ThisLowerCaseLetter = chr(i + 96); SpreadSheetSetCellValue(WorkBook, ThisUpperCaseLetter, RowNumber, 1); SpreadSheetSetCellValue(WorkBook, "4#ThisUpperCaseLetter#", RowNumber, 2); SpreadSheetSetCellValue(WorkBook, ThisLowerCaseLetter, RowNumber, 3); SpreadSheetSetCellValue(WorkBook, "4#ThisLowerCaseLetter#", RowNumber, 4); SpreadSheetSetCellValue(WorkBook, "'4#ThisLowerCaseLetter#'", RowNumber, 5); // SpreadSheetSetCellFormula(WorkBook, "'4#ThisLowerCaseLetter#'", RowNumber, 6); /* The line above threw this error org.apache.poi.ss.formula.FormulaParser$FormulaParseException: Parse error near char 0 ''' in specified formula ''4a''. Expected number, string, or defined name */ SpreadSheetSetCellValue(WorkBook, """4#ThisLowerCaseLetter#""", RowNumber, 6); SpreadSheetSetCellValue(WorkBook, "\'4#ThisLowerCaseLetter#\'", RowNumber, 7); // the next line is the only one that will achieve the desired result SpreadSheetSetCellFormula(WorkBook, """4#ThisLowerCaseLetter#""", RowNumber, 8); RowNumber ++; } MYfile = "d:\dw\dwtest\dan\abc.xls"; </cfscript> </cfoutput> <cfspreadsheet action="write" filename="#MYFile#" name="Workbook" sheet=1 overwrite=true> 

任何与SpreadsheetCellValue的都会显示引号,加上我用来试图转义它们的反斜杠。 如上所述,带三重引号的SpreadsheetSetCellFormula是百分之百的预期结果。

更多信息在我的实际应用程序中,我使用cfheader / cfcontent来提供文件。 如果我select打开,使用IE9,Excel将显示一个危险的内容警告,并提供给我一个启用编辑button。 此外,使用SpreadSheetSetCellFormula()创build的任何单元格都显示数字0.select该单元格将在Excel值框中显示实际值,或者调用任何值。 此外,启用编辑将显示更改为预期值。

FWIW,CF11 +为SpreadSheetSetCellValue引入了一个新的数据types属性。 使用types“string”保留原始值并产生预期的结果,即“4D”

 SpreadSheetSetCellValue(WorkBook, "4D", 1, 1, "string"); 
Interesting Posts