【问题标题】:Reading a XLSX sheet to feed a MySQL table using PHPExcel使用 PHPExcel 读取 XLSX 表以提供 MySQL 表
【发布时间】:2011-11-01 15:26:11
【问题描述】:

我发现 PHPExcel 库非常适合使用 PHP 操作 Excel 文件(读取、写入等)。

但文档中没有说明如何读取 XLSX 工作表以提供 MySQL 表...

抱歉这个愚蠢的问题,但我的工作需要它,但在网上找不到答案。

一个小例子可能会很有帮助。

非常感谢。

更新:

我的问题是准确的:

我在文档中找到的唯一可以帮助我的代码部分是读取 Excel 文件并将其显示在 HTML 表格中:

`require_once 'phpexcel/Classes/PHPExcel.php';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load("edf/equipement.xlsx");
$objWorksheet = $objPHPExcel->getActiveSheet();

$highestRow = $objWorksheet->getHighestRow(); 
$highestColumn = $objWorksheet->getHighestColumn(); 

$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 

echo '<table border="1">' . "\n";
for ($row = 1; $row <= $highestRow; ++$row) {
  echo '<tr>' . "\n";

  for ($col = 0; $col <= $highestColumnIndex; ++$col) {
    echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>' . "\n";
  }

  echo '</tr>' . "\n";
}
echo '</table>' . "\n";`

我知道我可以使用循环来提供我的 MySQL 表,但我不知道如何...我不知道 OOP...

有人可以帮帮我吗?

【问题讨论】:

  • 你的问题太宽泛了。为什么 PHPExcel 文档应该包含一些关于 MySQL 的内容?

标签: mysql phpexcel


【解决方案1】:

第一个for 循环遍历行,第二个循环遍历列。 因此,您的“问题”有很多解决方案。

例如,您可以填充一个数组并为每一行创建一个插入语句。 如下:

$rows = array();
for ($row = 1; $row <= $highestRow; ++$row) {
  for ($col = 0; $col <= $highestColumnIndex; ++$col) {
    $rows[$col] = mysql_real_espace_string($objWorksheet->getCellByColumnAndRow($col, $row)->getValue());
  }

  mysql_query("INSERT INTO your_table (col1,col2) VALUES ($rows[1],$rows[2])");
}

显然,这段代码可以改进。

【讨论】:

  • @mlh 你能发布你的解决方案吗?我也遇到了同样的问题,一直没能解决
  • 这段代码给你错误“标量值...”?编辑:我刚刚发现了错误。代码已更正。
  • 好的,所以错误消失了——但是没有任何东西被插入到数据库中?很奇怪,我会将我的整个代码作为答案发布在下面
【解决方案2】:

这里是代码

$inputFileName = $upload_path . $filename;
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
$objWorksheet = $objPHPExcel->getActiveSheet();

$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$rows = array();
for ($row = 1; $row <= $highestRow; ++$row) {
  for ($col = 0; $col <= $highestColumnIndex; ++$col) {
    $rows[$col] = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
  }
  mysql_query("INSERT INTO upload (`item_number`,`qty_sold`,`cost_home`) VALUES ($rows[1],$rows[2],$rows[3])");
}

?>

我试过 mysql_query("INSERT INTO upload (col1,col2) VALUES ($rows[1],$rows[2])");也一样,但没有用。该表保持为空

【讨论】:

  • 我可以将 mysql_query 替换为 echo implode(' ', $rows);,它会返回电子表格中的值。
  • 试试这个mysql_query("INSERT INTO your_table VALUES ('".$rows[1]."','".$rows[2]."')");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2011-05-09
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多