在ThinkPHP框架中,处理Excel文件导入和导出可以使用PHPExcel类库。首先需要通过composer安装PHPExcel库,然后在控制器中引入PHPExcel类库:
use PHPExcel_IOFactory;
use PHPExcel;
// 导入Excel文件
public function importExcel() {
// 获取上传的文件
$file = request()->file('excel');
// 判断是否上传了文件
if ($file) {
// 获取文件的后缀名
$ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
// 判断文件类型是否为Excel
if (in_array($ext, ['xls', 'xlsx'])) {
$reader = PHPExcel_IOFactory::createReader('Excel2007');
$reader->setReadDataOnly(true);
// 加载Excel文件
$excel = $reader->load($file->getInfo('tmp_name'));
$sheet = $excel->getActiveSheet();
// 获取总行数和总列数
$rows = $sheet->getHighestRow();
$cols = $sheet->getHighestColumn();
// 遍历每一行数据
for ($row = 2; $row <= $rows; $row++) {
// 获取当前行的数据并进行处理
$data[] = [
'name' => $sheet->getCell('A'.$row)->getValue(),
'age' => $sheet->getCell('B'.$row)->getValue(),
'sex' => $sheet->getCell('C'.$row)->getValue()
];
}
// 批量插入数据到数据库
$result = Db::name('users')->insertAll($data);
// 判断是否插入成功
if ($result) {
$msg = '导入成功';
} else {
$msg = '导入失败';
}
} else {
$msg = '文件类型错误,只支持xls和xlsx格式的Excel文件';
}
} else {
$msg = '请上传Excel文件';
}
// 返回提示信息
return $msg;
}
// 导出Excel文件
public function exportExcel() {
// 设置表头
$header = ['姓名', '年龄', '性别'];
// 查询数据并处理
$list = Db::name('users')->field('name,age,sex')->select();
$data = [];
foreach ($list as $key => $val) {
$data[$key][] = $val['name'];
$data[$key][] = $val['age'];
$data[$key][] = $val['sex'];
}
// 创建PHPExcel对象
$objPHPExcel = new PHPExcel();
// 获取当前活动的sheet操作对象
$objSheet = $objPHPExcel->getActiveSheet();
// 将表头写入第一行
foreach ($header as $key => $val) {
$objSheet->setCellValueByColumnAndRow($key, 1, $val);
}
// 循环写入数据
foreach ($data as $row => $cols) {
foreach ($cols as $col => $val) {
$objSheet->setCellValueByColumnAndRow($col, $row+2, $val);
}
}
// 设置文件名、文件类型和输出方式
$filename = 'user_info_'.date('YmdHis').'.xlsx';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$writer->save('php://output');
exit;
}
其中,导入Excel文件的方法为importExcel()
,上传的文件通过request()->file('excel')获取;导出Excel文件的方法为exportExcel()
,将数据写入到PHPExcel对象中,设置文件名及输出方式后通过PHPExcel_IOFactory类的createWriter()
方法实现Excel文件导出。