首页 > 解决方案 > PHPExcel - 一次设置具有相同值的单元格

问题描述

我正在尝试编写 18000 行 x 42 列。从 col 'E' 到 'DD' 的值必须设置为值 0。我正在尝试使用增量,但我发现这是导致内存耗尽。

我的代码是这样的:

$col = $lastcol;
foreach ($diag0 as $key) {
    $sheet->setCellValue('A'.(string)($col + 1), '0');
    $sheet->setCellValue('B'.(string)($col + 1), $key->cdDiag);
    $sheet->setCellValue('D'.(string)($col + 1), $key->nmDiag);

    for ($char='E'; $char <= 'J' ; $char++) { 
        $sheet->setCellValue($char.(string)($col + 1), '0');
    }

    $col++;
}

我会尝试 PHPExcel 缓存配置,但它仍然给出相同的结果。我认为由于 col 'E' 到 'DD' 具有相同的值,我可以让它像在一个循环中设置 'E' 到 'DD' 为 0 吗?

标签: phpphpexcel

解决方案


您可以为一系列单元格设置格式:

$objPHPExcel->getActiveSheet()    // THIS SHOULD BE THE SAME AS $sheet
    ->getStyle('E2:DD18000')
    ->getNumberFormat()
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);

包含可用格式的列表:

http://apigen.juzna.cz/doc/ouardisoft/PHPExcel/class-PHPExcel_Style_NumberFormat.html

此外,也许这种插入行的方式效果更好:

$objPHPExcel->getActiveSheet()->fromArray(array(
    0, //COL A
    $key->cdDiag,  //COL B
    '', 
    $key->nmDiag,
    0,0,0,0,0, ... 0,0,0,0   // your 26 COLUMNS E to DD, 
),NULL,'A' . $row + 1);

您还可以将列设置为空字符串'',因为您添加了 setColumnsFormat。而你的 $col 变量,并不重要,但它应该被称为 $row ......你正在通过行而不是 cols ......

我从未尝试过,但是:

您可以$objPHPExcel->garbageCollect();在插入每一行后使用来解决内存分配问题,如果这不能解决问题,请尝试提供更多内存:

ini_set('memory_limit', '256M');

默认是128,只要确保你不要消耗太多资源......


推荐阅读