PHPExcel 按原样写入行,没有任何计算/样式
PHPExcel write rows as is , without any calculation / styling
有没有办法告诉 PHPExcel 只写从数组提供的行,而不做任何计算/应用样式/它在写或使用 fromArray 时做的任何其他事情?
需要这个来提高性能。
$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 然后写入它?
谢谢
您可以尝试使用 Spout。如果你不关心styling/calculation,它应该可以解决你的性能问题(只需要几秒钟)。
按照这些思路应该可行:
$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();
我做了很多事情使性能更快。
- 运行脚本外IDE
- 将内存限制设置为 3GB
- 使用了不同版本的 PHP
修复了内存泄漏问题
$objPHPExcel->disconnectWorksheets() ;
unset($objPHPExcel) ;
我不确定是什么解决了这个问题..
有没有办法告诉 PHPExcel 只写从数组提供的行,而不做任何计算/应用样式/它在写或使用 fromArray 时做的任何其他事情?
需要这个来提高性能。
$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 然后写入它?
谢谢
您可以尝试使用 Spout。如果你不关心styling/calculation,它应该可以解决你的性能问题(只需要几秒钟)。
按照这些思路应该可行:
$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();
我做了很多事情使性能更快。
- 运行脚本外IDE
- 将内存限制设置为 3GB
- 使用了不同版本的 PHP
修复了内存泄漏问题
$objPHPExcel->disconnectWorksheets() ; unset($objPHPExcel) ;
我不确定是什么解决了这个问题..