Как создать файл Excel с помощью PHP Office в Laravel

Для создания файлов Excel мы будем использовать проект PHPExcel PHPOffice. Этот проект предоставляет набор классов для языка программирования PHP, которые позволяют писать и читать из различных форматов файлов электронных таблиц, таких как Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre / OpenOffice Calc. ods, Gnumeric, PDF, HTML и т. д. Этот проект основан на стандарте Microsoft OpenXML и PHP.

Чтобы легко обрабатывать PHPExcel в вашем проекте laravel, мы будем использовать maatwebsite\excel пакет. Этот пакет предоставляет красноречивый способ импорта и экспорта файлов Excel и CSV для Laravel 4. * Laravel 5. * с мощью PHPExffice PHPExcel.

Требования

Чтобы использовать PHPExcel (из PHPOffice) в нашем проекте Laravel, вам необходимо включить в проект пакет Laravel-Excel.

  • Версия PHP> = 5.3.7
  • Laravel> = 4.1
  • PHPOffice PHPExcel> = 1.8.0 (включено composer.json)
  • PHP расширение php_zip включено (требуется, если вам нужен PHPExcel для обработки файлов .xlsx .ods или .gnumeric).
  • PHP расширение php_xml включено.
  • PHP расширение php_gd2 включено (необязательно, но требуется для автоматического расчета ширины столбца).

Чтобы добавить этот пакет, добавьте следующую строку в ваш файл composer.json и затем выполните composer install:

{
"require": {
"maatwebsite/excel": "~2.1.0"
}
}

Или потребуйте это прямо в консоли с композитором, используя:

composer require maatwebsite/excel

Наконец, загрузите пакет в поставщика услуг laravel в yourapp/config/app.php :

'providers' => [
//...
Maatwebsite\Excel\ExcelServiceProvider::class,
]

Замечания: если вы используете Laravel> 5.2, вам нужно установить laravelcollective / автобус пакет.

Чтобы добавить пакет laravelcollective / bus, добавьте следующую строку в ваш файл composer.json и затем выполните установку composer:

{
"require": {
"laravelcollective/bus": "^5.2"
}
}

Или потребуйте это прямо в консоли с композитором, используя:

composer require laravelcollective/bus

Наконец, загрузите пакет в поставщика услуг laravel в yourapp/config/app.php :

'providers' => [
// ...
Collective\Bus\BusServiceProvider::class,
// ...
],

И вы готовы использовать PHP Office в своем проекте.

Характеристики

Поскольку библиотека в основном является оболочкой PHPOffice для laravel, вам необходимо знать некоторые основные отличия от исходной библиотеки:

Манипуляция / Создание файлов Excel

Чтобы манипулировать созданием файла, вы используете обратный вызов.

Excel::create('Filename', function($excel) {
// Call writer methods here
});

Сохранить / Экспорт и форматы

Чтобы скачать созданный файл, используйте ->export($ext) или же ->download($ext),

  • Экспорт в Excel5 (xls).
  • Экспорт в Excel2007 (xlsx).
  • Экспорт в CSV (csv).

Вы можете использовать писателя как:

Excel::create('Filename', function($excel) {
// Excel code
})->export('xls');
// or
->download('xls');

Теперь, когда вы это знаете, вы можете приступить к созданию файлов Excel.

Использование с псевдонимом

Чтобы зарегистрировать псевдоним для класса Excel, перейдите в файл yourapp / config / app.php и зарегистрируйте псевдоним, как вы хотите:

'aliases' => [
//...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

Поскольку наш псевдоним будет Excel, нам нужно будет включить с помощью use Заявление в верхней части нашего контроллера, и он будет доступен как Excel в теме.

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

Без псевдонима вам нужно будет включить класс с полным именем в ваш контроллер вместо use Excel,

Скачать файл Excel

Следующий контроллер в действии index создает файл Excel прямо в браузере:

PHPExcel демо

setTitle('My awesome report 2016');
// Chain the setters
$excel->setCreator('Me')->setCompany('Our Code World');
$excel->setDescription('A demonstration to change the file properties');
$data = [12,"Hey",123,4234,5632435,"Nope",345,345,345,345];
$excel->sheet('Sheet 1', function ($sheet) use ($data) {
$sheet->setOrientation('landscape');
$sheet->fromArray($data, NULL, 'A3');
});
})->download('xlsx');
}
}

Сохранить файл Excel на сервере

Чтобы сохранить сгенерированный файл Excel на сервере, используйте метод store вместо download:

setTitle('My awesome report 2016');
// Chain the setters
$excel->setCreator('Me')->setCompany('Our Code World');
$excel->setDescription('A demonstration to change the file properties');
$data = [12,"Hey",123,4234,5632435,"Nope",345,345,345,345];
$excel->sheet('Sheet 1', function ($sheet) use ($data) {
$sheet->setOrientation('landscape');
$sheet->fromArray($data, NULL, 'A3');
});
})->store('xlsx', storage_path());
// or  ->store('xls', storage_path('excel-folder'));
}
}

Создание графиков

Если вам нужно создавать диаграммы для ваших файлов Excel, тогда вам нужно использовать "обычный php"Синтаксис PHPOffice. В пакет maatwebsite / excel уже включен PHPOffice, поэтому вам нужно только привести классы, используя обратную косую черту.

Следующий фрагмент создает диаграмму в вашем пути хранения в контроллере laravel. :

createSheet();
$excel->setActiveSheetIndex(1);
$excel->getActiveSheet()->setTitle('ChartTest');
$objWorksheet = $excel->getActiveSheet();
$objWorksheet->fromArray(
array(
array('', 'Rainfall (mm)', 'Temperature (°F)', 'Humidity (%)'),
array('Jan', 78, 52, 61),
array('Feb', 64, 54, 62),
array('Mar', 62, 57, 63),
array('Apr', 21, 62, 59),
array('May', 11, 75, 60),
array('Jun', 1, 75, 57),
array('Jul', 1, 79, 56),
array('Aug', 1, 79, 59),
array('Sep', 10, 75, 60),
array('Oct', 40, 68, 63),
array('Nov', 69, 62, 64),
array('Dec', 89, 57, 66),
)
);
$dataseriesLabels1 = array(
new \PHPExcel_Chart_DataSeriesValues('String', 'Grafico!$B$1', NULL, 1), //  Temperature
);
$dataseriesLabels2 = array(
new \PHPExcel_Chart_DataSeriesValues('String', 'Grafico!$C$1', NULL, 1), //  Rainfall
);
$dataseriesLabels3 = array(
new \PHPExcel_Chart_DataSeriesValues('String', 'Grafico!$D$1', NULL, 1), //  Humidity
);
$xAxisTickValues = array(
new \PHPExcel_Chart_DataSeriesValues('String', 'Grafico!$A$2:$A$13', NULL, 12), //  Jan to Dec
);
$dataSeriesValues1 = array(
new \PHPExcel_Chart_DataSeriesValues('Number', 'Grafico!$B$2:$B$13', NULL, 12),
);
//  Build the dataseries
$series1 = new \PHPExcel_Chart_DataSeries(
\PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType
\PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED, // plotGrouping
range(0, count($dataSeriesValues1) - 1), // plotOrder
$dataseriesLabels1, // plotLabel
$xAxisTickValues, // plotCategory
$dataSeriesValues1                              // plotValues
);
//  Set additional dataseries parameters
//      Make it a vertical column rather than a horizontal bar graph
$series1->setPlotDirection(\PHPExcel_Chart_DataSeries::DIRECTION_COL);
$dataSeriesValues2 = array(
new \PHPExcel_Chart_DataSeriesValues('Number', 'Grafico!$C$2:$C$13', NULL, 12),
);
//  Build the dataseries
$series2 = new \PHPExcel_Chart_DataSeries(
\PHPExcel_Chart_DataSeries::TYPE_LINECHART, // plotType
\PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping
range(0, count($dataSeriesValues2) - 1), // plotOrder
$dataseriesLabels2, // plotLabel
NULL, // plotCategory
$dataSeriesValues2                              // plotValues
);
$dataSeriesValues3 = array(
new \PHPExcel_Chart_DataSeriesValues('Number', 'Grafico!$D$2:$D$13', NULL, 12),
);
//  Build the dataseries
$series3 = new \PHPExcel_Chart_DataSeries(
\PHPExcel_Chart_DataSeries::TYPE_AREACHART, // plotType
\PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping
range(0, count($dataSeriesValues2) - 1), // plotOrder
$dataseriesLabels3, // plotLabel
NULL, // plotCategory
$dataSeriesValues3                              // plotValues
);
//  Set the series in the plot area
$plotarea = new \PHPExcel_Chart_PlotArea(NULL, array($series1, $series2, $series3));
$legend = new \PHPExcel_Chart_Legend(\PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
$title = new \PHPExcel_Chart_Title('Grafica anhelada maternofetal :(');
//  Create the chart
$chart = new \PHPExcel_Chart(
'chart1', // name
$title, // title
$legend, // legend
$plotarea, // plotArea
true, // plotVisibleOnly
0, // displayBlanksAs
NULL, // xAxisLabel
NULL            // yAxisLabel
);
//  Set the position where the chart should appear in the worksheet
$chart->setTopLeftPosition('F2');
$chart->setBottomRightPosition('O16');
//  Add the chart to the worksheet
$objWorksheet->addChart($chart);
$writer = new \PHPExcel_Writer_Excel2007($excel);
$writer->setIncludeCharts(TRUE);
// Save the file.
$writer->save(storage_path().'/file.xlsx');
}
}

Заключение

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

Повеселись !

Ссылка на основную публикацию
Adblock
detector