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

标签 php mysql excel import xls

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

我看过几个开源项目:

  • PHP Excel 阅读器
  • Excel阅读
  • 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 ,对临时表进行原始导入,编辑数据,然后将其插入旧表。

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

我用谷歌搜索了很多关键词,大部分找到的结果都是关于如何读/写/预览 XLS 的。我正在寻找有关以最少和最简单的步骤完成所有这些事情的最佳方法的建议。

最佳答案

参见 this article on using PHP-ExcelReader ,特别是标题为“扭转局面”的简短部分。

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

  1. 从 XLS 中读取一行(需要 XLS 阅读器)
  2. 根据数据库的需要修改行中的数据。
  3. 将修改后的数据插入数据库。

您似乎对“编辑数据”有这种兴趣。这只是 PHP——您从 XLS 读取器获取一个值,用 PHP 代码修改它,然后插入到数据库中。没有中间文件,您无需修改​​ XLS——它只是 PHP。

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

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

关于php - 使用 PHP 在 XLS 中编辑数据然后导入到 mySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087388/

相关文章:

PHP - 接受多个支付网关

php - 将屏幕宽度存储在变量中以及如何在 html 和 css 中使用它

MySQL 获取最新的 X 行,同时按列排序?

android - 从 Android 内容提供商到我的远程服务器的数据同步

将项目添加到 With...End With 时出现 excel 错误 91

php - JSON 数组未设置

php - preg_replace 用于以冒号结尾的单词

mysql - Laravel 如何将多个复选框值保存到 SQL 数据库的不同行中?

java - 维护从 XML 到 Excel 文件的层次结构 - Java

VBA - 新工作表的超链接;命名问题