如何解决如何将特定列从 XLSX 导入数组Laravel?
我需要将一个表导入到一个数组中。并且不是导入所有单元格,而是只导入 2 列。
例如来自
A | B | C | D | F |
---|---|---|---|---|
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
到
[
{
'A' => 1,'F' => 5,},{
'A' => 6,'F' => 10,}
]
app\Imports\PricesImport.php
<?php
namespace App\Imports;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\Importable;
class PricesImport implements ToArray
{
use Importable;
public function array(array $rows)
{
return array($rows[0],$rows[4]);
}
}
以及控制器中的调用:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Imports\PricesImport;
use Maatwebsite\Excel\Facades\Excel;
class SomeController extends Controller
{
public function import(Request $request) {
$array = Excel::toArray(new PricesImport,$request->file('file'));
}
}
但它不起作用。我做错了什么?
更新
尝试过此选项,但它返回所有列,而不是 2 个特定列 app\Imports\PricesImport.php
<?php
namespace App\Imports;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\Importable;
class PricesImport implements ToArray
{
use Importable;
private $data;
public function __construct()
{
$this->data = [];
}
public function array(array $rows)
{
foreach ($rows as $row) {
$row = $row->toArray();
$this->data[] = array('sku' => $row[0],'price' => $row[4]);
}
return $this->data;
}
}
解决方法
多亏了 Patrick Brouwers 的提示,这才奏效: app\Imports\PricesImport.php
<?php
namespace App\Imports;
use Maatwebsite\Excel\Concerns\ToArray;
class PricesImport implements ToArray
{
private $data;
public function __construct()
{
$this->data = [];
}
public function array(array $rows)
{
foreach ($rows as $row) {
$this->data[] = array('sku' => $row[0],'price' => $row[4]);
}
}
public function getArray(): array
{
return $this->data;
}
}
以及控制器中的调用:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Imports\PricesImport;
use Maatwebsite\Excel\Facades\Excel;
class SomeController extends Controller
{
public function import(Request $request) {
$import = new PricesImport;
Excel::import($import,$request->file('file'));
$array = $import->getArray();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。