使用ThinkPHP实现Excel导入导出有以下几个步骤:
composer require phpoffice/phpexcel
use PHPExcel;
use PHPExcel_IOFactory;
// 创建PHPExcel对象
$excel = new PHPExcel();
// 设置文档属性
$excel->getProperties()
->setCreator("Your Name")
->setTitle("Title")
->setDescription("Description");
// 设置当前的sheet
$sheet = $excel->setActiveSheetIndex(0);
// 设置表头
$sheet->setCellValue('A1', '列1')->setCellValue('B1', '列2');
// 循环设置数据
foreach ($dataList as $key => $value) {
$sheet->setCellValue('A' . ($key + 2), $value['column1'])
->setCellValue('B' . ($key + 2), $value['column2']);
}
// 输出Excel文件
$filename = '导出文件名.xls';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$writer->save('php://output');
// 获取上传文件
$file = request()->file('excel');
// 读取Excel文件
$reader = PHPExcel_IOFactory::createReader('Excel2007');
$excel = $reader->load($file->getInfo('tmp_name'));
// 获取当前sheet
$sheet = $excel->getActiveSheet();
// 获取总行数
$rowNum = $sheet->getHighestRow();
// 获取总列数
$colNum = $sheet->getHighestColumn();
// 循环读取数据
$dataList = [];
for ($i = 2; $i <= $rowNum; $i++) {
$data = [
'column1' => $sheet->getCell('A' . $i)->getValue(),
'column2' => $sheet->getCell('B' . $i)->getValue(),
];
$dataList[] = $data;
}
需要注意的是,PHPExcel已经停止维护,建议使用PhpSpreadsheet代替。