我正在尝试写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'具有相同的值,我能否使其像在一个循环中将0设置为'E'到'DD'一样?
答案 0 :(得分:1)
您可以设置一系列单元格的格式:
$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,请确保您不会消耗过多的资源...