阻止PHPExcel在写入文件时计算值

Per*_*cat 6 php special-characters phpexcel

使用PHPExcel类在Excel文件中编写数据时.

当作者工作时,而不是在向单元格添加数据时,会发生这种情况 $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
Run Code Online (Sandbox Code Playgroud)

我从不使用PHPExcel_Cell->getCalculatedValue()写入Excel 的函数$this->sheet->setCellValue('A1', $value).

我不需要在Excel文件中计算任何公式.只需将DB2数据导出到此文件即可.

显然可能$value包含公式字符= + - > <(因为单元AF20955确实导致致命错误>),但这不应该被解释为公式,而只是作为字符串的一部分.我该如何解决这个问题?

Mar*_*ker 10

保存时默认调用PHPExcel计算引擎,但您可以通过调用告诉编写者不要应用它

$objWriter->setPreCalculateFormulas(false);
Run Code Online (Sandbox Code Playgroud)

在保存之前


当您通过调用setCellValue()或类似设置单元格值时,PHPExcel将尝试使用值绑定器识别数据类型并在内部(与MS Excel完全相同)进行相应设置.包含a =作为第一个字符的单元格将被视为公式.

如果您想确保将它们视为字符串而不是公式,那么最简单的方法是使用setCellValueExplicit().

  • 如果您正在使用autowidth列,那么即使setPreCalculateFormulas设置为false,PHPExcel也需要执行任何公式,以便计算列宽,因为这是基于单元格的实际格式化显示值 (2认同)