1-composer下载安装
composer require phpoffice/phpspreadsheet
注意:composer会提示要用到2.0以上版本。
说明:在安装完成后,根目录的conposer.json里面可以看到
2-方法里引用
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Csv;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
3-使用方法
public function exportExcel(){
$data = Cache('excelText');//这里是数据
// 实例化
$spreadsheet = new Spreadsheet();
// 获取活动单元格
$sheet = $spreadsheet->getActiveSheet();
// 获取单元格
$cellA = $sheet->getCell('A1');
// 设置单元格的值
$cellA->setValue('ID');
// 设置 A 列 列宽
$sheet->getColumnDimension('A')->setWidth(10);
// 设置第一行 行高
$sheet->getRowDimension(1)->setRowHeight(20);
$cellB = $sheet->getCell('B1');
$cellB->setValue('站点');
$sheet->getColumnDimension('B')->setWidth(20);
$cellC = $sheet->getCell('C1');
$cellC->setValue('名称');
$sheet->getColumnDimension('C')->setWidth(20);
$cellD = $sheet->getCell('D1');
$cellD->setValue('单价');
$sheet->getColumnDimension('D')->setWidth(10);
$cellE = $sheet->getCell('E1');
$cellE->setValue('数量');
$sheet->getColumnDimension('E')->setWidth(10);
$cellE = $sheet->getCell('F1');
$cellE->setValue('总价');
$sheet->getColumnDimension('F')->setWidth(10);
$cellF = $sheet->getCell('G1');
$cellF->setValue('时间');
$sheet->getColumnDimension('G')->setWidth(30);
// 设置样式 标题
$styleArray = [
'alignment' => [
'horizontal' => 'center', //水平居中
'vertical' => 'center', //垂直居中
],
'font' => [
'name' => '黑体',
'bold' => false,
'size' => 10
]
];
// 设置样式 正文
$styleArrayBody = [
'alignment' => [
'horizontal' => 'center', //水平居中
'vertical' => 'center', //垂直居中
],
'font' => [
'name' => '宋体',
'bold' => false,
'size' => 10
]
];
// 应用样式
$sheet->getStyle('A1')->applyFromArray($styleArray);
$sheet->getStyle('B1')->applyFromArray($styleArray);
$sheet->getStyle('C1')->applyFromArray($styleArray);
$sheet->getStyle('D1')->applyFromArray($styleArray);
$sheet->getStyle('E1')->applyFromArray($styleArray);
$sheet->getStyle('F1')->applyFromArray($styleArray);
$sheet->getStyle('G1')->applyFromArray($styleArray);
// 从 A2 开始填充数据
foreach ($data as $k => $v) {
$n = $k + 2;
// 获取单元格
$cellA = $sheet->getCell('A' . $n);
// 设置单元格的值
$cellA->setValue($v['order_id']);
$cellB = $sheet->getCell('B' . $n);
$cellB->setValue($v['order_room']);
$cellC = $sheet->getCell('C' . $n);
$cellC->setValue($v['order_product']);
$cellD = $sheet->getCell('D' . $n);
$cellD->setValue($v['order_money']);
$cellE = $sheet->getCell('E' . $n);
$cellE->setValue($v['order_product_mun']);
$cellF = $sheet->getCell('F' . $n);
$cellF->setValue($v['order_money_all']);
$cellG = $sheet->getCell('G' . $n);
$cellG->setValue($v['create_time']);
}
$file_name = '导出数据.xlsx';
// 实例化导出类
header('Content-Type:application/vnd.ms-excel');
header('Content-Disposition:attachment;filename=' . $file_name);
header('Cache-Control:max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
}
}
下面我们来操作:导入文件
$date = request()->param();
$objReader = IOFactory::createReader('Xlsx');
$objPHPExcel = $objReader->load(root_path() . '/public/'.$date['text']);//传入的文件
$sheet = $objPHPExcel->getSheet(0); //excel中的第一张sheet
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
\PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);
$lines = $highestRow - 1;
if ($lines <= 0) {
return json(['code' => 0, 'message' => '没有数据!']);
}
$data = array();
for ($j = 2; $j <= $highestRow; $j++) {
$data[$j - 2] = [
'product_model' => trim($objPHPExcel->getActiveSheet()->getCell("A" . $j)->getValue()),//数据匹配生成缓存数据
];
}
echo '<pre>';
$json_str = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
页面输出
echo '<pre>';