From 003bc7815f25fef5704b689852661e6d00e3f3eb Mon Sep 17 00:00:00 2001 From: guozhaoxuan <1175398345@qq.com> Date: Thu, 26 Jun 2025 14:46:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Data/Import/Sheet.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Data/Import/Sheet.php b/src/Data/Import/Sheet.php index 2b46611..219d0b5 100644 --- a/src/Data/Import/Sheet.php +++ b/src/Data/Import/Sheet.php @@ -159,7 +159,8 @@ public function formatRowByHeader($row, $header) * @var Column $column */ foreach ($this->columns as $column) { - $data[$column->field ?: $column->title] = $row[$header[$column->title]]; + $headerIndex = $header[$column->title] ?? ''; + $data[$column->field ?: $column->title] = $row[$headerIndex] ?? ''; } return $data; } From 79cc11885fb7918c7cdc27d7cd1ce86a8221b9ab Mon Sep 17 00:00:00 2001 From: guozhaoxuan <1175398345@qq.com> Date: Fri, 27 Jun 2025 18:27:56 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:header=E5=A4=B4=E5=89=8D=E7=BD=AE?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Data/Import/Sheet.php | 19 +++++++++++++++++++ src/Driver/XlsWriterDriver.php | 8 ++++++-- src/Exception/EmptyDataException.php | 10 ++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/Exception/EmptyDataException.php diff --git a/src/Data/Import/Sheet.php b/src/Data/Import/Sheet.php index 219d0b5..f7a8c5e 100644 --- a/src/Data/Import/Sheet.php +++ b/src/Data/Import/Sheet.php @@ -5,6 +5,7 @@ namespace Vartruexuan\HyperfExcel\Data\Import; use Vartruexuan\HyperfExcel\Data\BaseObject; +use Vartruexuan\HyperfExcel\Exception\ExcelException; class Sheet extends BaseObject { @@ -164,4 +165,22 @@ public function formatRowByHeader($row, $header) } return $data; } + + + /** + * 校验header头正确性 + * + * @param array $header + * @return void + * @throws ExcelException + */ + public function validateHeader(array $header = []) + { + foreach ($this->columns as $column) { + if (!in_array($column->title, $header)) { + throw new ExcelException("The column header does not exist in [{$column->title}]"); + } + } + } + } \ No newline at end of file diff --git a/src/Driver/XlsWriterDriver.php b/src/Driver/XlsWriterDriver.php index ca40887..f26a7cc 100644 --- a/src/Driver/XlsWriterDriver.php +++ b/src/Driver/XlsWriterDriver.php @@ -20,6 +20,7 @@ use Vartruexuan\HyperfExcel\Event\BeforeExportSheet; use Vartruexuan\HyperfExcel\Event\BeforeImportExcel; use Vartruexuan\HyperfExcel\Event\BeforeImportSheet; +use Vartruexuan\HyperfExcel\Exception\EmptyDataException; use Vartruexuan\HyperfExcel\Exception\ExcelException; use Vartruexuan\HyperfExcel\Helper\Helper; use Vtiful\Kernel\Excel; @@ -245,7 +246,7 @@ protected function importSheet(Excel $excel, ImportSheet $sheet, ImportConfig $c $sheetName = $sheet->name; $this->event->dispatch(new BeforeImportSheet($config, $this, $sheet)); - + $excel->openSheet($sheetName); $header = []; @@ -256,7 +257,10 @@ protected function importSheet(Excel $excel, ImportSheet $sheet, ImportConfig $c // 跳过指定行 $excel->setSkipRows($sheet->headerIndex - 1); } - $header = $excel->nextRow(); + if (null === $header = $excel->nextRow()) { + throw new EmptyDataException('The imported data is empty.'); + } + $sheet->validateHeader($header); } $columnTypes = $sheet->getColumnTypes($header ?? []); diff --git a/src/Exception/EmptyDataException.php b/src/Exception/EmptyDataException.php new file mode 100644 index 0000000..13c67ba --- /dev/null +++ b/src/Exception/EmptyDataException.php @@ -0,0 +1,10 @@ + Date: Sat, 28 Jun 2025 09:29:55 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=E9=87=8D=E5=A4=8D=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Event/Error.php | 2 +- src/Job/BaseJob.php | 2 +- src/Listener/ProgressListener.php | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Event/Error.php b/src/Event/Error.php index dd0e17d..585e349 100644 --- a/src/Event/Error.php +++ b/src/Event/Error.php @@ -9,7 +9,7 @@ class Error extends Event { - public function __construct(public BaseConfig $config, public Driver $driver, public \Throwable $exception) + public function __construct(public BaseConfig $config, public Driver $driver, public \Throwable $exception,public bool $isPush = true) { parent::__construct($config, $driver); } diff --git a/src/Job/BaseJob.php b/src/Job/BaseJob.php index 9c57343..f8d1faa 100644 --- a/src/Job/BaseJob.php +++ b/src/Job/BaseJob.php @@ -43,7 +43,7 @@ public function fail(\Throwable $e): void { $driver = $this->getDriver(); $driver->logger->error('job failed:' . $e->getMessage(), ['exception' => $e]); - $driver->event->dispatch(new Error($this->config, $driver, $e)); + $driver->event->dispatch(new Error($this->config, $driver, $e, false)); } abstract function handle(); diff --git a/src/Listener/ProgressListener.php b/src/Listener/ProgressListener.php index 5e97614..d64aacb 100644 --- a/src/Listener/ProgressListener.php +++ b/src/Listener/ProgressListener.php @@ -190,6 +190,8 @@ function error(object $event) $event->driver->progress->setProgress($event->config, new ProgressData([ 'status' => ProgressData::PROGRESS_STATUS_FAIL, ])); - $event->driver->progress->pushMessage($event->config->getToken(), $event->exception->getMessage()); + if($event->isPush){ + $event->driver->progress->pushMessage($event->config->getToken(), $event->exception->getMessage()); + } } } \ No newline at end of file