laravel-excel使用導出
46362 ワード
laravel-excel使用公式文書 compser[compserダウンロードアドレス](require maatwebsite/laravel-excel-light) インストールに必要なPHP拡張とcompser依存拡張 は、クラスを作り出すために作成され、この特定の導出には、リード論理 を追加することができる.セットで導出され、これはインターフェース を引き継ぐ必要がある.配列から導出され、これはインターフェース を継承する必要がある. laravelのormクエリデータから導出され、これはインターフェース を継承する必要がある.ディショナーによって導出され、これはインターフェース を引き継ぐ必要がある.は、外部にエクスポートを呼び出し、コントローラを作成し、外部からの呼び出しの方法を提供する. は、ローカル に導出される.は、ディスク に導出される.はフォーマットを導出して、この拡張パケットの名前は 自分の必要なタイトル行を設定します.これはインターフェース を引き継ぐ必要があります.エクスポートスタイルを設定します.これは継承インターフェース を必要とします.
"require": {
"ext-json": "*",
"php": "^7.0",
"phpoffice/phpspreadsheet": "^1.6",
"illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*",
"opis/closure": "^3.1"
},
"require-dev": {
"phpunit/phpunit": "^8.0",
"mockery/mockery": "^1.1",
"orchestra/testbench": "^3.8",
"orchestra/database": "^3.8",
"predis/predis": "^1.1"
}
ここのlaravelはphpoffice/phpspreadsheet
compserパッケージが必要ですので、それをインストールする必要があります.php拡張が必要です."require": {
"php": "^5.6|^7.0",
"ext-ctype": "*",
"ext-dom": "*",
"ext-gd": "*",
"ext-iconv": "*",
"ext-fileinfo": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-SimpleXML": "*",
"ext-xml": "*",
"ext-xmlreader": "*",
"ext-xmlwriter": "*",
"ext-zip": "*",
"ext-zlib": "*",
"psr/simple-cache": "^1.0",
"markbaker/complex": "^1.4",
"markbaker/matrix": "^1.1"
},
エクスポートphp artisan make:export LiYiExport
の後にパラメータ--model=
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Database\Eloquent\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
class LiYiExport implements FromCollection
{
public function collection()
{
// TODO: Implement collection() method.
/*
* : model all();
* LiYiModel::all();
*/
if (!true) {
return $result = LiYiModel::all();
}
/**
* : ,
*/
$result = [
[1,2,3],
[4,5,6],
[7,8,9]
];
return new Collection($result);
}
}
Collection
類がここに見られます.彼はclass Collection extends BaseCollection implements QueueableCollection
で、class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable
から継承されています.Collection
の構造方法において: public function __construct($items = [])
{
$this->items = $this->getArrayableItems($items);
}
protected function getArrayableItems($items)
{
if (is_array($items)) {
return $items;
} elseif ($items instanceof self) {
return $items->all();
} elseif ($items instanceof Arrayable) {
return $items->toArray();
} elseif ($items instanceof Jsonable) {
return json_decode($items->toJson(), true);
} elseif ($items instanceof JsonSerializable) {
return $items->jsonSerialize();
} elseif ($items instanceof Traversable) {
return iterator_to_array($items);
}
return (array) $items;
}
use Maatwebsite\Excel\Concerns\FromArray;
class LiYiExport implements FromArray
{
public function array(): array
{
$result = [
[1,2,3],
[4,5,6],
[7,8,9]
];
}
}
use Maatwebsite\Excel\Concerns\FromQuery;
class LiYiExport implements FromQuery
{
public function query()
{
return LIYiModel::query()->select()->where()->orderBy();
}
}
注意:query()方法では、orm方法のget()方法は絶対に使わないでください.その下の動作はchunk()法を使用する必要があります.つまり、導出を異なる小塊に分けて行うということです.chunk()法では、最初のパラメータは処理毎の数の大きさで、第二のパラメータは一つのクローズドです.use Maatwebsite\Excel\Concerns\FromIterator;
class LiYiExport implements FromIterator
{
public function iterator(): Iterator
{
}
}
/**
* Notes:
* File name:DownloadExcel
* Create by: Jay.Li
* Created on: 2019\6\18 0018 11:51
*/
use Maatwebsite\Excel\Facades\Excel;
class DownloadExcel
{
/**
* Notes:
* Function Name: downloadWindows
* User: Jay.Li
* Date: 2019\6\18 0018
* Time: 11:53
*/
public function downloadWindows()
{
/**
* :
* :
* : , null, xslx ,
* : header ,
*/
Excel::download(new LiYiExport(), 'test.csv','','');
}
}
/**
* Notes:
* File name:DownloadExcel
* Create by: Jay.Li
* Created on: 2019\6\18 0018 11:51
*/
use Maatwebsite\Excel\Facades\Excel;
class DownloadExcel
{
/**
* Notes: ,
* Function Name: downloadStore
* User: Jay.Li
* Date: 2019\6\18 0018
* Time: 11:55
*/
public function downloadStore()
{
/**
* :
* :
* : ,
* : , null, Excel::XLSX
* : ,
*
*/
Excel::store(new LiYiExport(), 'test.csv', 's3',Excel::XLSX,'');
}
}
laravel-excel
ですが、エクセルだけではなく、多くのフォーマットのファイルをサポートしています.Maatwebsite\Excel\Excel
ファイルに定義があります.class Excel implements Exporter, Importer
{
use RegistersCustomConcerns;
const XLSX = 'Xlsx';
const CSV = 'Csv';
const TSV = 'Csv';
const ODS = 'Ods';
const XLS = 'Xls';
const SLK = 'Slk';
const XML = 'Xml';
const GNUMERIC = 'Gnumeric';
const HTML = 'Html';
const MPDF = 'Mpdf';
const DOMPDF = 'Dompdf';
const TCPDF = 'Tcpdf';
}
use Maatwebsite\Excel\Concerns\WithHeadings;
class LiYiExport implements FromQuery, WithHeadings
{
public function query()
{
return LIYiModel::query()->select()->where()->orderBy();
}
public function headings(): array
{
return [
' ',
' ',
' ',
];
}
}
handdings()方法は1つの配列を返します.1次元配列でも良いし、2次元配列でもいいです.2次元配列は複数の行を返します.use Maatwebsite\Excel\Concerns\WithEvents;use Maatwebsite\Excel\Events\AfterSheet;
class LiYiExport implements FromQuery, WithHeadings, AfterSheet
{
public function query()
{
return LIYiModel::query()->select()->where()->orderBy();
}
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
// sheet
$workSheet = $event->sheet()->getDelegate();
// 16;
$cellRange = 'A1:W1';
$workSheet->getStyle($cellRange)->getFont()->getSize(16);
// B2:G8
$styleArray = [
'borders' => [
'outline' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
]
]
];
//
$end = $workSheet->getCellCollection()->getHighestRow();
$cellRangeContent = 'A2:W'.$end;
//
$workSheet->getStyle($cellRangeContent)->applyFromArray($styleArray);
//
$arrayColumn = [
'B' => 30,
'D' => 60,
'G' => 90,
];
foreach ($arrayColumn as $k => $item) {
// ,
$workSheet->getColumnDimension($k)->setWidth($item);
}
// ,
$workSheet->getStyle($cellRangeContent)->getAlignment()
->setWrapText(true)->setVertical("center")
->setHorizontal("center");
}
];
}
}
この中には2つの注意が必要です.register Events();この関数は1つの配列であり、2.キー値はMaatwebsite\Excel\Events\AfterSheet
というクラスであり、クローズド関数依存注入use Maatwebsite\Excel\Events\AfterSheet;
はその構成関数を通して構成されている. public function __construct(Sheet $sheet, $exportable)
{
$this->sheet = $sheet;
$this->exportable = $exportable;
}
インジェクション public function __construct(Worksheet $worksheet)
{
$this->worksheet = $worksheet;
$this->chunkSize = config('excel.exports.chunk_size', 100);
$this->temporaryFileFactory = app(TemporaryFileFactory::class);
}
github住所は皆さんの交流と学習を歓迎します.