将 Excel 工作表保存为 CSV 的速度很慢



尝试将所有(5页(工作表保存到名为工作表的单独csv文件中。 这段代码非常慢,提取 5 页大约需要 5 分钟,每页只有 30 行和 4 列。

<?php 
require 'vendor/autoload.php';
$xls  = 'test.xls';
echo convertXlsCsv($xls);
function convertXlsCsv($xls)
:bool
{
$result = FALSE; // DEFAULT
try {
$reader = new PhpOfficePhpSpreadsheetReaderXls();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($xls);
$sheetCount = $spreadsheet->getSheetCount();
$loadedSheetNames = $spreadsheet->getSheetNames();
for ($i = 0; $i < $sheetCount; $i++) {
$writer = new PhpOfficePhpSpreadsheetWriterCsv($spreadsheet);
$writer->setDelimiter(';');
$writer->setEnclosure('');
$writer->setLineEnding("rn");
$writer->setSheetIndex($i);
$writer->setUseBOM(true); //Writing UTF-8 CSV files
$writer->save($loadedSheetNames[$i].'.csv');
$result = TRUE;
}
} catch (Exception $e){
echo "Error";
}
return $result;  
}#endfunc

如果我使用Xlsx代码不起作用说Calculation error

那么如何快速将所有页面保存到csv呢?

我可以确认它对我来说也很慢,每张纸大约 30 秒。问题似乎是使用VLOOKUP。如果将搜索范围缩小到仅搜索填充的单元格而不是整个列,则会获得更快的性能。

=VLOOKUP(A18, codes!A1:B250, 2, FALSE)

或者,如果您确保代码表按字母顺序排序,则可以使用LOOKUP函数:

=LOOKUP(A18, codes!A1:A250, codes!B1:B250)

而且它的执行速度也会快得多。

请注意,由于某种原因,您无法使用这些公式中的任何一个进行填充。它们需要手动输入范围。:(

最新更新