Как использовать Php Spreadsheet с Fat free для чтения и редактирования файла Excel? - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно отредактировать файл Excel в php.У меня есть простая таблица PHP.Я использую обезжиренный продукт, и проблема в том, что

public function MakeExcel()
{

    require 'vendor/autoload.php';
    use \vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Spreadsheet ;
    use \vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Writer\Xlsx ;
    $Spreadsheet = new Spreadsheet();
    $sheet = $Spreadsheet->getActiveSheet();
    $sheet->setCellValue('A3', 'toto');
    $writer = new Xlsx($Spreadsheet);
    $writer->save("test.xlsx");


    $f3->set('CONTENT','views/dashboard/dashboard_liste.html');
    $f3->set('CONTENTJS','views/dashboard/dashboard_liste.js');
    echo \Template::instance()->render('views/accueil/accueil.html','text/html');
    $this->db = null;
}

использование не существует в обезжиренном виде, поэтому я попытался:

$f3->use(\vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Spreadsheet);
Or
$f3->use("\vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Spreadsheet");
and many other it return me the error : 

ОШИБКА 500 Вызовфункция-член use () в null

Проблема решена, спасибо всем:

use PhpOffice \ PhpSpreadsheet \ Spreadsheet;используйте PhpOffice \ PhpSpreadsheet \ Writer \ Xlsx;

класс MakeExcel расширяет контроллер {

public function MakeExcel(){

    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', 'Hello World !');
    $writer = new Xlsx($spreadsheet);
    $writer->save('hello world.xlsx');
}

}

Ответы [ 2 ]

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

Вам нужно объявить эти файлы в верхней области php

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

Затем в методе создать объект для электронной таблицы

$spreadsheet = new Spreadsheet();

Затем вы можете определить границу и выравнивание для файла xls, напримерчто

$cell_st =[
     'font' =>['bold' => true],
     'alignment' =>['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
     'borders'=>['bottom' =>['style'=> \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],'top' =>['style'=> \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN]]
    ];

Для определения заголовка вы можете использовать следующий код

$spreadsheet->setActiveSheetIndex(0)->mergeCells('A2:D2'); 
    $spreadsheet->setActiveSheetIndex(0)->setCellValue('A2',  "<YOUR HEADER>");
$spreadsheet->getActiveSheet()->getStyle('A2:D2')->applyFromArray($cell_st);

И затем определить имена столбцов

$spreadsheet->setActiveSheetIndex(0)
         ->setCellValue('A3', 'ID')
         ->setCellValue('B3', 'NAME')
         ->setCellValue('C3', 'CITY')
         ->setCellValue('D3', 'SALARY');

После всего вышеприведенного кода теперь вы можетезапустите ваше содержимое в цикле вот так

    $rowcount = 4;
    foreach($data_array as $key=>$value){
        $spreadsheet->setActiveSheetIndex(0)
         ->setCellValue('A'.$rowcount, $value['id'])
         ->setCellValue('B'.$rowcount, $value['name'])
         ->setCellValue('C'.$rowcount, $value['city'])
         ->setCellValue('D'.$rowcount, $value['salary']);
         $rowcount++;
    }

и, наконец, теперь создайте объект класса Xlsx для сохранения файла excel

$writer = new Xlsx($spreadsheet);

$file_name = "report.xls';
$file_root_path = "assets/reports/xls/".$file_name;
$file_site_path = "localhost/xls_generate/assets/reports/xls/".$file_name;
$writer->save($file_root_path);

// final xls file path is here
echo $file_site_path;

Вот и все, надеюсь, эта работа для вас ..

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

Прежде всего кажется, что вы используете Fat Free неправильно.Потому что $f3 это null.

Секунда.Возможно, вы импортируете классы с неправильными пространствами имен.Вы можете прочитать документацию PhpSpreadsheet.

Правильный путь:

require 'vendor/autoload.php';

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

Вы можете физически найти эти классы и посмотреть на пространство имен.Поставьте свой импорт автозагрузки композитора и используйте блок вне этой функции.

Убедитесь, что вы запустили composet install

Сделайте так, чтобы ваша функция работала без PhpSpreadsheet.И после этого попробуйте добавить другой функционал

...