2013-03-21 11 views
7
<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> 

ColdFusion Setttings: Versione 9,0,1,274733
Enterprise Edition
sistema operativo Windows 2003
OS versione 5.2valori alfanumerici cfspreadsheet che terminano con d

Excel versione Office 2010 Versione 14.0.6129.5000 (32 bit).

Se si esegue questo codice sul sistema, si ottengono gli stessi risultati?

Ancora più importante, se si ottengono gli stessi risultati, sai cosa fare al riguardo?

Modifica

Controllo per le altre lettere problematici:

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

La stringa 4F anche visualizzato solo il numero.

+0

sono i personaggi "D" in realtà nelle celle e alcune formattazioni loro si nasconde o sono le lettere del tutto mancante? –

+0

Mancano completamente. –

+0

I caratteri D sono mancanti, mi sono imbattuto in questo anche prima e l'unica soluzione che ho trovato è stata la modifica manuale dopo che il foglio di calcolo è stato creato. Che ha funzionato come era una relazione una volta. – Busches

risposta

3

Il problema qui è che POI sta interpretando F e D come suffissi di precisione singola/doppia che Java ha. Vedere i documenti here.

direi che questo è un bug con CF, come CFML non ha il concetto di questi suffissi (o addirittura la nozione di carri singoli o doppi di precisione), quindi dovrebbe assicurarsi che tali stringhe sono trattati come stringhe quando viene passato al POI.

+0

Lol, ho detto esattamente la stessa cosa nei commenti precedenti, ma l'ho cancellato dopo aver capito che @ Miguel-F ha già sottolineato questo link. Ho pensato che l'avrebbe posta come risposta. Oh beh ... troppo tardi :) Lo batti! – Leigh

+0

Dannazione. Vorrei aver visto il link: coulda mi ha risparmiato un po 'di tempo per la ricerca e lo sviluppo. –

0

Se Miguel risponde, lo contrassegnerò come corretto. Lo scopo di questa risposta è mostrare varie cose che ho provato e come sono andate a finire.

<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> 

Tutto ciò con SpreadsheetCellValue visualizzerebbe le virgolette, più la barra rovesciata che ho usato per tentare di sfuggire loro. Come indicato sopra, SpreadsheetSetCellFormula con le virgolette triple è l'unico modo che sembra dare i risultati attesi il 100% delle volte.

Nella mia applicazione effettiva, utilizzo cfheader/cfcontent per offrire il file. Se seleziono Apri, con IE9, Excel mostra un avviso di contenuto pericoloso e mi offre un pulsante per Abilitare modifica. Inoltre, qualsiasi cella creata con SpreadSheetSetCellFormula() visualizza il numero 0. Selezionando la cella viene visualizzato il valore effettivo nella casella del valore excel, o qualsiasi altra cosa venga chiamata. Inoltre, l'abilitazione della modifica modifica la visualizzazione dei valori previsti.

+0

Contrassegna semplicemente questa o l'altra risposta come corretta. In realtà non è la mia risposta, l'ho appena trovato. Sono contento che ha funzionato per te. –

+0

Dan - Solo curioso, qualsiasi cambiamento se si formatta la cella come testo prima? Probabilmente no, sospetto che CF converta '4d' in un numero molto prima di allora. Ma vale la pena sparare. – Leigh

+0

Leigh - Potrebbe funzionare bene. Non so se l'hai visto ma c'era un riferimento nel post che ho fatto riferimento a una soluzione simile. Vedere la risposta qui http://stackoverflow.com/questions/3081202/how-to-format-spreadsheet-columns-using-coldfusion –

1

Utilizzando codice originale di Dan per verificare la presenza di personaggi problematici ho aggiornato per la ricerca di caratteri (per usare anteponendo o aggiungendo al testo dato) per nascondere questa funzione 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 ++; 
} 

Risulta prepending o aggiungendo caratteri non stampabili chr (127) e chr (160) mantengono la presentazione di 4F o 4D.

0

FWIW, CF11 + ha introdotto un nuovo attributo di tipo di dati per SpreadSheetSetCellValue.Utilizzando il tipo "string" conserva il valore originale e produce il risultato atteso, vale a dire "4D"

SpreadSheetSetCellValue(WorkBook, "4D", 1, 1, "string"); 
Problemi correlati