123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?php
- namespace App\Exports;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\Redis;
- use Maatwebsite\Excel\Concerns\FromCollection;
- use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
- use Maatwebsite\Excel\Concerns\WithEvents; // 自动注册事件监听器
- use Maatwebsite\Excel\Concerns\WithHeadings;
- use Maatwebsite\Excel\Concerns\WithStrictNullComparison; // 导出 0 原样显示,不为 null
- use Maatwebsite\Excel\Events\AfterSheet;
- use PhpOffice\PhpSpreadsheet\Cell\Cell;
- use PhpOffice\PhpSpreadsheet\Cell\DataType;
- use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;
- class Exports extends DefaultValueBinder implements WithCustomValueBinder , FromCollection, WithEvents, WithStrictNullComparison,withHeadings
- {
- /**
- * @return \Illuminate\Support\Collection
- */
- public function __construct($data,$type=1,$headers)
- {
- $this->data = $data;
- $this->type = $type;
- $this->headers = $headers;
- }
- public function registerEvents(): array
- {
- //区分不通状态的合同导出,格式不同
- $type = $this->type.'_set';
- return $this->$type();
- }
- //数组转集合
- public function collection()
- {
- return new Collection($this->createData());
- }
- //业务代码
- public function createData()
- {
- $name = $this->type;
- $data = $this->export();
- return $data;
- }
- public function bindValue(Cell $cell, $value)
- {
- if (is_numeric($value)) {
- $cell->setValueExplicit($value, DataType::TYPE_STRING2);
- return true;
- }
- // else return default behavior
- return parent::bindValue($cell, $value);
- }
- //use Maatwebsite\Excel\Concerns\WithColumnFormatting;
- //use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
- // public function columnFormats(): array
- // {
- // return [
- // 'F' => NumberFormat::FORMAT_NUMBER,
- // ];
- // }
- // 自定义表头,需实现withHeadings接口
- public function headings(): array
- {
- return $this->headers;
- }
- private function export(){
- $list = [];
- foreach ($this->data as $v){
- $list[] = $v;
- }
- return $list;
- }
- private function production_order_set(){
- return [
- AfterSheet::class => function (AfterSheet $event) {
- $count = count($this->data);
- //设置区域单元格水平居中
- $event->sheet->getDelegate()->getStyle('A1:'.'M'.($count+1))->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
- // 定义列宽度
- $widths = ['A' => 20, 'B' => 20, 'C' => 20, 'D' => 20, 'E' => 20, 'F' => 35, 'G' => 25, 'H' => 25, 'I' => 25, 'J' => 25];
- foreach ($widths as $k => $v) {
- // 设置列宽度
- $event->sheet->getDelegate()->getColumnDimension($k)->setWidth($v);
- }
- $row = 2;
- //设置字段
- foreach ($this->data as $item) {
- $event->sheet->setCellValue('A'.$row, $item['production_time']);
- $event->sheet->setCellValue('B'.$row, $item['production_no']);
- $event->sheet->setCellValue('C'.$row, $item['out_order_no_time']);
- $event->sheet->setCellValue('D'.$row, $item['out_order_no']);
- $event->sheet->setCellValue('E'.$row, $item['customer_no']);
- $event->sheet->setCellValue('F'.$row, $item['customer_name']);
- $event->sheet->setCellValue('G'.$row, $item['table_header_mark']);
- $event->sheet->setCellValue('H'.$row, $item['product_no']);
- $event->sheet->setCellValue('I'.$row, $item['product_title']);
- $event->sheet->setCellValue('J'.$row, $item['product_size']);
- $event->sheet->setCellValue('K'.$row, $item['product_unit']);
- $event->sheet->setCellValue('L'.$row, $item['order_quantity']);
- $event->sheet->setCellValue('M'.$row, $item['production_quantity']);
- $event->sheet->setCellValue('N'.$row, $item['not_production']);
- $event->sheet->setCellValue('O'.$row, $item['technology_material']);
- $event->sheet->setCellValue('P'.$row, $item['technology_name']);
- $event->sheet->setCellValue('Q'.$row, $item['wood_name']);
- $event->sheet->setCellValue('R'.$row, $item['process_mark']);
- $event->sheet->setCellValue('S'.$row, $item['table_body_mark']);
- $event->sheet->setCellValue('T'.$row, $item['out_crt_man']);
- $row++; // 行数增加
- }
- },
- ];
- }
- }
|