public function outputToExcelDemo(){
$header = [];
$style = [];
$info = [];
//1.获取数据
$outface = new Outface();
$resIntaerfaceData = $outface->getAllData('http://www.tp5.com/index.php/admin/index/index/table/comm_account'); //获取当前页面的所有数据
//2.提取表头数据
foreach ( $resIntaerfaceData['item'][0] as $key=>$value){
array_push($header,$key);
}
//3.提取主要数据
$data = $resIntaerfaceData['item'];
//4.提取文件信息
$info['name'] = $resIntaerfaceData['table'];
//5.调用处理函数
$objExcelAbout = new ExcelAbout();
$objExcelAbout->outputToExcel($data, $header, $style, $info);
}
/*
* 数据库数据导出为excel文件
* $data: 二维数组 , 主要数据内容
* $header:一维数组, 表头数据
* $style:一维数组, 表格样式
* $info: 一维数组, 文件信息
* */
public function outputToExcel($data, $header, $style, $info)
{
/*
* 数据重组(excel格式)
*/
$cellHeader = []; //表头重组后的数据
$coderArr = 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'
);
//表头重组
for ($i = 0, $n = count($header); $i < $n; $i++) {
if ($i < 26) {
$cellHeader[$coderArr[$i]] = $header[$i];
} else {
$key = $coderArr[(int)($i / 26) - 1] . $coderArr[(int)($i % 26)];
$cellHeader[$key] = $header[$i];
}
}
//数据重组
$cellData = [];
for ($j = 0, $m = count($data); $j < $m; $j++) {
$cellDataItem = [];
foreach ($cellHeader as $key => $value) {
$cellDataItem[$key] = $data[$j][$value];
}
array_push($cellData, $cellDataItem);
}
$this->excel = new \PHPExcel(); //PHPExcel实例化对象
/**
* 设置文件的一些属性,在xls文件——>属性——>详细信息里可以看到这些值,xml表格里是没有这些值的, 可以不要
**/
$this->excel->getProperties()//获得文件属性对象,给下文提供设置资源
->setCreator("jiekeliu")//设置文件的创建者
->setLastModifiedBy("jiekeliu")//设置最后修改者
->setTitle("接口数据转存Excel")//设置标题
->setSubject("数据转存")//设置主题
->setDescription("coder by jiekeliu")//设置备注
->setKeywords("office 2007 openxmlphp")//设置标记
->setCategory("test"); //设置类别
/**
* 设置表格的内容
**/
//设置表头
foreach ($cellHeader as $k => $v) {
$index = (string)($k . '3');
$this->excel->setActiveSheetIndex(0)->setCellValue($index, $v);
$this->excel->getActiveSheet()
->getStyle($index)
->getFont()
->setName('宋体')//样式:宋体
->setSize(20)//大小:20
->setBold(true); //加粗:是
$this->excel->getActiveSheet()
->getStyle($index)
->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //水平方向上对齐
$this->excel->getActiveSheet()
->getColumnDimension($k)
->setAutoSize(true); //内容自适应
}
//设置主体数据
for ($i = 0, $n = count($cellData); $i < $n; $i++) {
foreach ($cellData[$i] as $k => $v) {
$m = (string)($i + 4);
$index = (string)($k . $m);
$this->excel->setActiveSheetIndex(0)->setCellValue($index, $v);
$this->excel->getActiveSheet()
->getStyle($index)
->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //水平方向上对齐
}
}
$this->excel->getActiveSheet()//获取正在的活动表
->setTitle($info['name']); //设置表名称
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Content-type:application/vnd.ms-excel");
Header("Content-Disposition:attachment;filename=" . $info['name'] . ".xlsx ");
$objWriter = new PHPExcel_Writer_Excel2007($this->excel); //保存为2007版的excel文件
$objWriter->save('php://output');
exit;
}
}