使用PHP在XLS中编辑数据,然后导入到mySQL中

时间:2012-01-31 21:44:02

标签: php mysql excel import xls

我正在尝试将XLS文件导入PHP,然后我可以在其中编辑信息并将其导入mySQL。我从未做过与此相关的任何事情,所以我很难掌握如何处理它。

我查看了一些开源项目:

  • PHP Excel Reader
  • ExcelRead
  • PHPExcel

这些选项都不能完全符合我的要求,或者我可能还没有深入到文档中。

有些事情需要加以考虑。 XLS文件无法转换为任何其他文件格式。这是为了便于非技术用户访问。 XLS文件是在另一个网站上生成的报告,每次都具有相同的格式(列)。 例如,每个XLS文件具有相同的列数(这将是A1):

*ID   |Email   |First Name  |Last Name  |Paid    |Active   |State  |Country|*

但是,XLS文件中的列数多于要导入数据库的列数。 例如,正在导入的行(这将是A1):

*ID   |Email  |First Name  |Last Name  |Country*

我知道编辑数据的两种方法之一是A.使用PHPExcel之类的东西读入数据,编辑它,然后将其发送到数据库或B.使用PHPExcel之类的东西将XLS转换为CSV ,对temp表进行原始导入,编辑数据,然后将其插入旧表中。

我已经阅读了很多PHPExcel文档,但它没有任何关于导入数据库的内容,我甚至不知道在导入之前或之后从哪里开始编辑XLS。

我搜索了很多关键字,并且大多数都找到了如何读取/写入/预览XLS的结果。我正在寻找关于以最简单的步骤完成所有这些事情的最佳方式的建议。

1 个答案:

答案 0 :(得分:2)

请参阅this article on using PHP-ExcelReader,特别是标题为“转动表格”的简短部分。

您拥有的任何解决方案最终都会如下所示:

  1. 从XLS(需要XLS阅读器)中读取一行
  2. 根据您的数据库需要修改行中的数据。
  3. 将修改后的数据插入数据库。
  4. 您似乎对“编辑数据”有这种看法。这只是PHP - 您从XLS阅读器获取值,使用PHP代码修改它,然后插入数据库。没有中间文件,你不修改XLS - 它只是PHP。

    这是您需要编写的程序内循环的一个超级简单,未经测试的示例。这只是为了说明一般模式。

    $colsYouWant = array(1,2,3,4,8);
    $sql = 'INSERT INTO data (id, email, fname, lname, country) VALUES (?,?,?,?,?)';
    $stmt = $pdo->prepare($sql);
    
    $sheet = $excel->sheets[0];
    // the excel reader seems to index by 1 instead of 0: be careful!
    for ($rowindex=2; $rowindex <= $sheet['numRows']; $rowindex++) {
        $xlsRow = $sheet['cells'][$rowindex];
        $row = array();
        foreach ($colsYouWant as $colindex) {
            $row[] = $xlsRow[$colindex];
        }
        // now let's "edit the row"
        // trim all strings
        $row = array_map('trim', $row);
        // convert id to an integer
        $row[0] = (int) $row[0];
        // capitalize first and last name
        // (use mb_* functions if non-ascii--I don't know spreadsheet's charset)
        $row[2] = ucfirst(strtolower($row[2]));
        $row[3] = ucfirst(strtolower($row[3]));
    
        // do whatever other normalization you want to $row
    
        // Insert into db:
        $stmt->execute($row);
    }