您的位置:首页 > 编程语言 > PHP开发

PHPExcel自动按照数据的列数导出文件(带demo代码)

2017-08-09 18:18 1026 查看
本文的demo样例代码在百度云盘上可自行下载    点击打开链接(http://pan.baidu.com/s/1eRNsDfO)





实例代码展示如下

<?php
include "PHPExcel/Classes/PHPExcel.php";

/**自动根据表格的数据量将数据保存至Excel 表格
* @param array $data 分为 title:报表的标题 list:数据的数组  column:每列的命名
* @return bool
*/
function autoOutSheet($data)
{
$column = count(current($data['list']));//每个数组有多少列
$ABCinfo = ABCinfo();
$end_column = $ABCinfo[$column];

$objectPHPExcel = new \PHPExcel();
$objectPHPExcel->setActiveSheetIndex(0);
//报表头的输出
$objectPHPExcel->getActiveSheet()->mergeCells('B1:' . $end_column . '1');
$objectPHPExcel->getActiveSheet()->setCellValue('B1', $data['title']);
$objectPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getFont()->setSize(24);
$objectPHPExcel->setActiveSheetIndex(0)->getStyle('B1')
->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2', '日期:' . date("Y年m月j日"));
//表格头的输出
$objectPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(5);
for ($i = 0; $i < $column; $i++) {
$objectPHPExcel->setActiveSheetIndex(0)->setCellValue($ABCinfo[$i + 1] . '3', $data['column'][$i]);
$objectPHPExcel->getActiveSheet()->getColumnDimension($ABCinfo[$i + 1])->setWidth(25);
}
//设置居中
$objectPHPExcel->getActiveSheet()->getStyle('B3:' . $end_column . '3')
->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

//设置边框
$objectPHPExcel->getActiveSheet()->getStyle('B3:' . $end_column . '3')
->getBorders()->getTop()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B3:' . $end_column . '3')
->getBorders()->getLeft()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B3:' . $end_column . '3')
->getBorders()->getRight()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B3:' . $end_column . '3')
->getBorders()->getBottom()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B3:' . $end_column . '3')
->getBorders()->getVertical()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);

//设置颜色
$objectPHPExcel->getActiveSheet()->getStyle('B3:' . $end_column . '3')->getFill()
->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF66CCCC');
$n = 0;
foreach ($data['list'] as $key => $value) {

$currentRowNum = $n + 4;
//明细的输出
foreach ($value as $k => $v) {
$objectPHPExcel->getActiveSheet()->setCellValue($ABCinfo[$k + 1] . $currentRowNum, $v);
}
//设置边框
$objectPHPExcel->getActiveSheet()->getStyle('B' . $currentRowNum . ':' . $end_column . $currentRowNum)
->getBorders()->getTop()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B' . $currentRowNum . ':' . $end_column . $currentRowNum)
->getBorders()->getLeft()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B' . $currentRowNum . ':' . $end_column . $currentRowNum)
->getBorders()->getRight()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B' . $currentRowNum . ':' . $end_column . $currentRowNum)
->getBorders()->getBottom()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$objectPHPExcel->getActiveSheet()->getStyle('B' . $currentRowNum . ':' . $end_column . $currentRowNum)
->getBorders()->getVertical()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
$n = $n + 1;
}

$objectPHPExcel->getActiveSheet()->getPageSetup()->setHorizontalCentered(true);
$objectPHPExcel->getActiveSheet()->getPageSetup()->setVerticalCentered(false);
ob_end_clean();
ob_start();
header('Content-Type : application/vnd.ms-excel');
header('Content-Disposition:attachment;filename="' . $data['title'] . '-' . date("Y年m月j日") . '.xls"');
$objWriter = \PHPExcel_IOFactory::createWriter($objectPHPExcel, 'Excel5');
$objWriter->save('php://output');
return true;
}

/**列的对应信息
* @return array
*/
function ABCinfo()
{
return [
1 => 'B',
2 => 'C',
3 => 'D',
4 => 'E',
5 => 'F',
6 => 'G',
7 => 'H',
8 => 'I',
9 => 'J',
10 => 'K',
11 => 'L',
12 => 'M',
13 => 'N',
14 => 'O',
15 => 'P',
16 => 'Q',
17 => 'R',
18 => 'S',
19 => 'T',
20 => 'U',
21 => 'V',
22 => 'W',
23 => 'X',
24 => 'Y',
25 => 'Z',
];
}

//示例数据
$data=[
['2017-08-01',10,20,2000,3000],
['2017-08-01',10,20,2000,3000],
['2017-08-01',10,20,2000,3000],
['2017-08-01',10,20,2000,3000],
['2017-08-01',10,20,2000,3000],
['2017-08-01',10,20,2000,3000],
['2017-08-01',10,20,2000,3000],
];
$outData['list']=$data;
$outData['title']="统计报表";//报表的标题
$outData['column']=['时间','发红包数','交易包数','发钱总额度','交易总额度'];//每列的命名
//调用输出报表方法
autoOutSheet($outData);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: