有没有办法告诉PHPExcel只是编写从数组提供的行,而不进行任何计算/应用样式/在使用fromArray时编写OR时执行的任何其他操作?
需要此功能。
$inputFileName = 'client_files/sample.xlsx';
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
$objPHPExcel->getSheet(0)->setCellValue('D2', '@' . $user . ' followers');
$objPHPExcel->getSheet(0)->fromArray(
$followersData,
NULL,
'A5'
);
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->setPreCalculateFormulas(false);
$objWriter->save(FINAL_FOLDER . '/' . $line[0] . '.xlsx');
内存消耗不是问题。但上面只花了太多时间(2分钟,2700行)
- > save()调用需要93秒。 - > fromArray()需要53秒
还有其他更快速的Excel库,它允许加载现有的xlsx然后写入它吗?
由于
答案 0 :(得分:0)
您可以尝试使用Spout。如果您不关心样式/计算,它应该可以解决您的性能问题(只需几秒钟)。
这些方面应该有效:
$inputFileName = 'client_files/sample.xlsx';
$reader = ReaderFactory::create(Type::XLSX);
$reader->open($inputFileName);
$outputFileName = FINAL_FOLDER . '/' . $line[0] . '.xlsx';
$writer = WriterFactory::create(Type::XLSX);
$writer->openToFile($outputFileName);
$reader->nextSheet();
$rowCount = 0;
while ($reader->hasNextRow()) {
$row = $reader->nextRow();
if ($rowCount === 1) {
$row[1] = '@' . $user . ' followers';
}
$followersDataForCurrentRow = $followersData[$rowCount];
$columnIndexStart = 4; // To add stuff in the 5th column
foreach ($followersDataForCurrentRow as $followerValue) {
$row[$columnIndexStart] = $followerValue;
$columnIndexStart++;
}
$writer->addRow($row);
$rowCount++;
}
$reader->close();
$writer->close();
答案 1 :(得分:0)
我做了很多事情,导致了更快的性能。
修复内存泄漏
$objPHPExcel->disconnectWorksheets() ;
unset($objPHPExcel) ;
我不确定是什么解决了这个问题..