2015-10-30 17 views
6

Durante la scrittura dei miei dati in un file Excel con classe PHPExcel.Impedire a PHPExcel di calcolare i valori durante la scrittura nel file

Questo sta accadendo quando lo scrittore funziona, non quando si aggiungono i dati nelle celle $this->sheet->setCellValue()

Fatal error: Uncaught exception 'PHPExcel_Calculation_Exception' with message 'Adressen!AF20955 -> Formula Error: Unexpected operator '>'' in \Cell.php:300 Stack trace: 
#0 \PHPExcel\Worksheet.php(754): PHPExcel_Cell->getCalculatedValue() 
#1 \PHPExcel\Writer\Excel2007\Worksheet.php(373): PHPExcel_Worksheet->calculateColumnWidths() 
#2 \PHPExcel\Writer\Excel2007\Worksheet.php(80): PHPExcel_Writer_Excel2007_Worksheet->_writeCols(Object(PHPExcel_Shared_XMLWriter), Object(PHPExcel_Worksheet)) 
#3 \PHPExcel\Writer\Excel2007.php(304): PHPExcel_Writer_Excel2007_Worksheet->writeWorksheet(Object(PHPExcel_Worksheet), Array, false) 
#4 \excel.php(131): PHPExcel_Writer_Excel2007->save('...') 
#5 \excel. in \PHPExcel\Cell.php on line 300 

non ho mai utilizzare la funzione PHPExcel_Cell->getCalculatedValue() scrivendo al mio Excel, ma solo $this->sheet->setCellValue('A1', $value).

Non ho bisogno di calcolare alcuna formula nel mio file Excel. Esportazione dei dati DB2 in questo file.

è ovviamente possibile che $value contiene caratteri formula come = + - > < (come la cella AF20955 fatto che causa l'errore fatale >), ma questo non deve essere interpretato come formula ma solo come parte della stringa. Come posso risolvere il problema?

motore di calcolo
+0

cosa si trova esattamente in '$ valore' quando si riceve questo errore? –

+0

Non ho idea, è un campo di database, molto difficile da scoprire di cosa si tratta esattamente .... Se è necessario posso cercare il valore – Perocat

+0

quindi provare/prendere la chiamata di scrittura e fare in modo che il catch sputi fuori qualunque valore '$ 'era a quel punto. –

risposta

8

Il PHPExcel viene chiamato per impostazione predefinita quando si salva, ma si può dire lo scrittore non applicarla chiamando

$objWriter->setPreCalculateFormulas(false); 

prima della chiamata per salvare


Quando si imposta un valore di cella con una chiamata a setCellValue() o simile, PHPExcel tenterà di identificare il tipo di dati e impostarlo in modo appropriato internamente (esattamente nello stesso modo di MS Excel) utilizzando il raccoglitore di valori. Le celle che contengono un = come primo carattere saranno considerate come formule da questo.

Se si desidera garantire che vengano considerati come stringhe anziché come formule, l'approccio più semplice è utilizzare invece setCellValueExplicit().

+1

Grazie! L'uso di 'setCellValueExplicit()' funziona bene. Ho anche provato ad usare solo '$ objWriter-> setPreCalculateFormulas (false);' ma l'errore persiste! – Perocat

+2

Se si utilizzano colonne autowidth, PHPExcel deve eseguire qualsiasi formula, anche se setPreCalculateFormulas è impostato su false, in modo da calcolare la larghezza della colonna poiché si basa sul valore effettivo formattato visualizzato per la cella –

+0

Grazie man! Questo ha risolto tutti i miei problemi durante l'utilizzo di un file modello xls. –