我想成为一名粘贴复制的程序员
工作之余有时间就会分享我们在开发过程中会经常遇到的一些功能及问题
我会尽量做到直接粘贴复制就能使用,请关注我吧!!!!
下面跟大家分享文件导出的操作
这次我使用到的是PhpOffice扩展导出
tp5tp6PhpOffice
第一步使用composer安装PhpOffice到项目中
composer require phpoffice/phpspreadsheet
直接上代码开搞
// 文件头部的引入
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
use think\Db;
use think\facade\Request;
/***
* 报名导出
* 带时间查询功能
* 参数说明
* s_time 开始时间,格式:yyyy-mm-dd,也就是年月日的意思
* e_time 结束时间,格式:yyyy-mm-dd,也就是年月日的意思
*/
public function allianceExcel(Request $request)
{
$res = $request::get();
if($res['s_time'] && $res['e_time']){
// 导出文件名
$file_name = "报名名单".$res['s_time'].'-'.$res['e_time'];
$adminList = Db::name('dbname')
->where('create_time','between time',[$res['s_time'],$res['e_time']])
->select();
}else{
$adminList = Db::name('dbname')->select();
}
$newExcel = new Spreadsheet(); //创建一个新的excel文档
$objSheet = $newExcel->getActiveSheet(); //获取当前操作sheet的对象
$objSheet->setTitle($file_name); //设置当前sheet的标题
//设置宽度为true,不然太窄了
$newExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
$newExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$newExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
$newExcel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
//设置第一栏的标题
$objSheet->setCellValue('A1', '姓名')
->setCellValue('B1', '手机号码')
->setCellValue('C1', '微信号')
->setCellValue('D1', '申请时间');
//第二行起,每一行的值,setCellValueExplicit是用来导出文本格式的。
//->setCellValueExplicit('C' . $k, $val['admin_password']PHPExcel_Cell_DataType::TYPE_STRING),可以用来导出数字不变格式
foreach ($adminList as $k => $val) {
$k = $k + 2;
$objSheet->setCellValue('A' . $k, $val['name'])
->setCellValue('B' . $k, $val['phone'])
->setCellValue('C' . $k, $val['wechat'])
->setCellValue('D' . $k, $val['create_time']);
}
$this->downloadExcel($newExcel, $file_name, 'Xls');
}
//公共文件,用来传入xls并下载
function downloadExcel($newExcel, $filename, $format)
{
// $format只能为 Xlsx 或 Xls
if ($format == 'Xlsx') {
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
} elseif ($format == 'Xls') {
header('Content-Type: application/vnd.ms-excel');
}
header("Content-Disposition: attachment;filename="
. $filename. '.' . strtolower($format));
header('Cache-Control: max-age=0');
$objWriter = IOFactory::createWriter($newExcel, $format);
$objWriter->save('php://output');
//通过php保存在本地的时候需要用到
//$objWriter->save($dir.'/demo.xlsx');
//以下为需要用到IE时候设置
// If you're serving to IE 9, then the following may be needed
//header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
//header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
//header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
//header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
//header('Pragma: public'); // HTTP/1.0
exit;
}
效果图