123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?php
- namespace App\Module;
- use Excel;
- use Maatwebsite\Excel\Concerns\FromCollection;
- use Maatwebsite\Excel\Concerns\WithEvents;
- use Maatwebsite\Excel\Concerns\WithHeadings;
- use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
- use Maatwebsite\Excel\Concerns\WithTitle;
- use Maatwebsite\Excel\Events\AfterSheet;
- use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
- use PhpOffice\PhpSpreadsheet\Writer\Exception;
- class BillExport implements WithHeadings, WithEvents, FromCollection, WithTitle, WithStrictNullComparison
- {
- public $title;
- public $headings = [];
- public $data = [];
- public $typeLists = [];
- public $typeNumber = 0;
- public function __construct($title, array $data)
- {
- $this->title = $title;
- $this->data = $data;
- }
- public static function create($data = [], $title = "Sheet1") {
- if (is_string($data)) {
- list($title, $data) = [$data, $title];
- }
- if (!is_array($data)) {
- $data = [];
- }
- return new BillExport($title, $data);
- }
- public function setTitle($title) {
- $this->title = $title;
- return $this;
- }
- public function setHeadings(array $headings) {
- $this->headings = $headings;
- return $this;
- }
- public function setData(array $data) {
- $this->data = $data;
- return $this;
- }
- public function setTypeList(array $typeList, $number = 0) {
- $this->typeLists = $typeList;
- $this->typeNumber = $number;
- return $this;
- }
- public function store($fileName = '') {
- if (empty($fileName)) {
- $fileName = date("YmdHis") . '.xls';
- }
- try {
- return Excel::store($this, $fileName);
- } catch (Exception $e) {
- return "导出错误:" . $e->getMessage();
- } catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
- return "导出错误:" . $e->getMessage();
- }
- }
- public function download($fileName = '') {
- if (empty($fileName)) {
- $fileName = date("YmdHis") . '.xls';
- }
- try {
- return Excel::download($this, $fileName);
- } catch (Exception $e) {
- return "导出错误:" . $e->getMessage();
- } catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
- return "导出错误:" . $e->getMessage();
- }
- }
- /**
- * 导出的文件标题
- * @return string
- */
- public function title(): string
- {
- return $this->title;
- }
- /**
- * 标题行
- * @return array
- */
- public function headings(): array
- {
- return $this->headings;
- }
- /**
- * 导出的内容
- * @return \Illuminate\Support\Collection
- */
- public function collection()
- {
- return collect($this->data);
- }
- /**
- * 设置单元格事件
- * @return array
- */
- public function registerEvents(): array
- {
- return [
- AfterSheet::Class => function (AfterSheet $event) {
- $count = count($this->data);
- foreach ($this->typeLists AS $cell => $typeList) {
- if ($cell && $typeList) {
- $p = $this->headings ? 1 : 0;
- for ($i = 1 + $p; $i <= max($count, $this->typeNumber) + $p; $i++) {
- $validation = $event->sheet->getDelegate()->getCell($cell . $i)->getDataValidation();
- $validation->setType(DataValidation::TYPE_LIST);
- $validation->setErrorStyle(DataValidation::STYLE_WARNING);
- $validation->setAllowBlank(false);
- $validation->setShowDropDown(true);
- $validation->setShowInputMessage(true);
- $validation->setShowErrorMessage(true);
- $validation->setErrorTitle('输入的值不合法');
- $validation->setError('选择的值不在列表中,请选择列表中的值');
- $validation->setPromptTitle('从列表中选择');
- $validation->setPrompt('请选择下拉列表中的值');
- $validation->setFormula1('"' . implode(',', $typeList) . '"');
- }
- }
- }
- }
- ];
- }
- }
|