答案:ThinkPHP结合PhpSpreadsheet实现Excel导入导出。1. 用composer安装PhpSpreadsheet;2. 导出时创建Spreadsheet对象,写入数据并输出下载;3. 导入时通过IOFactory读取文件,遍历数据并存入数据库;4. 注意文件路径、数据验证、批量处理与临时文件清理。
在ThinkPHP中实现Excel数据的导入和导出,常用的方法是结合第三方库 PHPOffice/PhpSpreadsheet。它支持读写多种格式(如XLSX、CSV),兼容性好,且适用于ThinkPHP 6、5.1等主流版本。
1. 安装 PhpSpreadsheet
使用 Composer 安装 PhpSpreadsheet:
composer require phpoffice/phpspreadsheet
2. 导出数据为 Excel
将数据库中的数据导出为 Excel 文件,例如导出用户列表:
示例代码(在控制器中):
立即学习“PHP免费学习笔记(深入)”;
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx;
use appmodelUser; // 假设你有User模型
public function exportUsers()
{
$users = User::select();
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置表头
$sheet->setCellValue(‘A1’, ‘ID’);
$sheet->setCellValue(‘B1’, ‘姓名’);
$sheet->setCellValue(‘C1’, ‘邮箱’);
$row = 2;
foreach ($users as $user) {
$sheet->setCellValue(‘A’ . $row, $user->id);
$sheet->setCellValue(‘B’ . $row, $user->name);
$sheet->setCellValue(‘C’ . $row, $user->email);
$row++;
}
// 设置下载响应头
header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
header(‘Content-Disposition: attachment;filename=”users.xlsx”‘);
header(‘Cache-Control: max-age=0’);
$writer = new Xlsx($spreadsheet);
$writer->save(‘php://output’);
exit;
}
3. 导入 Excel 数据到数据库
通过上传 Excel 文件,读取内容并插入数据库:
use PhpOfficePhpSpreadsheetIOFactory;
use appmodelUser;
public function importUsers($filePath)
{
$spreadsheet = IOFactory::load($filePath);
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
// 跳过第一行(表头)
foreach ($sheetData as $index => $row) {
if ($index == 1) continue; // 忽略表头
$data = [
‘name’ => $row[‘B’],
’email’ => $row[‘C’],
];
User::create($data);
}
return json([‘msg’ => ‘导入成功’]);
}
// 在控制器中调用时先处理文件上传
public function upload()
{
$file = request()->file(‘excel_file’);
if (!$file) {
return json([‘msg’ => ‘未上传文件’]);
}
$savename = thinkfacadeFilesystem::disk(‘public’)->putFile(‘excels’, $file, ‘md5’);
$filePath = thinkfacadeApp::getRootPath() . ‘public/storage/’ . $savename;
return $this->importUsers($filePath);
}
4. 注意事项
实际使用中需要注意以下几点:
- 确保上传目录可写,且文件路径正确
- 导入前建议做数据验证(如邮箱格式、必填字段)
- 大数据量导入建议分批处理,避免超时
- 导出时可设置列宽、样式、标题居中等美化操作
- 生产环境注意清理临时文件
基本上就这些。配合 PhpSpreadsheet,ThinkPHP 实现 Excel 导入导出并不复杂,关键是处理好数据映射和异常情况。
php thinkphp excel js json composer cad 大数据 app office csv php composer json thinkphp NULL if foreach select require Filesystem continue public function 对象 this 数据库 excel