PHP Spreadsheet: After saving data to a new worksheet, the data of the previous worksheets are deleted

499 Views Asked by At

I am creating a script to save CSV data into an excel document, but in different worksheets, I mean, every CSV doc will go into a new worksheet, but after saving data to a new worksheet the previous data that are in the other worksheets are deleted. This is my code

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;




$spreadsheet = new Spreadsheet();
$spreadsheet2 = new Spreadsheet();
$reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load('test.xlsx');
$numSheets = $spreadsheet -> getSheetCount();

$reader2 = new PhpOffice\PhpSpreadsheet\Reader\Csv();



/* Set CSV parsing options */

$reader2->setDelimiter(',');
$reader2->setEnclosure('"');
$reader2->setSheetIndex($numSheets);
echo $numSheets;
/* Load a CSV file and save as a XLS */

$spreadsheet2 = $reader2->load('testcsv.csv');
$writer = new Xlsx($spreadsheet2);
$writer->save('test.xlsx');

$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
?>

With this only the last worksheet have data enter image description here

I want to emphasize that I have no errors but I am not achieving what I want to do

1

There are 1 best solutions below

0
On

The problem is that you use

$numSheets = $spreadsheet -> getSheetCount();

but you must count your sheet numbers and add a new sheet in your file. I would suggest you use a loop.

$numSheets = $spreadsheet -> getSheetCount();
foreach($csvs as $csv){
    // Create a new worksheet called "My Data"
    $myWorkSheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, 'My Data');

    // Attach the "My Data" worksheet as the first worksheet in the Spreadsheet object
    $spreadsheet->addSheet($myWorkSheet, $numSheets);
    $numSheets++;
}

More information here