Skip to content

Commit 4479805

Browse files
committedOct 14, 2024·
Update missing methods, return bool indicate export result
1 parent 81e96f1 commit 4479805

File tree

3 files changed

+50
-11
lines changed

3 files changed

+50
-11
lines changed
 

‎src/ExcelExporter.php

+4-6
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class ExcelExporter
3636
* @param string $filename
3737
* @param array $options
3838
*
39-
* @return mixed
39+
* @return bool
4040
*/
4141
public static function export($data, $filename, array $options = [])
4242
{
@@ -88,11 +88,8 @@ public static function export($data, $filename, array $options = [])
8888
// ->export('export.xlsx');
8989
return static::make()
9090
->setData($data)
91-
->setHeaders($options['headers'] ?? array_keys(first($data)))
92-
->setMapping($options['mapping']
93-
??
94-
array_combine(array_keys(first($data)),
95-
array_keys(first($data))))
91+
->setHeaders($options['headers'] ?? array_values($options['mapping'] ?? []))
92+
->setMapping($options['mapping'] ?? array_combine(array_keys(self::first($data)), array_keys(self::first($data))))
9693
->setFormatters($options['formatters'] ?? [])
9794
->setColumnMergeRules($options['columnMergeRules'] ?? [])
9895
->setRowMergeRules($options['rowMergeRules'] ?? [])
@@ -103,4 +100,5 @@ public static function make()
103100
{
104101
return new static;
105102
}
103+
106104
}

‎src/Traits/ExcelExportable.php

+41-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
use Illuminate\Support\Collection;
3434
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
3535
use PhpOffice\PhpSpreadsheet\Spreadsheet;
36+
use PhpOffice\PhpSpreadsheet\Writer\Xls;
3637
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
3738

3839
/**
@@ -209,7 +210,7 @@ public function setSkipHeader(bool $skipHeader)
209210
*
210211
* @param string $filename The file name to export to.
211212
*
212-
* @return void
213+
* @return bool status of export based PHP Office reader load() result
213214
*/
214215
public function export(string $filename)
215216
{
@@ -229,8 +230,24 @@ public function export(string $filename)
229230
}
230231
$this->applyMerging($sheet);
231232
$this->applyMetaSettings($spreadsheet);
232-
$writer = new Xlsx($spreadsheet);
233+
// get extension
234+
$extension = pathinfo($filename, PATHINFO_EXTENSION);
235+
$extension = strtolower($extension);
236+
if ($extension === 'xls') {
237+
$writer = new Xls($spreadsheet);
238+
$validator = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
239+
} else {
240+
$writer = new Xlsx($spreadsheet);
241+
$validator = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
242+
}
233243
$writer->save($filename);
244+
// validate output file using phpoffice
245+
try {
246+
$validator->load($filename);
247+
return true;
248+
} catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
249+
return false;
250+
}
234251
}
235252

236253
/**
@@ -315,7 +332,7 @@ protected function writeRow($sheet, $row, $rowIndex)
315332
*/
316333
protected function getValue($row, $key)
317334
{
318-
return $this->dataGet($row, $key);
335+
return self::dataGet($row, $key);
319336
}
320337

321338
/**
@@ -327,7 +344,7 @@ protected function getValue($row, $key)
327344
*
328345
* @return mixed
329346
*/
330-
protected function dataGet($target, $key, $default = null)
347+
private static function dataGet($target, $key, $default = null)
331348
{
332349
if (is_null($key)) {
333350
return $target;
@@ -429,4 +446,24 @@ protected function getHeaderFromMappingKey($mappingKey)
429446
{
430447
return $this->mapping[$mappingKey] ?? null;
431448
}
449+
450+
private static function first(array $array, $callback = null, $default = null) {
451+
if (is_null($callback)) {
452+
if (empty($array)) {
453+
return value($default);
454+
}
455+
456+
foreach ($array as $item) {
457+
return $item;
458+
}
459+
}
460+
461+
foreach ($array as $key => $value) {
462+
if ($callback($value, $key)) {
463+
return $value;
464+
}
465+
}
466+
467+
return value($default);
468+
}
432469
}

‎src/Traits/HasExportMerging.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ public function setRowMergeRules(array $rules)
6969

7070
return $this;
7171
}
72-
72+
protected function applyMerging($sheet)
73+
{
74+
$this->applyColumnMerging($sheet);
75+
$this->applyRowMerging($sheet);
76+
}
7377
protected function applyColumnMerging($sheet)
7478
{
7579
foreach ($this->columnMergeRules as $rule) {

0 commit comments

Comments
 (0)
Please sign in to comment.