PHPExcel 没有用公式写最后一个单元格

PHPExcel not writing last cells with formula

我在 PHP 5.6 上使用 PHPExcel 1.7.8 从数据库 table.[=15= 导出 Excel 文件]

如果结果集少于 20.000 行,将显示带有总计公式的总计行。

如果结果集大于 20.000,则不会显示包含公式的总计单元格,也不会显示背景颜色。

这是生成最后一行总计的代码:

$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, Yii::t('asientos_excel_diario', 'TOTALES'));

$formula = '=SUM(' . "M{$pos_ini_suma_totales}:M" . $ultima_fila . ')';
$objPHPExcel->getActiveSheet()->setCellValue('M' . $i, $formula);
$objPHPExcel->getActiveSheet()->getStyle('M' . $i)->getNumberFormat()->setFormatCode('#,##0.00');

$formula = '=SUM(' . "N{$pos_ini_suma_totales}:N" . $ultima_fila . ')';
$objPHPExcel->getActiveSheet()->setCellValue('N' . $i, $formula);
$objPHPExcel->getActiveSheet()->getStyle('N' . $i)->getNumberFormat()->setFormatCode('#,##0.00');

$objPHPExcel->getActiveSheet()->getStyle('A5:N5')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FFA0A0A0');
$objPHPExcel->getActiveSheet()->getStyle('A' . $i . ':' . 'N' . $i)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FFA0A0A0');

如果我简单地从公式中删除“=”(因此我有一个普通字符串的公式),单元格内容蚂蚁背景就会出现。

但是如果我保留公式,它们将显示为空白单元格:

然后,如果我将 DB 结果从 30k 限制为 15k,单元格就会显示出来并且公式可以正常工作:

我真的不知道我遇到了什么样的限制或错误运行,但这并没有太大意义。

除此之外,我正在用这个写文件:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

也许我接下来也会尝试使用不同版本的 PHPExcel 库,或者尝试在另一个地方从头开始写一个孤立的例子,看看它的行为是否相同。

我已经通过更改作者的输出文件格式解决了这个问题:

来自这里:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

为此:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

现在总计单元格已正确生成,同时包含背景和公式。