使用 phpspreadsheet 使用 excel 文件填充 mysql 数据库
Posted
技术标签:
【中文标题】使用 phpspreadsheet 使用 excel 文件填充 mysql 数据库【英文标题】:Populating a mysql database with an excel file using phpspreadsheet 【发布时间】:2018-12-03 08:27:18 【问题描述】:我正在尝试使用 phpspreadsheet 库使用 excel 文件填充 mysql 数据库。我正在按照以下方式进行操作,但我只得到第一行。我怎样才能为所有行做到这一点
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($target_file);
$worksheet = $spreadsheet->getActiveSheet();
$rows = [];
$outer = 1;
foreach ($worksheet->getRowIterator() AS $row)
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(FALSE); // This loops through all cells,
$cells = [];
foreach ($cellIterator as $cell)
$cells[] = $cell->getValue();
$rows[] = $cells;
while($outer > 1)
$data = [
'testTaker' => $cells[1],
'correctAnswers' => $cells[2],
'incorrectAnswers' => $cells[3],
];
if($this->testModel->addTest($data))
die('it worked');
else
die('Something went wrong');
$outer++;
【问题讨论】:
die()
在循环内?
请问是这个问题吗?我只是用它来测试
当我删除 die() 时,程序继续用第一行填充数据库并崩溃
嗯,这可能是因为while ($outer > 1)
永远不会结束。您必须在循环内更改 $outer
。
【参考方案1】:
这就是我使用 PDO 将带有 phpSpreadSheet 的 XLSX 电子表格导入 MySQL 数据库的方式(已修改以符合您的标准)。
// read excel spreadsheet
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
if($reader)
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($target_file);
$sheetData = $spreadsheet->getActiveSheet()->toArray();
foreach($sheetData as $row)
// get columns
$testTaker = isset($row[0]) ? $row[0] : "";
$correctAnswers = isset($row[1]) ? $row[1] : "";
$incorrectAnswers = isset($row[2]) ? $row[2] : "";
// insert item
$query = "INSERT INTO item(testTaker, correctAnswers, incorrectAnswers) ";
$query .= "values(?, ?, ?)";
$prep = $dbh->prepare($query);
$prep->execute(array($testTaker, $correctAnswers, $incorrectAnswers));
【讨论】:
以上是关于使用 phpspreadsheet 使用 excel 文件填充 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章
使用 PhpSpreadsheet 在 PHP 中读取 XLS