Примечание PhpSpreadsheet: неопределенное смещение: 4 - PullRequest
0 голосов
/ 05 марта 2020

Я изо всех сил пытался найти способ прочитать файлы Excel в каталоге, скопировать рабочий лист с именем «Division» в новый файл, а затем пронумеровать приращение новых рабочих листов на единицу - Division1, Division2, et c .. .

Ниже приведен мой код, который я получаю предупреждение для неопределенного индекса, который не имеет большого значения, но он только создает новый файл Excel только с четырьмя листами, когда должно быть более 240 листов .

        ini_set('display_errors', 1);
        ini_set('display_startup_errors', 1);
        error_reporting(E_ALL);

        use PhpOffice\PhpSpreadsheet\Helper\Sample;
        use PhpOffice\PhpSpreadsheet\IOFactory;

        $exportedFiles = scandir('PhpSpreadsheet/Export');
        $inputFileNames = [];
        $sheetnames = [];
        $outfile = 'all-together-now.xlsx';

        foreach($exportedFiles as $key=> $value) {
            if ($value == '.' || $value == '..') {

            } else {
                array_push($inputFileNames, 'PhpSpreadsheet/Export/' . $value);
                array_push($sheetnames, 'Division');
            }
        }

        $inputFileType = 'Xlsx';
        $reader = IOFactory::createReader($inputFileType);
        $reader->setLoadSheetsOnly($sheetnames);
        $contador = 1;

        foreach ($inputFileNames as $book => $inputFileName) {
            echo ('$inputFileName: ' . $inputFileName) . '</br>'; 

            $reader = IOFactory::createReader("Xlsx");
            $spreadsheet = $reader->load($inputFileName);
            $clonedWorksheet = clone $spreadsheet->getSheetByName('Division');
            $clonedWorksheet->setTitle('Division' . $contador);
            $spreadsheetMain = $reader->load($outfile);
            $spreadsheetMain->addSheet($clonedWorksheet);
            $writer = IOFactory::createWriter($spreadsheetMain, "Xlsx");
            $writer->save($outfile);
            $contador++;
        }

Ниже приведены предупреждения:

        Notice: Undefined offset: 4 in
        PhpOffice\PhpSpreadsheet\Writer\Xlsx->save( )
        PhpOffice\PhpSpreadsheet\Spreadsheet->garbageCollect( )

Как обычно, заранее спасибо

1 Ответ

0 голосов
/ 07 марта 2020

Часть решения заключалась в увеличении объема памяти, а другая заключалась в использовании addSheet ()

. Вот код, который работает:

ini_set('memory_limit','32768M');

use PhpOffice\PhpSpreadsheet\IOFactory;

require_once 'PhpSpreadsheet/src/Bootstrap.php';

$exportedFiles = scandir('PhpSpreadsheet/Export');

$inputFileNames = [];

$sheetnames = [];

$outfile = 'all-together-now.xlsx';

foreach($exportedFiles as $key=> $value) {
    if ($value == '.' || $value == '..') {

    } else {
        array_push($inputFileNames, 'PhpSpreadsheet/Export/' . $value);
        array_push($sheetnames, 'Division');
    }
}

$inputFileType = 'Xlsx';
$reader = IOFactory::createReader($inputFileType);
$reader->setLoadSheetsOnly($sheetnames);
$contador = 1;

foreach ($inputFileNames as $book => $inputFileName) {
    echo ('$inputFileName: ' . $inputFileName) . '</br>';
    $reader = IOFactory::createReader("Xlsx");
    $spreadsheet = $reader->load($inputFileName);
    $spreadsheet->getSheetByName('Division')->getStyle('Division');
    $clonedWorksheet = clone $spreadsheet->getSheetByName('Division');
    $clonedWorksheet->setTitle('Division' . $contador);

    /* open new file for writing spread sheets to it */
    $spreadsheetMain = $reader->load($outfile);
    $spreadsheetMain->addSheet($clonedWorksheet);
    $writer = IOFactory::createWriter($spreadsheetMain, "Xlsx");
    $writer->save($outfile);
    $contador++;
}
$spreadsheet->disconnectWorksheets();
echo "The process has completed";
die();

Вышеупомянутый скрипт создал Excel рабочая тетрадь с 247 листами из 247 файлов Excel

...