根据工作表名称导入excel表格



我有一个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)的数据数组,所以您仍然需要添加一些东西来完成它。我让你做这部分

我知道你开始了,但我还是要说解决方案在我给你的链接😉

相关内容

  • 没有找到相关文章

最新更新