【问题标题】:Unable to upload data from excel to mysql using PHP无法使用PHP将数据从excel上传到mysql
【发布时间】:2014-12-09 09:25:22
【问题描述】:

我是 PHP 新手,正在尝试使用 PHP 将数据从 excel 上传到数据库。我有以下代码可以使用 php 将数据从 .xls 文件上传到 mysql 数据库。代码工作正常,只是它没有将第一行的第一个 coloun 分配给数组,尽管代码能够访问并在表中打印它。也需要帮助阅读第一个元素。 下面是假设我们有一个名为 example.xls 的 excel 文件的代码。

   <?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());

    ?>

【问题讨论】:

  • 我认为您应该将 xls 格式转换为 csv。试试看……

标签: php mysql database file-handling


【解决方案1】:

实际上,您有不止一次迭代会导致同一数组中的多个工作表。

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

因此,如果您的 excel 包含多个工作表并且下一个工作表没有数据意味着空白,那么它会将其计为第一个并将其插入到数组的第一个值中。 如果您在循环之外使用此数组,那么它将在第一列中显示空值。 在 foreach 循环中使用此 SQL 并防止使用过多的内存,您可以选择在每次循环迭代时重新声明数组。它会为你工作的。

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

【讨论】:

  • 谢谢...成功了!!
【解决方案2】:

这是PHP和excel的问题。它没有选择 1 列和 1 行的值,这意味着 excel 表的第一个值。

如果你的 excel 如下所示

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

那么它不会选择“10”,否则将选择所有值。

不能不说,这就是它的工作原理。

如果有人有解决方案,请告诉我。

【讨论】:

    【解决方案3】:

    你从 $row=1 开始,可能就是这样。

    【讨论】:

    • 这里我们使用一个,因为行在 excel 中从 1 开始编号,而不是 0。
    • 你可以试试print_r($queryArray)看看它是否构造正确?
    • 我试过这个,因此观察到代码无法存储数组中第一个元素的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多