我正在尝试使用最新版本的Laravel-Excel(3.1.9)将Excel文件转换为数组
下面的代码将下载文件:
return Excel::download(new SalesOrderExport('columns'),'test.xlsx')
但是我需要将其转换为仅获取数组。我现在不希望将此Excel数据存储在数据库中。
我尝试使用下面的代码,但由于load
方法在版本3中不可用,因此无法使用。
Excel::load($request->file('sampledata'), function ($reader) {
return response()->json($reader);
});
请分享您对如何从Excel中获取数组的想法。
答案 0 :(得分:2)
我和@narayan努力将所需的excel文件放入数组。现在,我可以使用以下代码正确获取数组
$rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata'));
在我的SalesOrderExport类中,我仅具有默认功能,这是抽象方法所必需的。
namespace App\Exports;
use App\SalesOrder;
use Maatwebsite\Excel\Concerns\FromCollection;
class SalesOrderExport implements FromCollection
{
public function collection()
{
return SalesOrder::all();
}
}
我的控制器代码
public function importTest(Request $request)
{
$rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata'));
return response()->json(["rows"=>$rows]);
}
以HTML
<input class="" type="file" name="sampledata" id="sampledata">
我已经通过
创建了此导出php artisan make:import SalesOrder
附加相关图片
答案 1 :(得分:1)
我添加它是希望有人可以为此获得其他类型的解决方案。
版本-"maatwebsite/excel": "^3.1"
在Controller
$data = Excel::toArray(new UsersImport(), $request->file);
在UsersImport
<?php
namespace App\Imports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class UsersImport implements ToCollection
{
public function collection(Collection $rows)
{
}
}
Json阵列结果
array:2 [▼
0 => array:2 [▼
0 => "+126785XXXXX"
1 => "Jhon"
]
1 => array:2 [▼
0 => "+126784XXXXX"
1 => "Doe"
]
]
还有一个奖励 现在,假设您只需要电话号码,然后根据控制器中的号码创建一个自定义数组-
$data = Excel::toArray(new UsersImport(), $request->file);
$phoneNumbersData= [];
foreach ($data[0] as $key => $value) {
$phoneNumbersData[] = $value[0];
}
return $phoneNumbersData;
希望,这将对某人有所帮助。
答案 2 :(得分:1)
以下是一些基于使用常用文件输入元素导入 csv 文件的工作示例。就我而言,一旦上传,文件就可以通过请求对象作为“csv_file”访问。
public function importCSV(Request $request)
{
// Get the csv rows as an array
$theArray = Excel::toArray(new stdClass(), $request->file('csv_file'));
// Get the csv rows as a collection
$theCollection = Excel::toCollection(collect([]), $request->file('csv_file'));
//etc
}
答案 3 :(得分:0)
1)使用以下命令创建导入文件。
php artisan make:import TestImport
2)在TestImport内部进行如下更改:
namespace App\Imports;
use App\User;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class TestImport implements ToCollection
{
public function collection(Collection $rows)
{
return $rows;
}
}
3)在Controller中进行如下更改:
$rows = Excel::import(new TestImport, 'test.xlsx');
答案 4 :(得分:0)
这是我实现这一目标的方法:
在我的UsersImport类中: 命名空间App \ Imports;
use App\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;
class UsersImport implements ToModel
{
use Importable;
public function model(array $row)
{
return new User([
'id' => $row[0]
]);
}
}
在控制器中:
$imported_users = (new UsersImport)->toArray(request()->file('excel_file'))[0];
希望对您有帮助。
答案 5 :(得分:0)
我尝试过类似的方法,效果很好; 在您的导入文件中执行此操作
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
public function collection(Collection $row)
{
return $row;
}
然后在控制器中,这样做;
$row = Excel::toCollection(new CourseImport, request()->file('course'));
答案 6 :(得分:-1)
您应该尝试以下操作:
$data = Excel::load($request->file('sampledata'), function ($reader) use($table) {
$data = $reader->toArray();
//here data has all excel data in array.
});