①由于PHPExcel不进行更新,所以采取新的类库PHPSpreadSheet(PHP7以上)
1.下载PHPSpreadSheet 下载地址:GitHub 官方PHPSpreadSheet库
2.编写PHP脚本
<?php
require "PhpSpreadSheet/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$uploadfile = "users1590801158.xlsx";
$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($uploadfile); // 获得文件类型
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); // 根据文件类型创建读写器
$PHPExcel = $reader->load($uploadfile); // 载入excel文件
$sheet = $PHPExcel->getSheet(0); // 读取第一個工作表
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumm = $sheet->getHighestColumn(); // 取得总列数
// echo $highestRow.PHP_EOL.$highestColumm;
$data = [];
for($row = 2; $row <= $highestRow; $row++){
for ($column = 'A'; $column <= $highestColumm; $column++){ //列数是以A列开始
if (empty($sheet->getCell($column . $row)->getValue()) == false) {
$str = $sheet->getCell($column . $row)->getValue();
$data[$row][] = $str; // 先将数据存入二维数组中(方便SQL语句处理),也可以不用这步
}
}
}
//print_r($data);
$sql = "insert into users (`id`, `username`, `password`, `role`) values ".PHP_EOL;
foreach ($data as $key => $value) {
# code...
$str = "('".$value[0]."','".$value[1]."','".$value[2]."','".$value[3]."')";
$sql .= $str; // 逐条生成SQL语句
if($key< $highestRow){
$sql .= ",".PHP_EOL;
}
}
$sql .= ";";
//echo $sql;
$file = "D:/OJ/".time()."_OJ.sql"; // 创建文件生成位置及文件名
$sqlFile = fopen($file, "w");
fwrite($sqlFile, $sql); // 将sql语句写入
fclose($sqlFile); // 释放资源
echo "SQL文件生成完毕!". PHP_EOL." 请到". dirname($file)."目录下查看";
②旧版本操作(PHP7以下):
1.下载PHPExcel扩展类 下载地址:github官方PHPExcel库
2.编写PHP脚本
<?php
include "./PHPExcel/Classes/PHPExcel/IOFactory.php"; // 引入类库
header("Content-type: text/html; charset=utf-8"); // 设置文件类型,防止出现乱码
$inputFileName = "./student.xlsx"; // 定义需要加载的xlsx文件路径及文件名
date_default_timezone_set('PRC'); // 设置时区
// 读取excel文件
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
}
// 确定要读取的sheet,什么是sheet,看excel的右下角,真的不懂去百度吧
$sheet = $objPHPExcel->getSheet(2); // 获取特定sheet
$highestRow = $sheet->getHighestRow(); // 获取行数
$highestColumn = $sheet->getHighestColumn(); // 获取列数
$sql = "insert into student_profiles(`user_id`,`student_number`,`name`,`sex`,`major_id`,`major_class_id`) values".PHP_EOL; // 插入语句
for ($row = 2; $row <= $highestRow; $row++){
//获取excel文件的数据,$row=2代表从第二行开始获取数据
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
//这里得到的rowData都是一行的数据,得到数据后自行处理,我们这里只打出来看看效果
//print_r($rowData); // 生成二维数组
$val = "('".($row-1) ."','". $rowData[0][0]."','".$rowData[0][1]."','".$rowData[0][2]. "','".$rowData[0][4][7]."')"; // 按顺序添加
if($row != $highestRow){
$val .= ",".PHP_EOL;
}
// print_r($str1."<br>");
$sql .= $val; // 生成sql语句
}
//print_r($str);
$sql .= ";"; // sql 语句最后为分号
$file = "D:/OJ/".time()."_OJ.sql"; // sql文件存放位置
if(file_exists($file)){ // 判断文件是否存在
echo "文件存在!";
}
else{
$sqlFile = fopen($file, "w"); // 创建并打开文件,获取文件指针资源
fwrite($sqlFile, $sql); // 将sql语句写入文件
fclose($sqlFile); // 关闭资源指针
echo "SQL文件生成完毕!". PHP_EOL." 请到". dirname($file)."目录下查看";
}