Невозможно загрузить данные из Excel в MySQL с помощью переполнения стека

Я новичок в PHP и пытаюсь загрузить данные из Excel в базу данных с помощью PHP. У меня есть следующий код для загрузки данных из файла .xls в базу данных mysql с помощью php. Код работает нормально, за исключением того, что он не присваивает массиву первую колонку первой строки, хотя код может получить к нему доступ и распечатать его в виде таблицы. Нужна помощь, чтобы прочитать первый элемент тоже.
Ниже приведен код, предполагающий, что у нас есть файл 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());

?>

2

Решение

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

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());
}
1

Другие решения

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

Например, если ваш Excel выглядит ниже

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

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

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

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

0

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

-1
По вопросам рекламы [email protected]