PHPExcel将.xlsx文件中的内容存储到MySQL数据库
一、PHPExcel下载
PHPExcel下载可以参照我之前发过的文章——Composer安装与PHPWord的下载与使用
- 查找版本命令
composer show --all phpoffice/phpexcel
- 下载命令
我选择的是1.8.2版本的,下载命令输入:
composer require phpoffice/phpexcel 1.8.2
后续的使用方法按照博客中说的做就可。
二、数据说明
- Excel文件
格式: .xls 或者 .xlsx
内容:
- 数据库中的数据表:
三、功能实现代码
require './vendor/autoload.php';//引用安装的PHPExcel等文件
$filename = "基础信息.xlsx"; //指定excel文件从上传中取出
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($filename, 'utf-8');
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
$conn = mysqli_connect('localhost', 'root', '', 'test'); //需要更改的账号密码与数据库
mysqli_query($conn, 'set names utf8'); //进行编码统一
$columnHead_Tea = '';
$column_Tea = '';
$head_letter = 'A';
for ($head = 1; $head <= 4; $head++) //获取第一行标题,并存储入数组中
{
$columnValue = $objPHPExcel->getActiveSheet()->getCell($head_letter . 1)->getValue();
if ($head == 4) {
$columnHead_Tea = $columnHead_Tea . $columnValue;
} else {
$columnHead_Tea = $columnHead_Tea . $columnValue . ',';
}
$head_letter++;
}
echo ($head++) . '<br/>';
echo $columnHead_Tea . '<br/>';
echo $highestRow . '<br/>';
$column_letter = 'A';
for ($i = 2; $i <= $highestRow; $i++) //i=2是因为第一行表为标题,从第二行开始取
{
for ($j = 1; $j <= 4; $j++) { //j为列,从第A列开始取值
$columnValue = $objPHPExcel->getActiveSheet()->getCell($column_letter . $i)->getValue(); //获取A列的值
if ($j == 4) {
$column_Tea = $column_Tea . '\'' . $columnValue . '\'';
} else {
$column_Tea = $column_Tea . '\'' . $columnValue . '\'' . ',';
}
$column_letter++;
}
$sql = "INSERT INTO teacher ($columnHead_Tea) VALUES ($column_Tea)";
$result = mysqli_query($conn, $sql);
echo $column_Tea . '<br/>';
$column_Tea = '';
$column_letter = 'A';
}
}
四、一些代码说明
- 关于 INSERT INTO VALUES
在菜鸟教程中,该命令的使用是这样的:
INSERT INTO table_name (column1,column2,column3,…) VALUES (value1,value2,value3,…);
在上面的代码中没有一一写出数据库中数据表的字段、以及所录入的内容,而是利用了for 循环语句,将 column1,column2,column3,… 写成了字符串**$columnHead_Tea**,该字符串是这样的:
姓名,账号,密码,学历,职称
而 value1,value2,value3,…也通过对Excel表格内容的读取记录成字符串**$column_Tea**,该字符串是这样的:
‘张三’,‘12345678’,‘0000’,‘硕士研究生’,‘讲师’
每个内容都需要用 英文单引号引用起来
- 关于对Excel多列的循环
Excel的列号用A、B、C…AA、AB、AD…等表示。
在PHP中允许用自增或自减符号对字母进行+1或-1操作。即:
$head_letter = 'A';
++$head_letter;//输出结果为B
且可以判断大小,即 可判断出 A 小于B、A 小于C、A 小于AA…
- 关于字母的for循环输出
在 for循环中,由命令:
for ($L = 'A'; $L < 'AA'; ++$L) {
echo $L.'<br/>'; //输出结果:A
}
其只能输出第一个L值,即A。
而对于:
for ($L = 'A'; $L < 'Z'; ++$L) {
echo $L; //输出结果:ABCDEFGHIJKLMNOPQRSTUVWXY
}
- 关于字母大小的比较
对于2中所述,本以为是程序不能判断 A 与 AA 的大小,但是由
if ('A' < 'AA')
echo 'A < AA';
else
echo "Can't judge!";
该输出结果:A < AA。
因此,在上述功能代码中,没有直接对字母进行for循环获取列号。