| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | <?phpnamespace 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 原样显示,不为 nulluse 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++; // 行数增加                }            },        ];    }}
 |