使用PHPExcel实现导出excel

说明: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>


猜你喜欢

转载自blog.csdn.net/u012607784/article/details/80283688