方法:
/**
* 导出excel表格(适合没有单元格合并的情况)
* @param array $data 二维数组
* @param array $table_head 表头(即excel工作表的第一行标题)
* @param array $exclude 不需要的字段
* @param string $file_name 文件名
* @param string $sheet_name 工作表名
*/
public function simple_export_excel(array $table_head = array(), array $data = array(), array $exclude = array(), $file_name = 'excel', $download = 1, $sheet_name = 'sheet') {
App::import('Vendor', 'PHPExcel/PHPExcel/IOFactory');
App::import('Vendor', 'PHPExcel/PHPExcel');
$objPHPExcel = new PHPExcel(); // 创建PHPExcel对象
// 设置excel文件的属性,在excel文件->属性->详细信息,可以看到这些值
$objPHPExcel->getProperties() //获得文件属性对象,给下文提供设置资源
->setCreator("admin") //设置文件的创建者
->setLastModifiedBy("admin") //最后修改者
->setTitle("Office 2007 XLSX Record Document" ) //标题
->setSubject("Office 2007 XLSX Record Document" ) //主题
->setDescription("Record document for Office 2007 XLSX, generated using PHP classes.") //描述
->setKeywords("office 2007 openxml php") //关键字
->setCategory("export file"); //类别
// 设置Excel文档的第一张sheet(工作表)为活动表,即当前操作的表。
$objPHPExcel->setActiveSheetIndex(0);
// 获取当前操作的工作表
$activeSheet = $objPHPExcel->getActiveSheet();
// 冻结首行 by yangshuiping 2019-12-04
$objPHPExcel->getActiveSheet()->freezePane('A2');
// 设置工作表的名称
$activeSheet->setTitle($sheet_name);
// 返回字符A的 ASCII 码值
$column = ord('A');
// 设置工作表的表头
foreach ($table_head as $k=>$v) {
// 字体大小
$activeSheet->getStyle(chr($column)."1")->getFont()->setSize(13);
// 加粗
$activeSheet->getStyle(chr($column)."1")->getFont()->setBold(true);
// 列宽
$chars = strlen($v); // 统计字节数
$activeSheet->getColumnDimension(chr($column))->setWidth($chars*2);
// 设置单元格的值
$activeSheet->setCellValue(chr($column)."1", $v);
// 设置左对齐
$activeSheet->getStyle(chr($column))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$column++;
}
$column = ord('A'); // 返回字符的 ASCII 码值
// 将$data中的数据填充到单元格中
foreach ($data as $row=>$col) {
$i=0;
foreach ($col as $k=>$v ) {
// 排除一些key值 by yangshuiping 2019-12-03
if (!in_array($k, $exclude) || empty($exclude)) {
$activeSheet->setCellValue(chr($column+$i).($row+2), $v);
$i++;
}
}
}
// 导出Excel表格
$file_name .= date('Ymd_His') . '.xlsx'; // 文件名
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
// $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
if ($download) {
ob_start();
$objWriter->save('php://output');
$xlsData = ob_get_contents();
ob_end_clean();
$data = [
'file' => "data:application/vnd.ms-excel;base64," . base64_encode($xlsData),
'name' => $file_name
];
return $this->responseJsonResult($data);
}else{
$file_path = WWW_ROOT . "xxx/xx/" . $file_name;//#hardcode
$objWriter->save($file_path);
return $file_path;
}
}
调用:
if ($post_request && $action == 'xxx') {
$this->autoRender = false;
$title = [
'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx'
];
$g_Excels = $g_Commons->GlobalController('xxx');
$exclude = [
'xxx',
'xxx',
'xxx',
'xxx',
'xxx',
];
return $g_Excels->simple_export_excel($title, $orders, $exclude, 'xxx');
}
前端:
var page = $("#export_req").attr('url');
$("#export_req").click(function(){
// ocs_show_overlay();
$.ajax({
url:page,
type:"POST",
async:false,
dataType:"json",
data:$("form").serialize(),
timeout:3000,
success:function(data){
var $a = $("<a>");
$a.attr("href",data.datas.file);
$("body").append($a);
$a.attr("download", data.datas.name);
$a[0].click();
$a.remove();
},
error:function(){
console.log(data);
}
});
// ocs_hide_overlay();
});