Заполнение базы данных mysql файлом excel с использованием phpspreadsheet - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь заполнить базу данных mysql файлом excel, используя библиотеку phpspreadsheet. Я делаю это следующим образом, но я получаю только первый ряд. Как я могу сделать это для всех строк

  $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++;
  }

1 Ответ

0 голосов
/ 07 сентября 2018

Вот так я импортирую электронную таблицу XLSX с phpSpreadSheet в базу данных MySQL, используя PDO (измененный в соответствии с вашими критериями).

// 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));
  }
}
...