PHPExcel按原样写行,没有任何计算/样式

时间:2015-05-05 04:35:28

标签: php phpexcel

有没有办法告诉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然后写入它吗?

由于

2 个答案:

答案 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)

我做了很多事情,导致了更快的性能。

  1. 在IDE外部运行脚本
  2. 将内存限制设置为3GB
  3. 使用不同版本的PHP
  4. 修复内存泄漏

    $objPHPExcel->disconnectWorksheets() ;
    unset($objPHPExcel) ;
    
  5. 我不确定是什么解决了这个问题..