将Excel文件(xls和xlsx)导入数据库的PHP方法

25

我尝试搜索一些插件,用于将Excel文件导入到MySQL数据库,其中之一是http://code.google.com/p/php-excel-reader/

这个工具非常强大,它可以将整个Excel内容显示为HTML。

然而,我认为我只需要读取Excel文件并提取其内容,例如放入一个数组中,然后编写SQL语句将其输入到数据库中。

是否有好的代码和软件包可用? 谢谢!


谷歌是你的朋友:http://de77.com/php/import-excel-xls-document-into-mysql-database - Doa
1
php-excel-reader不足以满足您的需求吗? - Lion
@Lion - 标题提到了xls和xlsx,因此php-excel-reader可能不够充分(除非它自从我上次查看以来已经更新),因为它只处理xlsx。 - Mark Baker
6个回答

41

这是一款带有适当文档和示例的最佳插件。

https://github.com/PHPOffice/PHPExcel

优点: 你可以在它的 讨论区 寻求帮助,并且你会在一天之内得到作者本人的回复,非常令人印象深刻。


13
谢谢... 我会尽力满足您的要求,但无法保证在一天内回复。 - Mark Baker
2
@MarkBaker,但是你的讨论论坛大部分问题已经被解决了 :) - xkeshav
4
PHPExcel最后版本为1.8.1,发布于2015年。该项目已不再得到维护,不应再使用。所有用户应迁移到其直接继承者PhpSpreadsheet或其他替代方案。在几个月后,GitHub项目将被标记为存档,因此所有内容都将只读。 - saleem ahmed
3
PHPOffice/PHPExcel现已被弃用。其继任者PHPOffice/PhpSpreadsheet的直接链接为:https://github.com/PHPOffice/PhpSpreadsheet - filipecsweb

19

有时候我需要将大型 xlsx 文件导入数据库,所以我使用 spreadsheet-reader 作为工具,它可以逐行读取文件。这是非常节省内存的导入方式。

<?php
    // If you need to parse XLS files, include php-excel-reader
    require('php-excel-reader/excel_reader2.php');

    require('SpreadsheetReader.php');

    $Reader = new SpreadsheetReader('example.xlsx');
    // insert every row just after reading it
    foreach ($Reader as $row)
    {
        $db->insert($row);
    }
?>

https://github.com/nuovo/spreadsheet-reader


7
如果您可以在处理之前将 .xls 转换为 .csv,则可以使用以下查询将 csv 导入数据库:
load data local infile 'FILE.CSV' into table TABLENAME fields terminated by ',' enclosed by '"' lines terminated by '\n' (FIELD1,FIELD2,FIELD3)

到目前为止,这是我尝试过的处理大文件最好、最快的方法。问题在于我收到的 xls 文件有多个工作表(相同格式),每个工作表都有数千条记录,所以我仍然无法解决如何将它们合并成一个 csv 工作表的问题。 - Raja Khoury

4
如果您将Excel文件另存为CSV文件,则可以使用诸如PHPMyAdmin之类的工具将其导入到MySQL数据库中。我不确定这是否有助于您的情况,但手动或程序化生成的csv文件比Excel文件更容易解析到数据库中。编辑:然而,我建议查看其他答案,因为@diEcho的答案似乎更合适。

2

我编写了一个继承类:

<?php
class ExcelReader extends Spreadsheet_Excel_Reader { 
 
 function GetInArray($sheet=0) {

  $result = array();

   for($row=1; $row<=$this->rowcount($sheet); $row++) {
    for($col=1;$col<=$this->colcount($sheet);$col++) {
     if(!$this->sheets[$sheet]['cellsInfo'][$row][$col]['dontprint']) {
      $val = $this->val($row,$col,$sheet);
      $result[$row][$col] = $val;
     }
    }
   }
  return $result;
 }

}
?>

所以我可以这样做:

<?php

 $data = new ExcelReader("any_excel_file.xls");
 print_r($data->GetInArray());

?>


0

你可以像 "diEcho" 所说的那样使用 PHPOFFICE。然后使用 bin2hex() 函数将数据插入到数据库(SQL SERVER 或 MySQL)作为 BLOB 数据类型。

bin2hex() 函数对我帮助很大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接