1. 下载扩展包
代码语言:javascript复制composer require phpoffice/phpexcel
2. 导出数据封装
在TP中使用时可以将以下类文件放入 extend 目录
代码语言:javascript复制<?php
/**
* 导出数据
* PHP7.2版本以下推荐使用 phpoffice/phpexcel
* PHP7.2版本以上推荐使用 phpoffice/phpspreadsheet
* composer require phpoffice/phpexcel
*/
class Excel
{
/**
* 导出数据使用示例
*/
public static function exportDemo()
{
########## 使用示例 ##########
// 表头
$header = [
'id', '姓名', '手机号'
];
// 表格数据
$data = [
[
'id' => '1',
'name' => '张三',
'mobile' => 15037843784,
],
[
'id' => 2,
'name' => '李四',
'mobile' => 15510191019,
],
];
// 设置为字符串
$stringColumn = ['A', 'B'];
// 设置列宽
$colWidth = [
'C' => 20,
];
self::export($header, $data, $colWidth, $stringColumn, [
'filename' => '用户信息',
'title' => '示例表格',
]);
}
/**
* 导出Excel表格
* 应用场景:导出订单,导出用户信息
* @param array $header 表头
* @param array $data 表格数据
* @param array $colWidth 设置列宽
* @param array $extra 附加数据
*/
public static function export($header, $data, $colWidth, $extra = [])
{
$objPHPExcel = new PHPExcel;
$activeSheet = $objPHPExcel->setActiveSheetIndex(0);
// 默认单元格内容左对齐
$activeSheet
->getDefaultStyle()
->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
// 设置表格文件名
if ( ! empty($extra['filename']) ) {
// 文件名
$filename = $extra['filename'];
} else {
// 文件名
$filename = '导出示例' . date('Y年m月d日H时i分s秒');
}
// 设置工作薄标题
if ( ! empty($extra['title']) ) {
// 参数要求必须为字符串
$activeSheet->setTitle((string)$extra['title']);
}
// 获取 'A' 的 ASCII值
$key = ord('A');
foreach ($header as $v) {
// 将 ASCII 值转为字符
// 示例: A,B,C,D
$colum = chr($key);
if ( ! empty($colWidth[$colum]) ) {
$activeSheet->getColumnDimension($colum)->setWidth($colWidth[$colum]);
}
// 单元格写入数据
$activeSheet->setCellValue($colum . '1', $v);
$key = 1;
}
// 从第二行写入数据
$column = 2;
foreach ($data as $rows) { // 行写入
$span = ord("A");
foreach ($rows as $keyName => $value) { // 列写入
// 解决php导出excel 长数字变成科学计数法
$activeSheet
->getStyle(chr($span) . $column)
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
if ( in_array(chr($span), $stringColumn) ) {
// 设置为字符串文本 处理数字过长变为科学计数法和身份证号后几位变为0的情况
$objActSheet->setCellValue(chr($span) . $column, $value . ' ');
} else {
$objActSheet->setCellValue(chr($span) . $column, $value);
}
$span ;
}
$column ;
}
// Excel2003 后缀 .xls
// MIME 协议,文件的类型,不设置,会默认html
// header('Content-Type: application/vnd.ms-excel');
// // MIME 协议的扩展
// header('Content-Disposition:attachment;filename=' . $filename . '.xls');
// // 缓存控制
// header('Cache-Control:max-age=0');
// $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
// Excel2007 后缀 .xlsx
// MIME 协议,文件的类型,不设置,会默认html
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// MIME 协议的扩展
header('Content-Disposition:attachment;filename=' . $filename . '.xlsx');
// 缓存控制
header('Cache-Control:max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//文件通过浏览器下载
$objWriter->save('php://output');
}
}