我有一个Excel文件,其中有几个工作表,每个工作表都有一个特定的名称,该名称在"name"产品表的列。我想使,当我导入Excel文件时,数据库中的表名也被导入。
我正在使用Laravel Excel和phoffice软件包。导入在laravel控制台命令中。
class ProductImport implements ToCollection, WithHeadingRow, WithProgressBar
{
use Importable;
public function collection(Collection $rows)
{
$reader = IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load(storage_path('app/fruit/listFruit.xlsx'));
$products = $spreadsheet->getSheetNames();
//name of sheets
//$products=['banana', 'strawberry'];
foreach ($rows as $row) {
foreach ($products as $product) {
ProductImport::updateOrCreate(
[
'price' => $row['price'],
'size' => $row['size'],
'product' => $product,//nameSheet
],
);
}
}
}
}
<?php
namespace AppConsoleCommands;
use AppImportsProductImport;
use PhpOffice;
use IlluminateConsoleCommand;
class UploadProduct extends Command
{
protected $signature = 'fruit:productList';
protected $description = 'Command to inject fruit data';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$this->output->title('Starting import');
(new ProductImport)->withOutput($this->output)->import(storage_path('app/fruit/listFruit.xlsx'));
$this->output->success('Import successful');
}
}
结果是什么
结果
如果我将foreach
反转Excel
我希望变量$product每次我遍历一个工作表时,工作表的名称都被导入到数据库中,并且我不只是得到第一个工作表的名称。
我觉得这样更能说明问题
就像我说的,你只需要切换你的foreach循环:首先是产品,然后是行(这些是你的变量名称,也许这是你没有理解我的解释)
你有什么
foreach ($rows as $row) {
foreach ($products as $product)
.....
}
}
应该是什么
foreach ($products as $product) {
foreach ($rows as $row) {
....
}
}
编辑:
这里是您需要的代码的开头(我已经创建了与您拥有相同数据的XLS文件)
$reader = IOFactory::createReader($inputFileType);
$spreadsheet = $reader->load($inputFileName);
$loadedSheetNames = $spreadsheet->getSheetNames();
print '<pre>';
foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
$sheet = $spreadsheet->getSheet($sheetIndex);
$sheetData = $sheet->toArray(null, true, true, true);
var_dump($loadedSheetName, $sheetData);
}
die;
现在,我们遍历每个表单并获取它的内容
$sheetData是一个按表(product)的数据数组,所以您仍然需要添加一些东西来完成它。我让你做这部分
我知道你开始了,但我还是要说解决方案在我给你的链接😉