Невозможно загрузить данные из excel в mysql с помощью PHP


Я новичок в PHP и пытаюсь загрузить данные из excel в базу данных с помощью PHP .У меня есть следующий код для загрузки данных из a .xls файл в базу данных mysql с использованием php. Код работает нормально, за исключением того, что он не присваивает первый coloun первой строки массиву, хотя код может получить доступ и распечатать его в таблице. Нужна помощь, чтобы прочитать первый элемент тоже. Ниже приведен код, предполагающий, что у нас есть файл excel с именем example.xls.

   <?php
    require 'Classes/PHPExcel.php';
    require_once 'Classes/PHPExcel/IOFactory.php';
    //  $host = 'localhost';
    //  $username = 'root';
    //  $password = 'root';
    //  $dbname = 'dumy';
    //  $conn=mysql_connect($host,$username,$password) or die("Could not connect");
    //  mysql_select_db($dbname,$conn) or die("could not connect database");
    $path = "example.xls";
    $queryArray = array();
    $objPHPExcel = PHPExcel_IOFactory::load($path);
    $flag=true;
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
        $worksheetTitle     = $worksheet->getTitle();
        if($flag)
        {
            $highestRow         = 0;
            $highestColumn      = 'A';
            $flag= false;
        }
        $curRow         = $worksheet->getHighestRow(); 
        $curColumn      = $worksheet->getHighestColumn(''); 
        $curColumnIndex = PHPExcel_Cell::columnIndexFromString($curColumn);
        $highestRow = ($highestRow<$curRow)?$curRow:$highestRow;
        $highestColumn = ($highestColumn<=$curColumn)?$curColumn:$highestColumn;
        $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
        $nrColumns = ord($highestColumn) - 64;
        echo "<br>The worksheet ".$worksheetTitle." has ";
        echo $nrColumns . ' columns (A-' . $highestColumn . ') ';
        echo ' and ' . $curRow . ' row.';
        echo '<br>Data: <table border="1"><tr>';
        for ($row = 1; $row <= $curRow;$row++) {
            echo '<tr>';
            for ($col = 0; $col < $curColumnIndex; $col++) {
                $cell = $worksheet->getCellByColumnAndRow($col, $row);
                $val = $cell->getCalculatedValue();
                $queryArray[$row][$col] = (string)$val;
                echo '<td>'.$val.'<br></td>';
            }
            echo '</tr>';
        }
        echo '</table>';
    }   
        $sql = 'INSERT INTO Dummy VALUES';
        $value = NULL;
        foreach($queryArray as $v)
        {   
            $value .=  '(';
            foreach ($v as $check)  
                $value .= '''.$check.'',';
            $value = substr($value,0,-1);
            $value .= '),';
        }
        $sql.=substr($value,0,-1).';';
        echo $sql;
        //mysql_query($sql) or die('Invalid query: ' . mysql_error());

    ?>
3 2

3 ответа:

На самом деле у вас есть несколько итераций, которые приводят к нескольким листам в одном массиве.

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { }.

Итак, если ваш excel содержит более одного листа, а на следующем листе нет данных, значит, пусто, то он посчитает его первым и вставит вам первое значение массива. Если вы используете этот массив вне цикла, то он покажет вам нулевое значение в первом столбце. Используйте этот SQL внутри цикла foreach, и чтобы предотвратить использование избыточной памяти, вы можете выбрать повторное объявление массива в каждая итерация цикла. Это будет прекрасно работать для вас.

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
  $queryArray = array();
  // your code as it was
  $sql = 'INSERT INTO Dummy VALUES';
  $value = NULL;
  foreach($queryArray as $v)
  {
      $value .=  '(';
      foreach ($v as $check)
          $value .= '\''.$check.'\',';
      $value = substr($value,0,-1);
      $value .= '),';
  }
  $sql.=substr($value,0,-1).';';
  //mysql_query($sql) or die('Invalid query: ' . mysql_error());
}

Это проблема как PHP, так и excel. Что он не выбирает значение 1 столбца и 1 строки, Что означает первое значение листа excel.

Например, если ваш excel выглядит следующим образом

___________________
|  10|  test|  205|
|  11|  test|  206|
|  12|  test|  207|
|  13|  test|  208|

Тогда он не будет выбирать "10", иначе будут выбраны все значения.

Ничего не могу поделать, но вот как это работает.

Пожалуйста, дайте мне знать, если у кого-то есть решение.

Вы начинаете с $row=1, это может быть все.