如何将特定列从 XLSX 导入数组 (Laravel)?
How do I import specific columns from XLSX to an array (Laravel)?
我需要将 table 导入数组。并且不导入所有单元格,只导入 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'));
}
}
但是没有用。我做错了什么?
更新
尝试了这个选项,但是 returns 所有列,而不是 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();
}
}
我需要将 table 导入数组。并且不导入所有单元格,只导入 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'));
}
}
但是没有用。我做错了什么?
更新
尝试了这个选项,但是 returns 所有列,而不是 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();
}
}