说明:PHPExcel导出代码是百度查出来的,但是忘了是哪个地址了,侵权删。但是数据库部分代码及html是自己写的。
<?php
include './lib/PHPExcel.php';
include './lib/PHPExcel/Writer/Excel2007.php';
include './MysqlDB.php';
//测试方法
function test(){
//这里是为了链接数据库进行内容查询,与下面的data=array二选一,都是测试数据,为了提供可导出数据的。
$config = array(
'dbname'=>'shop1'
);
$con = MysqlDB::getInstance($config);
$sql = "select * from shop_admin";
//获取你要导出的数据,你要获取的到数据库的数据
// $data = array(
// array('王城', '男', '18', '1997-03-13'),
// array('李飞虹', '男', '21', '1994-06-13'),
// array('王芸', '女', '18', '1997-03-13'),
// array('郭瑞', '男', '17', '1998-04-13'),
// array('李晓霞', '女', '19', '1996-06-13'),
// );
// //设置要导出excel的表头
// $fileheader= array('姓名', '性别', '年龄', '出生日期');
//处理数据
$data = $con->getAll($sql);
$fileheader= array('id', 'username', '密码', 'sort','create_time','udate_time');
exportExcel($data,'测试',$fileheader,'Sheet1');
}
//导出方法
function exportExcel($data, $savefile, $fileheader, $sheetname){
//或者excel5,用户输出.xls,不过貌似有bug,生成的excel有点问题,底部是空白,不过不影响查看。
//import("Org.Util.PHPExcel.Reader.Excel5");
//new一个PHPExcel类,或者说创建一个excel,tp中“\”不能掉
$excel = new PHPExcel();
if (is_null($savefile)) {
$savefile = time();
}else{
//防止中文命名,下载时ie9及其他情况下的文件名称乱码
iconv('UTF-8', 'GB2312', $savefile);
}
//设置excel属性
$objActSheet = $excel->getActiveSheet();
//根据有生成的excel多少列,$letter长度要大于等于这个值
$letter = array('A','B','C','D','E','F','F','G');
//设置当前的sheet
$excel->setActiveSheetIndex(0);
//设置sheet的name
$objActSheet->setTitle($sheetname);
//设置表头
for($i = 0;$i < count($fileheader);$i++) {
//单元宽度自适应,1.8.1版本phpexcel中文支持勉强可以,自适应后单独设置宽度无效
//$objActSheet->getColumnDimension("$letter[$i]")->setAutoSize(true);
//设置表头值,这里的setCellValue第二个参数不能使用iconv,否则excel中显示false
$objActSheet->setCellValue("$letter[$i]1",$fileheader[$i]);
//设置表头字体样式
$objActSheet->getStyle("$letter[$i]1")->getFont()->setName('微软雅黑');
//设置表头字体大小
$objActSheet->getStyle("$letter[$i]1")->getFont()->setSize(12);
//设置表头字体是否加粗
$objActSheet->getStyle("$letter[$i]1")->getFont()->setBold(true);
//设置表头文字垂直居中
$objActSheet->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//设置文字上下居中
$objActSheet->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
//设置表头外的文字垂直居中
$excel->setActiveSheetIndex(0)->getStyle($letter[$i])->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
//单独设置D列宽度为15
$objActSheet->getColumnDimension('D')->setWidth(15);
//这里$i初始值设置为2,$j初始值设置为0,自己体会原因
for ($i = 2;$i <= count($data) + 1;$i++) {
$j = 0;
foreach ($data[$i - 2] as $key=>$value) {
//不是图片时将数据加入到excel,这里数据库存的图片字段是img
$objActSheet->setCellValue("$letter[$j]$i",$value);
$j++;
}
//设置单元格高度,暂时没有找到统一设置高度方法
$objActSheet->getRowDimension($i)->setRowHeight('80px');
}
header('Content-Type: application/vnd.ms-excel');
//下载的excel文件名称,为Excel5,后缀为xls,不过影响似乎不大
header('Content-Disposition: attachment;filename="' . $savefile . '.xlsx"');
header('Cache-Control: max-age=0');
// 用户下载excel
$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$objWriter->save('php://output');
// 保存excel在服务器上
//$objWriter = new PHPExcel_Writer_Excel2007($excel);
//或者$objWriter = new PHPExcel_Writer_Excel5($excel);
//$objWriter->save("保存的文件地址/".$savefile);
}
//调用test测试方法
test();
其中PHPExcel文件需要去官网下载 https://github.com/PHPOffice/PHPExcel 点击打开链接,需要用到的东西是里面Classes
以上代码可以直接执行,但是如果需要在页面点击按钮调用的话也写了个简单的例子
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
</head>
<body>
<div>TODO write content</div>
<button type="button"id="goExcel">生成</button>
</body>
</html>
<script>
$(function(){
$("#goExcel").bind("click",function(){
$(location).attr('href', './demo.php');
});
})
</script>