ThinkPHP5.1使用PHPExcel AJAX方法导出到excel中
作者:PHPYuan 时间:2018-06-15 23:40:20
一、下载PHPExcel后把它放在extend目录下就行了(不需要建子目录)。【没有PHPExcel的留言我统一发】
二、在common.php新建 function exportExcel($data,$type){}方法。里面的具体的过程我就写下面了。
$objPHPExcel=new \PHPExcel();
$objPHPExcel->getProperties()->setCreator('BerryHu') //作者
->setLastModifiedBy('BerryHu') //最后更改
->setTitle('Office 2007 XLSX Document') //文档标题
->setSubject('Office 2007 XLSX Document') //文档主题
->setDescription('Document for Office 2007 XLSX, generated using PHP classes.') //描述信息
->setKeywords('office 2007 openxml php') //文档关键字
->setCategory('Result file');//文档分类
$head = array('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');
$tableheader = $type['title'];
for ($i=0; $i < count($tableheader); $i++) {
$k = $i + 1;//这里因为我的数组键值是从1开始的
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue("$head[$i]1","$tableheader[$k]");
//宽度自动
$objPHPExcel->getActiveSheet()->getColumnDimension("$head[$i]")->setAutoSize(true);
}
//设置宽度
// $objPHPExcel->getActiveSheet()->getColumnDimension(’D’)->setWidth(12);
//填充表格信息
for ($i=2; $i <= count($data) + 1; $i++) {
$j = 0 ;
foreach ($data[$i - 2] as $key => $value) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue("$head[$j]$i", "$value");
$j++;
}
}
$table=$type['name'];
$objPHPExcel->getActiveSheet()->setTitle($table);
$objPHPExcel->setActiveSheetIndex(0);
// $filename=urlencode($table);
$filename=$table;
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');
header('Cache-Control: max-age=0');
$objWriter= \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
$filePath = 'excel/'.$filename.'.xlsx';
$objWriter->save($filePath);
$response = array(
'success' => true,
'url' => $filePath
);
// $objWriter->save('php://output');
return $response;
【注意点】
宽度自动那段代码经我这测试不能实现全部的。如需对宽度有要求的可以自己设置。代码都在上面的注释里。
我这里$objWriter->save($filePath);中的$filePath是保存的路径。返回的也是路径,最后前端接收到路径,通过
window.location.href='/' +data.url; 就能直接下载了。
一般通过地址栏导出excel都是$objWriter->save('php://output'); 而AJAX则需要先保存,然后在把保存的路径给返回,
这样就能通过ajax导出了。
分享到:
>> 下一篇:wuzhicms注入 (2018-06-15 23:40)