laravel 5.8 使用excel导出
依赖(服务器上composer下载):
Maatwebsite\Excel
PhpOffice\PhpSpreadsheet
php拓展开启:
extends=fileinfo.dll
代码文件内引用:
use Maatwebsite\Excel\Facades\Excel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
生成excel文件:
//查询表数据
$rows = $this->currentMemberSignModel()->getRecord($param]);
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$date = date('Y年m月d日');
//设置工作表标题名称
$worksheet->setTitle("历史记录表-$date");
//表头
//设置单元格内容
$worksheet->setCellValueByColumnAndRow(1, 1, "历史记录表-$date");
//注: 一行一行的比较麻烦,有需求可自行改成遍历循环表头
$worksheet->setCellValueByColumnAndRow(1, 2, '名称');
$worksheet->setCellValueByColumnAndRow(2, 2, '昵称');
$worksheet->setCellValueByColumnAndRow(3, 2, '签到语');
$worksheet->setCellValueByColumnAndRow(4, 2, '日期');
$worksheet->setCellValueByColumnAndRow(5, 2, '是否签到');
//合并单元格
$worksheet->mergeCells('A1:J1');
//将F2到H2合并为一个单元格。
// $worksheet->mergeCells('F2:H2');
// $worksheet->mergeCells('I2:K2');
// $worksheet->mergeCells('L2:Q2');
// $worksheet->mergeCells('R2:T2');
// $worksheet->mergeCells('U2:W2');
// $worksheet->mergeCells('X2:Z2');
//设置默认列宽为12。
$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);//将A宽度设置为N字符宽
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(38);
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);//自动计算列宽
$spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(20);
$styleArray = [
'font' => [
'bold' => true
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
//设置单元格样式
$worksheet->getStyle('A1')->applyFromArray($styleArray)->getFont()->setSize(20);
$worksheet->getStyle('A2:Z2')->applyFromArray($styleArray)->getFont()->setSize(12);
// $worksheet->getStyle('A3:Z3')->applyFromArray($styleArray)->getFont()->setSize(12);
//数据
$len = count($rows);
$j = 0;
for ($i = 0; $i < $len; $i++) {
$j = $i + 3; //从表格第3行开始
$worksheet->setCellValueByColumnAndRow(1, $j, $rows[$i]['name']);
$worksheet->setCellValueByColumnAndRow(2, $j, $rows[$i]['user_name']);
$worksheet->setCellValueByColumnAndRow(3, $j, $rows[$i]['sign_text']);
$worksheet->setCellValueByColumnAndRow(4, $j, $rows[$i]['day']);
$worksheet->setCellValueByColumnAndRow(5, $j, $rows[$i]['sign']);
}
$styleArrayBody = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '666666'],
],
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
$total_rows = $len + 2;
//添加所有边框/居中
$worksheet->getStyle('A1:E' . $total_rows)->applyFromArray($styleArrayBody);
//保存到文件
$fileType = 'xlsx';
$fileName = date('Y-m-d').'_Sign_'.time();
//1.下载到服务器
$writer = new Xlsx($spreadsheet);
$writer->save(getcwd() . '/upload/excel/' . $fileName . '.' . $fileType);
// chmod(getcwd() . '/upload/excel/' . $fileName . '.' . $fileType,0777);
$url = 'https://www.xxxx.com/upload/excel/'.$fileName . '.' . $fileType;
```php
$url 为返回的excel文件下载地址