如何让 excel 在自定义网站中排列
How to get excel to array in maatwebsite
我正在尝试使用最新版本的 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 获取数组的想法。
使用以下命令创建导入文件。
php artisan make:import 测试导入
在 TestImport 中进行如下更改:
命名空间App\Imports;
使用App\User;
使用 Illuminate\Support\Collection;
使用 Maatwebsite\Excel\Concerns\ToCollection;
class TestImport 实现 ToCollection
{
public 函数 collection(Collection $行)
{
return $行;
}
}
在 Controller 中进行如下更改:
// 原代码:$rows = Excel::import(new TestImport, 'test.xlsx');
$rows = Excel::toCollection(new TestImport, 'test.xlsx');
你应该试试这个:
$data = Excel::load($request->file('sampledata'), function ($reader) use($table) {
$data = $reader->toArray();
//here data has all excel data in array.
});
我和@narayan 努力将请求的 excel 文件放入数组。现在我可以使用下面的代码
正确获取数组
$rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata'));
在我的 SalesOrderExport class 我只有默认函数,这是抽象方法所必需的。
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
附加相关图片
我是这样实现的:
在我的 UsersImport class 中:
命名空间 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];
希望对你有所帮助
我添加它是希望有人可以为此获得其他类型的解决方案。
版本 - "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"
]
]
还有一个奖金,
现在假设您只需要 phone 数字,然后在 controller-
中从中创建一个自定义数组
$data = Excel::toArray(new UsersImport(), $request->file);
$phoneNumbersData= [];
foreach ($data[0] as $key => $value) {
$phoneNumbersData[] = $value[0];
}
return $phoneNumbersData;
希望,这会对某人有所帮助。
以下是一些基于使用常用文件输入元素导入 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
}
我试过这样的东西,效果很好;
在您的导入文件中执行此操作
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
public function collection(Collection $row)
{
return $row;
}
然后在控制器中执行此操作;
$row = Excel::toCollection(new CourseImport, request()->file('course'));
我正在尝试使用最新版本的 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 获取数组的想法。
使用以下命令创建导入文件。
php artisan make:import 测试导入
在 TestImport 中进行如下更改:
命名空间App\Imports;
使用App\User; 使用 Illuminate\Support\Collection; 使用 Maatwebsite\Excel\Concerns\ToCollection;
class TestImport 实现 ToCollection { public 函数 collection(Collection $行) { return $行; } }
在 Controller 中进行如下更改:
// 原代码:$rows = Excel::import(new TestImport, 'test.xlsx');
$rows = Excel::toCollection(new TestImport, 'test.xlsx');
你应该试试这个:
$data = Excel::load($request->file('sampledata'), function ($reader) use($table) {
$data = $reader->toArray();
//here data has all excel data in array.
});
我和@narayan 努力将请求的 excel 文件放入数组。现在我可以使用下面的代码
正确获取数组$rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata'));
在我的 SalesOrderExport class 我只有默认函数,这是抽象方法所必需的。
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
附加相关图片
我是这样实现的:
在我的 UsersImport class 中: 命名空间 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];
希望对你有所帮助
我添加它是希望有人可以为此获得其他类型的解决方案。
版本 - "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"
]
]
还有一个奖金, 现在假设您只需要 phone 数字,然后在 controller-
中从中创建一个自定义数组$data = Excel::toArray(new UsersImport(), $request->file);
$phoneNumbersData= [];
foreach ($data[0] as $key => $value) {
$phoneNumbersData[] = $value[0];
}
return $phoneNumbersData;
希望,这会对某人有所帮助。
以下是一些基于使用常用文件输入元素导入 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
}
我试过这样的东西,效果很好; 在您的导入文件中执行此操作
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
public function collection(Collection $row)
{
return $row;
}
然后在控制器中执行此操作;
$row = Excel::toCollection(new CourseImport, request()->file('course'));