PHPExcel:解析电子表格数据并存储到数据库

问题描述 投票:0回答:2

我有一本包含大量工作表的工作簿。我想迭代每个工作表并将行数据插入 MySQL 数据库。目前,我的脚本将 1000 个空行插入数据库。

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load("upload/".$workbook);

$cells = array();
$worksheetCount = $objPHPExcel->getSheetCount();
for($i=0; $i < $worksheetCount; $i++) {
    $objPHPExcel->setActiveSheetIndex($i);
    $objWorksheet = $objPHPExcel->getActiveSheet();

    $highestRow = $objWorksheet->getHighestRow(); // e.g. 10

    $highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F'

    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // e.g. 5

    for ($row = 1; $row <= $highestRow; ++$row) {

      for ($col = 0; $col <= $highestColumnIndex; ++$col) {
        $cells[] =  $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();           

      }

      $stmt = $mysqli->prepare('INSERT INTO players(player_name,Birthdate,Org,Level,Position,
                BT,Status,Service,League_Group_ID,Player_ID,Team_ID,NL_Position,
                NL_Slot,NL_SU_Order,AL_Position,AL_Slot,AL_SU_Order,SP_Order,RP_Order) 
            VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');

            $stmt->bind_param('sssssssssssssssssss',$cells[0],$cells[1],$cells[2],$cells[3],$cells[4],$cells[5],
                $cells[6],$cells[7],$cells[8],$cells[9],$cells[10],$cells[11],$cells[12],$cells[13],$cells[14],
                $cells[15],$cells[16],$cells[17],$cells[18]);

            $stmt->execute();
            $stmt->close();
            reset($cells);

    }
}    

?>

电子表格中的标题与数据库中的列相匹配。怎么了?

更新 - 刚刚意识到我不应该在列迭代中执行 SQL 插入,因此我更正了这一点,但它现在将标题行插入数据库 76 次。 (我的电子表格中有 76 行。)

更新2: - 我在那里有一个reset(),但不需要它。似乎是我所有问题的原因。看来现在可以工作了。

php phpexcel
2个回答
0
投票

您可以使用 simplexlsx.class.php 解析电子表格数据并将其存储在数据库中。这是一篇文章,展示了它是多么简单。 链接


0
投票

我想恢复此线程,因为上面建议的链接现在是死链接。我喜欢我们将答案保存在本地并进行堆叠。我现在正在尝试这样做,想知道是否有人有一些更新/现代的方法?

© www.soinside.com 2019 - 2024. All rights reserved.