使用PhpSpreadsheet将Excel导入到MySQL数据库

本文以导入学生成绩表为例,给大家讲解使用PhpSpreadsheet将Excel导入的MySQL数据库。

准备

首先我们需要准备一张MySQL表,表名t_student,表结构如下:

CREATE TABLE `t_student` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL COMMENT '姓名', `chinese` int(6) NOT NULL DEFAULT '0' COMMENT '语文', `maths` int(6) NOT NULL DEFAULT '0' COMMENT '数学', `english` int(6) NOT NULL DEFAULT '0' COMMENT '外语', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

这是一张学生成绩表,用来存储学生的姓名和语数外三门课程的成绩。

接着,我们准备excel表格文件,我特意制作了一个Excel文件students.xlsx:

然后将Excel文件放置程序应用目录下。当然,实际应用中,我们一般通过web上传到服务器指定目录下,然后再进行导入数据库操作。本文web上传这块就不涉及了,感兴趣的同学可以参考本站文章:Dropzone.js实现文件拖拽上传功能强大的文件上传组件-WebUploader

最后,你还需要安装好PhpSpreadsheet,在前一节文章中有介绍,非常简单:使用PhpSpreadsheet读取和写入Excel

导入Excel

准备工作做好后,我们来开始导入。

思路很简单:使用PhpSpreadsheet读取Excel表格中的有用信息,然后组装成sql语句,最后批量插入到MySQL表中。我把代码贴出来。

require 'vendor/autoload.php';

include('conn.php'); //连接数据库

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load('students.xlsx'); //载入excel表格

$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow(); // 总行数
$highestColumn = $worksheet->getHighestColumn(); // 总列数
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5

$lines = $highestRow - 2; 
if ($lines <= 0) {
    exit('Excel表格中没有数据');
}

$sql = "INSERT INTO `t_student` (`name`, `chinese`, `maths`, `english`) VALUES ";

for ($row = 3; $row <= $highestRow; ++$row) {
    $name = $worksheet->getCellByColumnAndRow(1, $row)->getValue(); //姓名
    $chinese = $worksheet->getCellByColumnAndRow(2, $row)->getValue(); //语文
    $maths = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); //数学
    $english = $worksheet->getCellByColumnAndRow(4, $row)->getValue(); //外语

    $sql .= "('$name','$chinese','$maths','$english'),";
}
$sql = rtrim($sql, ","); //去掉最后一个,号
try {
    $db->query($sql);
    echo 'OK';
} catch (Exception $e) {
    echo $e->getMessage();
}

$worksheet->getCellByColumnAndRow($col, $row)->getValue()可以获取表格中任意单元格数据内容,$col表示单元格所在的列,以数字表示,A列表示第一列,$row表示所在的行。

我们只需要第三行以后的数据,因此直接从第三行开始循环遍历,获取成绩,组装成SQL语句。

我们使用批量插入MySQL语句,当然你也可以逐条插入,但是效率没有批量插入高。

最后执行导入代码,你会发现数据表里有数据了:

MariaDB [demo]> select * from t_student;
+----+-----------+---------+-------+---------+
| id | name      | chinese | maths | english |
+----+-----------+---------+-------+---------+
| 13 | 王二小    | 82 | 78 | 65 | | 14 | 李万豪 | 68 | 87 | 79 | | 15 | 张三丰 | 89 | 90 | 98 | | 16 | 王老五 | 68 | 81 | 72 | +----+-----------+---------+-------+---------+ 4 rows in set (0.00 sec) 

数据库连接文件已打包在源代码中,欢迎下载。

 

转载地址 https://www.helloweba.net/php/562.html

转载于:https://www.cnblogs.com/yehuisir/p/10517964.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用WinForm技术将Excel导入MySQL数据库的步骤: 1. 创建WinForm应用程序,并添加必要的组件和引用。 2. 创建一个按钮控件,用于触发导入操作。 3. 在按钮的Click事件中编写代码,实现将Excel表读取为数据表,然后将数据表中的数据插入到MySQL数据库中。 4. 使用Microsoft.Office.Interop.Excel库读取Excel表。首先需要在项目中添加对该库的引用。然后在Click事件中使用以下代码读取Excel表: ``` using Excel = Microsoft.Office.Interop.Excel; Excel.Application excelApp = new Excel.Application(); Excel.Workbook workbook = excelApp.Workbooks.Open(filePath); Excel._Worksheet worksheet = workbook.Sheets[1]; Excel.Range range = worksheet.UsedRange; ``` 其中,`filePath`是Excel表的文件路径。 5. 将读取到的数据转换为数据表,可以使用以下代码: ``` DataTable dt = new DataTable(); for (int i = 1; i <= range.Columns.Count; i++) { dt.Columns.Add(range.Cells[1, i].Value2.ToString()); } for (int i = 2; i <= range.Rows.Count; i++) { DataRow dr = dt.NewRow(); for (int j = 1; j <= range.Columns.Count; j++) { dr[j - 1] = range.Cells[i, j].Value2; } dt.Rows.Add(dr); } ``` 6. 使用MySql.Data.MySqlClient库连接到MySQL数据库,并将数据表中的数据插入到MySQL数据库中。首先需要在项目中添加对该库的引用。然后在Click事件中使用以下代码连接到MySQL数据库: ``` string connectionString = "server=localhost;port=3306;database=mydatabase;user=root;password=mypassword"; MySqlConnection connection = new MySqlConnection(connectionString); connection.Open(); ``` 其中,`mydatabase`是MySQL数据库的名称,`root`和`mypassword`是数据库的用户名和密码。 7. 将数据表中的数据插入到MySQL数据库中,可以使用以下代码: ``` foreach (DataRow row in dt.Rows) { MySqlCommand command = new MySqlCommand("INSERT INTO mytable (column1, column2, column3) VALUES (?value1, ?value2, ?value3)", connection); command.Parameters.AddWithValue("?value1", row["column1"]); command.Parameters.AddWithValue("?value2", row["column2"]); command.Parameters.AddWithValue("?value3", row["column3"]); command.ExecuteNonQuery(); } ``` 其中,`mytable`是MySQL数据库中的表名,`column1`、`column2`和`column3`是表中的列名,需要根据实际情况进行修改。 8. 最后,在Click事件中关闭连接并释放资源: ``` connection.Close(); excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); ``` 以上是使用WinForm技术将Excel导入MySQL数据库的步骤。需要注意的是,在读取Excel表时,Excel表的格式必须与代码中的格式一致,否则可能会导致数据读取错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值