Yii框架中使用PHPExcel导出Excel文件

最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法:

1、首先在config\main.php中添加对PHPExcel的引用,我的方式是这样:


1

2

3

4

5

6

7

8

// autoloading model and component classes

    ‘import‘=>array(

        

        ‘application.models.*‘,

        ‘application.components.*‘,

        ‘application.extensions.phpexcel.*‘,

           

    ),

另外也有人用components 这个配置,但是我的有问题,所以就用上面的方法。

2、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public static function Register() {

        $functions = spl_autoload_functions();

            foreach $functions as  $function)

                spl_autoload_unregister($function);

            $functions array_merge(array(array(‘PHPExcel_Autoloader‘,‘Load‘)),$functions);

            foreach $functions as $function)

                $x = spl_autoload_register($function);

            return $x;

   

    }    //    function Register()

上面的函数中,注释掉的是原有的代码。

3、下面的代码是输出Excel,以及一些常用的属性设置,在你的controller中:

    public  function actionExport()

    {

        $objectPHPExcel new PHPExcel();

        $objectPHPExcel->setActiveSheetIndex(0);

   

        $page_size = 52;

        //数据的取出

        $model = Yii::app()->session[‘printdata‘];

   

        $dataProvider $model->search();

   

        $dataProvider->setPagination(false);

        $data $dataProvider->getData();

        $count $dataProvider->getTotalItemCount();

        //总页数的算出

        $page_count = (int)($count/$page_size) +1;

        $current_page = 0;

   

        $n = 0;

        foreach $data as $product )

        {

            if $n $page_size === 0 )

            {

                $current_page $current_page +1;

   

                //报表头的输出

                $objectPHPExcel->getActiveSheet()->mergeCells(‘B1:G1‘);

                $objectPHPExcel->getActiveSheet()->setCellValue(‘B1‘,‘产品信息表‘);

   

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘B2‘,‘产品信息表‘);

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘B2‘,‘产品信息表‘);

                $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->setActiveSheetIndex(0)->setCellValue(‘G2‘,‘第‘.$current_page.‘/‘.$page_count.‘页‘);

                $objectPHPExcel->setActiveSheetIndex(0)->getStyle(‘G2‘)

                    ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

                   

                //表格头的输出

                $objectPHPExcel->getActiveSheet()->getColumnDimension(‘A‘)->setWidth(5);

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘B3‘,‘编号‘);

                $objectPHPExcel->getActiveSheet()->getColumnDimension(‘B‘)->setWidth(6.5);

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘C3‘,‘名称‘);

                $objectPHPExcel->getActiveSheet()->getColumnDimension(‘C‘)->setWidth(17);

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘D3‘,‘生产厂家‘);

                $objectPHPExcel->getActiveSheet()->getColumnDimension(‘D‘)->setWidth(22);

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘E3‘,‘单位‘);

                $objectPHPExcel->getActiveSheet()->getColumnDimension(‘E‘)->setWidth(15);

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘F3‘,‘单价‘);

                $objectPHPExcel->getActiveSheet()->getColumnDimension(‘F‘)->setWidth(15);

                $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(‘G3‘,‘在库数‘);

                $objectPHPExcel->getActiveSheet()->getColumnDimension(‘G‘)->setWidth(15);

                   

                //设置居中

                $objectPHPExcel->getActiveSheet()->getStyle(‘B3:G3‘)

                    ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

   

                //设置边框

                $objectPHPExcel->getActiveSheet()->getStyle(‘B3:G3‘ )

                    ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

                $objectPHPExcel->getActiveSheet()->getStyle(‘B3:G3‘ )

                    ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

                $objectPHPExcel->getActiveSheet()->getStyle(‘B3:G3‘ )

                    ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

                $objectPHPExcel->getActiveSheet()->getStyle(‘B3:G3‘ )

                    ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

                $objectPHPExcel->getActiveSheet()->getStyle(‘B3:G3‘ )

                    ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

   

                //设置颜色

                $objectPHPExcel->getActiveSheet()->getStyle(‘B3:G3‘)->getFill()

                    ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB(‘FF66CCCC‘);

                   

            }

            //明细的输出

            $objectPHPExcel->getActiveSheet()->setCellValue(‘B‘.($n+4) ,$product->id);

            $objectPHPExcel->getActiveSheet()->setCellValue(‘C‘.($n+4) ,$product->product_name);

            $objectPHPExcel->getActiveSheet()->setCellValue(‘D‘.($n+4) ,$product->product_agent->name);

            $objectPHPExcel->getActiveSheet()->setCellValue(‘E‘.($n+4) ,$product->unit);

            $objectPHPExcel->getActiveSheet()->setCellValue(‘F‘.($n+4) ,$product->unit_price);

            $objectPHPExcel->getActiveSheet()->setCellValue(‘G‘.($n+4) ,$product->library_count);

            //设置边框

            $currentRowNum $n+4;

            $objectPHPExcel->getActiveSheet()->getStyle(‘B‘.($n+4).‘:G‘.$currentRowNum )

                    ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

            $objectPHPExcel->getActiveSheet()->getStyle(‘B‘.($n+4).‘:G‘.$currentRowNum )

                    ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

            $objectPHPExcel->getActiveSheet()->getStyle(‘B‘.($n+4).‘:G‘.$currentRowNum )

                    ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

            $objectPHPExcel->getActiveSheet()->getStyle(‘B‘.($n+4).‘:G‘.$currentRowNum )

                    ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

            $objectPHPExcel->getActiveSheet()->getStyle(‘B‘.($n+4).‘:G‘.$currentRowNum )

                    ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

            $n $n +1;    

        }

   

        //设置分页显示

        //$objectPHPExcel->getActiveSheet()->setBreak( ‘I55‘ , PHPExcel_Worksheet::BREAK_ROW );

        //$objectPHPExcel->getActiveSheet()->setBreak( ‘I10‘ , PHPExcel_Worksheet::BREAK_COLUMN );

        $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="‘.‘产品信息表-‘.date("Y年m月j日").‘.xls"‘);

        $objWriter= PHPExcel_IOFactory::createWriter($objectPHPExcel,‘Excel5‘);

        $objWriter->save(‘php://output‘);

代码执行后,会直接生成Excel,并提示下载或打开。

时间: 2024-08-03 15:15:35

Yii框架中使用PHPExcel导出Excel文件的相关文章

PHPExcel导出Excel文件

error_reporting(0); require_once 'phpexcel/PHPExcel.php'; require_once 'phpexcel/PHPExcel/IOFactory.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setCreator("BillHong") ->setLastModifiedBy("BillHong")//创建

在Yii框架中使用PHPExcel

PHPExcel是一个比较好用的php读取excel文件的类库,今天遇到了在yii中如何加载PHPExcel类文件的问题,因为Yii的autoload机制是安装类名去找文件,即文件名就是相应的类名,而PHPExcel的类文件命名方式则是:dir_dir_classname.php,即文件名把文件的目录名都记录了,这种命名方式yii肯定识别不了.怎么办? 其实PHPExcel也有自己的autoload方法(PHPExcel_Autoloader::load() ),通过查看源码发现它也是通过spl

dev中的gridview导出excel文件

源代码: private void ExportExcel(string fileName, DevExpress.XtraGrid.Views.Grid.GridView myDGV) { string saveFileName = ""; SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.DefaultExt = "xlsx"; saveDialog.Filter = "Excel

php中使用PHPExcel操作excel(xls)文件

读取中文的xls.csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/ 1.读取xls文件内容  代码如下 复制代码 <?php     //向xls文件写入内容     error_reporting(E_ALL);     ini_set('display_errors', TRUE);        include 'Classes/PHPExcel.php';                include

Java web中不同浏览器间导出Excel文件名称乱码问题解决方案

问题描述: 对于不同浏览器存在对中文编码格式问题,从而在导出Excel文件时,中文文件名出现乱码的情况,即在程序中给要导出的文件指定一个中文名字时,在浏览器上出现的下载框中的文件名出现了乱码,解决如下: 解决方案: [java] view plain copy Date dt=new Date();//如果不需要格式,可直接用dt,dt就是当前系统时间 DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//设置显示格

PHPExcel导出excel

如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312: $yourStr = mb_convert_encoding("gb2312", "UTF-8", $yourStr); 总结 php导出Excel php导入Excel PhpExcel使用说明 PhpExcel使用手册 1:第一推荐无比风骚的PHPExcel,官方网站: http://www.codeplex.com/PHPExcel 导入

PHP从数据库导出EXCEL文件

参考博客链接:http://www.cnblogs.com/huangcong/p/3687665.html 我的程序代码 原生导出Excel文件 <?phpheader('Content-type: text/html; charset=utf-8');header("Content-type:application/vnd.ms-excel");header("Content-Disposition:filename=test.xls"); $conn =

PHP导出excel文件,第一步先实现PHP模板导出不带数据

今天继续研究PHP导出excel文件,把复杂的事情简单化,一步步实现功能,首先实现模板文件的导出,随后再实现写入数据后导出,最终实现功能,这是基本思路.中间可以加一步,先自己写入数据导出试试,随后再数据库导入.我首先把程序提交到自建的eubexcel.php文件,选用post提交,导出excel文件的程序在这个页面里书写,参考昨天下载的PHPExcel-1.8组件里的参考文档,先部署导出excel,具体代码如下 <?php error_reporting(E_ALL);ini_set('disp

Java中导入、导出Excel

一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中,很多时候需要实现导入.导出Excel的应用. 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel 下面我就分别讲解一下如何使用这两个技术实现导入.导出Excel 二.使用Jakarta POI导入.导出Excel Jakarta POI