zoukankan      html  css  js  c++  java
  • 完整的thinphp+phpexcel实现excel报表的输出(有图有效果)

    准备工作:
    1.下载phpexcel1.7.6类包;
    2.解压至TP框架的ThinkPHPVendor目录下,改类包文件夹名为PHPExcel176,目录结构如下图;
           
    编写代码(以一个订单汇总数据为例):
      1. 创建数据库及表;
      2. 创建tp项目,配置项目的数据库连接,这些基本的就不说了;
      3. 在项目的LibAction下创建一个新的类文件ExportStatisticsAction.class.php,然后在  index方法中实现excel导出;
      4. 导出方法的步骤:
        ①查询数据
        ②导入phpexcel类库
        ③创建excel对象并设置excel对象的属性
        ④设置excel的行列样式(字体、高宽、颜色、边框、合并等)
        ⑤绘制报表表头
        ⑥将查询数据写入excel
        ⑦设置excel的sheet的名称
        ⑧设置excel报表打开后初始的sheet
        ⑨设置输出的excel的头参数及文件名
        ⑩调用创建excel的方法生成excel文件
    代码如下:

    [php] view plaincopy
     
    1. <?php  
    2. /** 
    3.  * Created by lonm.shi. 
    4.  * Date: 2012-02-09 
    5.  * Time: 下午4:54 
    6.  * To change this template use File | Settings | File Templates. 
    7.  */  
    8.   
    9. class ExportStatisticsAction extends Action {   
    10.     public function index(){  
    11.         $model= D("OrdersView");  
    12.         $OrdersData= $model->select();  //查询数据得到$OrdersData二维数组  
    13.   
    14.         vendor("PHPExcel176.PHPExcel");  
    15.   
    16.         // Create new PHPExcel object  
    17.         $objPHPExcel = new PHPExcel();  
    18.         // Set properties  
    19.         $objPHPExcel->getProperties()->setCreator("ctos")  
    20.             ->setLastModifiedBy("ctos")  
    21.             ->setTitle("Office 2007 XLSX Test Document")  
    22.             ->setSubject("Office 2007 XLSX Test Document")  
    23.             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")  
    24.             ->setKeywords("office 2007 openxml php")  
    25.             ->setCategory("Test result file");  
    26.   
    27.         //set width  
    28.         $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);  
    29.         $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);  
    30.         $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);  
    31.         $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);  
    32.         $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(50);  
    33.         $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10);  
    34.         $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);  
    35.         $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12);  
    36.         $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);  
    37.         $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30);  
    38.   
    39.         //设置行高度  
    40.         $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);  
    41.   
    42.         $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);  
    43.   
    44.         //set font size bold  
    45.         $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);  
    46.         $objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getFont()->setBold(true);  
    47.   
    48.         $objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  
    49.         $objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
    50.   
    51.         //设置水平居中  
    52.         $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);  
    53.         $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
    54.         $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
    55.         $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
    56.         $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
    57.         $objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
    58.         $objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
    59.         $objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
    60.   
    61.         //合并cell  
    62.         $objPHPExcel->getActiveSheet()->mergeCells('A1:J1');  
    63.   
    64.         // set table header content  
    65.         $objPHPExcel->setActiveSheetIndex(0)  
    66.             ->setCellValue('A1', '订单数据汇总  时间:'.date('Y-m-d H:i:s'))  
    67.             ->setCellValue('A2', '订单ID')  
    68.             ->setCellValue('B2', '下单人')  
    69.             ->setCellValue('C2', '客户名称')  
    70.             ->setCellValue('D2', '下单时间')  
    71.             ->setCellValue('E2', '需求机型')  
    72.             ->setCellValue('F2', '需求数量')  
    73.             ->setCellValue('G2', '需求交期')  
    74.             ->setCellValue('H2', '确认BOM料号')  
    75.             ->setCellValue('I2', 'PMC确认交期')  
    76.             ->setCellValue('J2', 'PMC交货备注');  
    77.   
    78.         // Miscellaneous glyphs, UTF-8  
    79.         for($i=0;$i<count($OrdersData)-1;$i++){  
    80.             $objPHPExcel->getActiveSheet(0)->setCellValue('A'.($i+3), $OrdersData[$i]['id']);  
    81.             $objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $OrdersData[$i]['realname']);  
    82.             $objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $OrdersData[$i]['customer_name']);  
    83.             $objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), toDate($OrdersData[$i]['create_time'])); //这里调用了common.php的时间戳转换函数  
    84.             $objPHPExcel->getActiveSheet(0)->setCellValue('E'.($i+3), $OrdersData[$i]['require_product']);  
    85.             $objPHPExcel->getActiveSheet(0)->setCellValue('F'.($i+3), $OrdersData[$i]['require_count']);  
    86.             $objPHPExcel->getActiveSheet(0)->setCellValue('G'.($i+3), $OrdersData[$i]['require_time']);  
    87.             $objPHPExcel->getActiveSheet(0)->setCellValue('H'.($i+3), $OrdersData[$i]['product_bom_encoding']);  
    88.             $objPHPExcel->getActiveSheet(0)->setCellValue('I'.($i+3), $OrdersData[$i]['delivery_time']);  
    89.             $objPHPExcel->getActiveSheet(0)->setCellValue('J'.($i+3), $OrdersData[$i]['delivery_memo']);  
    90.             $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  
    91.             $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
    92.             $objPHPExcel->getActiveSheet()->getRowDimension($i+3)->setRowHeight(16);  
    93.         }  
    94.   
    95.   
    96.         //  sheet命名  
    97.         $objPHPExcel->getActiveSheet()->setTitle('订单汇总表');  
    98.   
    99.   
    100.         // Set active sheet index to the first sheet, so Excel opens this as the first sheet  
    101.         $objPHPExcel->setActiveSheetIndex(0);  
    102.   
    103.   
    104.         // excel头参数  
    105.         header('Content-Type: application/vnd.ms-excel');  
    106.         header('Content-Disposition: attachment;filename="订单汇总表('.date('Ymd-His').').xls"');  //日期为文件名后缀  
    107.         header('Cache-Control: max-age=0');  
    108.   
    109.         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //excel5为xls格式,excel2007为xlsx格式  
    110.         $objWriter->save('php://output');  
    111.   
    112.     }  
    113. }  


    5.调用导出方法直接  http://项目/index.php/ExportStatistics/index,项目中调用直接__APP__/ExportStatistics/index,生成的报表是下载方式来保存。phpexcel1.7.6没有发现什么编码问题,速度也很快,注意导出的方法中不能有任何页面输出信息或调试信息,否则导出的excel会提示格式不对。效果如下:
    导出报表

  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/baocheng/p/4108283.html
Copyright © 2011-2022 走看看