Пишите в Excel с использованием phpspreadsheet в php - PullRequest
0 голосов
/ 21 февраля 2019

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

public function exportAll()(
{
    $e = 2; // Row start at 2
    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();

    $data1 = $this->model_general->get_data1();
    $sheet->setActiveSheetIndex(0);

    //Excel Heading
    $sheet->setCellValue('A1', 'Date');
    $sheet->setCellValue('B1', 'Details');
    // ... set heading ...

    // Excel Data
    if(!empty($data1)):
    foreach ($data1 as row)
    {
        $sheet->setCellValue('A'.$e, $row->date);
        $sheet->setCellValue('B'.$e, $row->details);
        // ... set data ...
        $e++;
    }
    endif;

    // Assign Excel Name
    $sheet->setTitle('Data1');

    $sheet->createSheet();

    $data2 = $this->model_general->get_data2();
    $sheet->setActiveSheetIndex(1);

    //Excel Heading
    $sheet->setCellValue('A1', 'Date');
    $sheet->setCellValue('B1', 'Details');
    // ... set heading ...

    // Excel Data
    if(!empty($data2)):
    foreach ($data2 as row)
    {
        $sheet->setCellValue('A'.$e, $row->date);
        $sheet->setCellValue('B'.$e, $row->details);
        // ... set data ...
        $e++;
    }
    endif;

    // Assign Excel Name
    $sheet->setTitle('Data2');

    $sheet->createSheet();

    $data3 = $this->model_general->get_data3();
    $sheet->setActiveSheetIndex(2);

    //Excel Heading
    $sheet->setCellValue('A1', 'Date');
    $sheet->setCellValue('B1', 'Details');
    // ... set heading ...

    // Excel Data
    if(!empty($data3)):
    foreach ($data3 as row)
    {
        $sheet->setCellValue('A'.$e, $row->date);
        $sheet->setCellValue('B'.$e, $row->details);
        // ... set data ...
        $e++;
    }
    endif;

    // Assign Excel Name
    $sheet->setTitle('Data3');

    // Set first sheet as active sheet
    $sheet->setActiveSheetIndex(0);

    $writer = new Xlsx($spreadsheet);
    $filename = 'All Data';
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'. $filename .'.xlsx"');
    header('Cache-Control: max-age=0');
    $writer->save('php://output'); // download file

}

Прямо сейчас .. этот код выдает ошибку в $ sheet-> setActiveSheetIndex (0);

Call to undefined method PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::setActiveSheetIndex()

Дайте мне знать, гдеэто идет не так .. я, кажется, не могу найти -, -

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Этот код может создавать несколько листов, добавлять содержимое и сохранять этот файл.Попробуйте это.

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet; 
use PhpOffice\PhpSpreadsheet\Writer\Xls; 

$spreadsheet = new Spreadsheet(); 

$sheet = $spreadsheet->getActiveSheet();  
$sheet->setCellValue('A1', 'Sheet1');  

$sheet_2=$spreadsheet->createSheet();
$sheet_2->setCellValue('B1', 'Sheet2'); 

$sheet_3=$spreadsheet->createSheet();
$sheet_3->setCellValue('B5', 'Sheet3'); 

$writer = new Xls($spreadsheet);  

$writer->save('gfg1.xls'); 
?>

В своем коде вы запускаете Spreadsheet () и создаете лист 1 из таблицы $. Это правильно.

 $spreadsheet = new Spreadsheet();
 $sheet = $spreadsheet->getActiveSheet();

Чтобы создать следующий лист, вам нужно снова использовать электронную таблицу $,

 $nextsheet=$spreadsheet->createSheet();

, но вы используете

 $sheet->createSheet();
0 голосов
/ 26 февраля 2019
$worksheet1 = $spreadsheet->createSheet();
$worksheet1->setTitle('Another sheet');

https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#creating-worksheets-in-a-workbook

...