excel - cfspreadsheet valores alfanuméricos que terminan en d
coldfusion cfml (4)
<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>
Ajustes de ColdFusion: versión 9,0,1,274733
Edición Enterprise
Sistema operativo Windows 2003
Versión del SO 5.2
Versión de Excel Office 2010 versión 14.0.6129.5000 (32 bit).
Si ejecuta este código en su sistema, ¿obtiene los mismos resultados?
Más importante aún, si obtiene los mismos resultados, ¿sabe qué hacer al respecto?
Editar
Comprobación de otras letras problemáticas:
RowNumber = 1;
for (i = 65; i <= 90; i++){
SpreadSheetSetCellValue(WorkBook, chr(i), RowNumber, 1);
SpreadSheetSetCellValue(WorkBook, "4#chr(i)#", RowNumber, 2);
RowNumber ++;
}
La cadena 4F también muestra el número solamente.
Si Miguel responde, lo marcaré como correcto. El propósito de esta respuesta es mostrar varias cosas que probé y cómo resultaron.
<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>
Cualquier cosa con SpreadsheetCellValue mostraría las comillas, más la barra invertida que utilicé para intentar escapar de ellas. Como se indicó anteriormente, SpreadsheetSetCellFormula con comillas triples es la única forma que parece dar los resultados esperados el 100% del tiempo.
Más información En mi aplicación actual, uso cfheader / cfcontent para ofrecer el archivo. Si selecciono Abrir, con IE9, Excel muestra una advertencia de contenido peligroso y me ofrece un botón para habilitar la edición. Además, las celdas creadas con SpreadSheetSetCellFormula () muestran el número 0. La selección de la celda muestra el valor real en el cuadro de valor de Excel, o como se llame. Además, habilitar la edición cambia la visualización a los valores esperados.
El problema aquí es que POI interpreta los F y D como los sufijos de precisión simple / doble que tiene Java. Ver documentos aquí .
Yo diría que esto es un error con CF, ya que CFML no tiene el concepto de estos sufijos (o la noción de flotantes de precisión simple o doble), por lo que debe asegurarse de que dichas cadenas sean tratadas como cadenas al pasar a POI.
Utilizando el código original de Dan para verificar si hay caracteres problemáticos, lo actualicé para buscar caracteres (para usar al anteponer o adjuntar al texto dado) para ocultar esta característica de 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 ++;
}
Resulta que anteponiendo o añadiendo caracteres no imprimibles chr (127) y chr (160) mantienen la presentación de 4F o 4D.
FWIW, CF11 + introdujo un nuevo atributo de tipo de datos para SpreadSheetSetCellValue . El uso de tipo "cadena" conserva el valor original y produce el resultado esperado, es decir, "4D"
SpreadSheetSetCellValue(WorkBook, "4D", 1, 1, "string");