【发布时间】:2020-12-30 01:17:34
【问题描述】:
我会通过phpspreadsheet从Excel文件中导入数据,逐行读取并测试该记录是否存在于数据库中,如下所示
$reader = new XlsxReader();
$spreadsheet = $reader->load($tmp_name);
$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn();
fwrite($fp, "File: " . $_FILES['catalogue']['name'] . "\n");
fwrite($fp, "Number of Row : " . $highestRow . "\n");
fwrite($fp, "Highest Column : " . $highestColumn . "\n");
$em = $this->getDoctrine()->getManager()->getRepository(Catalogue::class);
$list = [];
$it = $worksheet->getRowIterator(1);
foreach ($it as $row) {
$cellIt = $row->getCellIterator();
$r = [];
foreach ($cellIt as $cell) {
$r[] = $cell->getFormattedValue();
}
$list[] = $r;
}
foreach ($list as $x) {
$v = $x[0];
fwrite($fp, $v . "\n");
$s = $em->findOneBy(['Species' => $x[0]]);
if ($s) {
if ($s->getSpecies() ==$x[0]){
$request->getSession()->getFlashBag()->add('error', $v . 'Already Existing' . '<br>');
fwrite($fp, $x[0].'Already Exist in the catalogue'. "\n");
}
if ($s->getSpecies() !=$x[0]) {
$request->getSession()->getFlashBag()->add('sucess', $x[0] . 'To be added' . '<br>');
fwrite($fp, $x[0]. 'to be added to the catalogue'. "\n");
}
}
//
}
fclose($fp);
$request->getSession()->getFlashBag()->add('success', 'File is valid, and was successfully processed.!' . '<br>' . "<a href=" . $url . ">Log Link</a>");
return $this->redirect($this->generateUrl('Catalogue_list'));
检查该记录是否存在于数据库中只对一半的记录起作用,如下所示:
- Asparagopsis armata
- Abudefduf sexfasciatus
- Abudefduf sexfasciatus Already Exist in the catalogue
- Abudefduf vaigiensis
- Abudefduf vaigiensis Already Exist in the catalogue
- Caretta caretta
- Chelonya mydas
只有前三个记录在数据库中。我做错了什么?
【问题讨论】:
标签: symfony import doctrine sonata phpspreadsheet