Сохранение листов Excel в CSV выполняется медленно - PullRequest
0 голосов
/ 04 сентября 2018

Попытка сохранить все (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 \PhpOffice\PhpSpreadsheet\Reader\Xls();
        $reader->setReadDataOnly(true);
        $spreadsheet = $reader->load($xls);
        $sheetCount = $spreadsheet->getSheetCount();
        $loadedSheetNames = $spreadsheet->getSheetNames();
        for ($i = 0; $i < $sheetCount; $i++) {
            $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
            $writer->setDelimiter(';');
            $writer->setEnclosure('');
            $writer->setLineEnding("\r\n");
            $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?

1 Ответ

0 голосов
/ 05 сентября 2018

Я могу подтвердить, что это медленно для меня, около 30 секунд для каждого листа. Проблема заключается в использовании VLOOKUP. Если вы сократите диапазон поиска до поиска только по заполненным ячейкам, а не по всему столбцу, вы получите гораздо более высокую производительность.

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

Или, если вы гарантируете, что лист коды отсортирован по алфавиту, вы можете использовать функцию LOOKUP :

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

И он также будет работать намного быстрее.

Обратите внимание, что по какой-то причине вы не можете заполнить ни одну из этих формул. Они требуют ручного ввода диапазонов. (

...