后台自定义导出excel
getActiveSheet();$spreadsheet-˃getDefaultStyle();//设置表头//$head=[
<php?
/**
* @param $list 要导出数据
* @param $head 表头 例['订单编号','收货人','手机号','收货地址','订单类型','商品名称','下单数量']
* @param $keys 表头对应字段['order_sn', 'consignee', 'phone', 'userinfo', 'ordertype','goodinfo','num']
* @param $fileName 导出文件的名字
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
*/
public static function exportInfo($list, $head, $keys, $fileName){
@ini_set("memory_limit","1024M");
@ini_set("max_execution_time","40");
ob_end_clean();
ob_start();
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$spreadsheet->getDefaultStyle();
//设置表头
// $head = ['订单编号','收货人','手机号','收货地址','订单类型','商品名称','下单数量'];
// //数据中对应的字段,用于读取相应数据:
// $keys = ['order_sn', 'consignee', 'phone', 'userinfo', 'ordertype','goodinfo','num'];
$count = count($head); //计算表头数量
for ($i = 65; $i < $count + 65; $i++) { //数字转字母从65开始,循环设置表头:
$sheet->setCellValue(strtoupper(chr($i)) . '1', $head[$i - 65]);
}
/*--------------开始从数据库提取信息插入Excel表中------------------*/
foreach ($list as $key => $item) { //循环设置单元格:
//$key+2,因为第一行是表头,所以写到表格时 从第二行开始写
for ($i = 65; $i < $count + 65; $i++) { //数字转字母从65开始:
$spreadsheet->getActiveSheet(0)->setCellValueExplicit(strtoupper(chr($i)) . ($key + 2), $item[$keys[$i - 65]],DataType::TYPE_STRING);
// $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys[$i - 65]]);
$spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列宽
$spreadsheet->getActiveSheet()->getRowDimension(strtoupper(chr($i)))->setRowHeight(1000); //固定列宽
}
}
header('Content-Type: application/vnd.ms-excel');
header("Content-Type: application/force-download");//强制下载
header('Content-Disposition: attachment;filename="'.$fileName.' '. date('Y-m-d H-i-s') . '.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~