导出到Microsoft Excel(2007)时,ColdFusion(9)在数字后神秘地删除字符“D”和“F”

时间:2011-03-17 23:10:27

标签: excel coldfusion export-to-excel

以下是一些示例的代码段:

theSheet = SpreadsheetNew("Rates","True");
SpreadsheetAddRow(theSheet,"4A,4B,4C,4D,4E,4F,4G,4H,4I,4J");
SpreadsheetAddRow(theSheet,"4K,4L,4M,4N,4O,4P,4Q,4R,4S,4T");
SpreadsheetAddRow(theSheet,"4U,4V,4W,4X,4Y,4Z,4D4,4F4");

<cfheader name="content-disposition" value="attachment; filename=#GetTickCount()#.xlsx">
<CFHEADER NAME="Expires" VALUE="#now()#">
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#SpreadsheetReadBinary(theSheet)#"/>

问题是“4D”和“4F”(而不是其他人)会丢失'D'和'F'并被格式化为数字。

我试过了:

formatText = StructNew();
formatText.dataformat="@";
SpreadsheetFormatColumns(theSheet,formatText,"1-10");

我确认这会将Excel中的格式设置为“文本”,但现在我只看到文本格式单元格中的数字4!我也试过使用'字符,但是当它在Excel中打开时,它只显示'而不是将单元格文字化。

这很奇怪;谁知道发生了什么?

4 个答案:

答案 0 :(得分:5)

似乎解决方法是将单元格公式设置为文字“4D”。

theSheet = SpreadsheetNew("Rates","True");
SpreadsheetAddRow(theSheet,"4A,4B,4C,,4E,,4G,4H,4I,4J");
SpreadsheetSetCellFormula(theSheet, """4D""", 1, 4);
SpreadsheetSetCellFormula(theSheet, """4F""", 1, 6);
SpreadsheetAddRow(theSheet,"4K,4L,4M,4N,4O,4P,4Q,4R,4S,4T");
SpreadsheetAddRow(theSheet,"4U,4V,4W,4X,4Y,4Z,4D4,4F4");

我仍然不知道为什么这种情况正在发生,但我的想法是SpreadsheetAddRow()和SpreadsheetSetCell()将4D和4F解释为数字并解释D和F以及后缀站立用于Double和Float,并在转换后将其剥离。

您可以转到https://bugbase.adobe.com/index.cfm将错误提交给Adobe。

答案 1 :(得分:0)

您应该尝试明确使用D char代码chr(68)而不是“D”。

答案 2 :(得分:0)

您可以尝试使用旧的电子表格技巧 - 返回Lotus日期 - 通过使用单引号启动条目来强制文本值:'4D

答案 3 :(得分:0)

我更新了相关堆栈问题中的代码以搜索字符(通过预先添加或附加到给定文本来使用)来隐藏此ColdFusion功能:

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的显示

我提到的相关堆栈问题:cfspreadsheet alphanumeric values ending in d