composer require phpoffice/phpspreadsheet
调用:
//设置表头:
$excel_title = ['前缀', '前6位', '省份', '城市', '运营商', 'post_code', 'city_code', 'area_code'];
//数据中对应的字段,用于读取相应数据:
$excel_filed = ['prefix', 'phone', 'province', 'city', 'isp', 'post_code', 'city_code', 'area_code'];
$this->OfficeExport('订单表', $phoneinfo_sel_obj, $excel_title, $excel_filed);
导出方法:
/**
* [OfficeExport phpspreadsheet 导出excel表]
* @Author 猴子年华、
* @CreateTime 2019-03-15
* @LatestUpdateTime 2019-03-15
* @remark [remark]
* @copyright [copyright]
* @license [license]
* @version [version]
* @param string $excel_name [ excel表的表名 ]
* @param array $excel_data [ 要导出excel表的数据,接受一个二维数组 ]
* @param array $excel_title [ excel表的表头,接受一个一维数组 ]
* @param array $excel_filed [ $data中字段名,接受一个一维数组 ]
*/
public function OfficeExport($excel_name='测试表', $excel_data=[], $excel_title=[], $excel_filed=[])
{
try {
$count = count($excel_title); //计算表头数量
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
ob_clean(); //解决文件损坏
$cellName = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];
/*---设置Excel title-------开始-----------*/
$spreadsheet->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' 导出时间:'.date('Y-m-d H:i:s'));
foreach ($excel_title as $excel_title_key_one => $excel_title_val_one) {
$sheet->setCellValue($cellName[$excel_title_key_one] . '1', $excel_title_val_one);
$sheet->getColumnDimension($cellName[$excel_title_key_one])->setWidth(20); //固定列宽,表格宽度
}
/*---设置Excel title-------结束-----------*/
/*---开始从数据库提取信息插入Excel表中-------开始-----------*/
foreach ($data as $key => $item) {
foreach ($excel_title as $excel_title_key_two => $excel_title_val_two) { // 这里循环 excel_title 导出前,就不用再组装数据了
$sheet->setCellValue($cellName[$key] . ($key + 2), $item[$excel_filed[$excel_title_key]]); // 行写入,从第二行开始写
$sheet->getColumnDimension($cellName[$key])->setWidth(20); //固定列宽,表格宽度
}
}
/*---开始从数据库提取信息插入Excel表中-------结束-----------*/
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $excel_name . '.xlsx"');
header('Cache-Control: max-age=0'); // 禁止缓存
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
//删除清空:释放内存
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
exit;
} catch (Exception $e) {
return false;
}
}