我正在try 导入一个包含150多张工作表的EXCEL文件,然后通过判断EXCEL表名,我想要替换其中的数据或添加新行.
最初,我想使用视图来手动制作所有的设计,只是导出它们,但这将是耗时的.
这就是我目前所拥有的.
<?php
namespace App\Http\Controllers;
use App\Imports\FirstSheetImport;
use App\Imports\WorkingPaperImport;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class WorkingPaperExportController extends Controller
{
public function getExcelAndRewrite(Request $request)
{
$import = new FirstSheetImport('EA1');
$modifiedData = $import->getModifiedData();
return $modifiedData;
}
}
<?php
namespace App\Imports;
use App\Exports\TestExportEA1;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithStartRow;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Events\AfterImport;
use PhpOffice\PhpSpreadsheet\IOFactory;
class FirstSheetImport implements ToCollection, WithHeadingRow
{
protected $sheetName;
protected $sheetIndex;
protected $modifiedData = [];
public function __construct($sheetName)
{
$this->sheetName = $sheetName;
}
public function collection(Collection $collection)
{
//
}
protected function getFilePath()
{
// Provide the path to your Excel file
return storage_path('/import/uptodateworkingpaper.xlsx');
}
protected function hasHeadingRow()
{
// Return true or false based on your needs
return true;
}
public function getModifiedData()
{
$spreadsheet = IOFactory::load($this->getFilePath());
$sheetNames = $spreadsheet->getSheetNames();
$sheetIndex = array_search($this->sheetName, $sheetNames);
$this->sheetIndex = $sheetIndex;
if ($sheetIndex !== false) {
$worksheet = $spreadsheet->getSheet($sheetIndex);
$rows = $worksheet->toArray();
return $rows;
}
// return $this->sheetIndex;
}
}
使用我现在拥有的功能,我能够获得正确的工作表数据,但我不确定从那里到哪里go .甚至不确定这是不是一个好办法.
如有任何帮助或建议,我们不胜感激.
PHP 7.3.33 Laravel框架8.75.0