ColdFusion (9) загадочным образом удаляет символы «D» и «F» после чисел при экспорте в Microsoft Excel (2007) - PullRequest
5 голосов
/ 18 марта 2011

Вот несколько фрагментов кода для примера:

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 ]

5 голосов
/ 18 марта 2011

Похоже, что в качестве обходного пути можно задать формулу ячейки в виде букв "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 и суффиксы, обозначающие Дважды и Float, и зачистки их после преобразования.

Вы можете отправить сообщение об ошибке в Adobe, выбрав https://bugbase.adobe.com/index.cfm.

0 голосов
/ 11 сентября 2013

Я обновил код из связанного вопроса стека, чтобы искать символы (чтобы использовать добавление или добавление к заданному тексту), чтобы скрыть эту функцию 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, заканчивающиеся на d

0 голосов
/ 18 марта 2011

Вы можете попробовать старый трюк с электронными таблицами - возвращаясь к дням Lotus - приведения значений к тексту, начав запись с одинарной кавычки: '4D.

0 голосов
/ 18 марта 2011

Вы должны попытаться использовать код D char явно chr(68) вместо "D".

...