PHPExcel(1)-- 导出功能

PHPExcel导出功能

Web开发的时候,经常会遇到需要将数据库中某些表单导出到excel文件中的问题。我在运用yii框架做web开发过程中,发现有个应用为PHPExcel,该应用能够实现excel文件的导入导出,刚好能够满足需要的要求。一下是自己应用 PHPExcel 做数据导出的记录。

1、首先下载该应用,github链接为:https://github.com/PHPOffice/PHPExcel

2、在 protected/extensions 路径下建立 PHPexcel 目录,将下载的 PHPExcel 文件解压。

3、将解压后的classes目录下所有内容,拷贝放到protected/extensions/PHPexcel 目录下

4、在控制器文件 XXX.Controller.php 中,先引入相关文件

<?php
Yii::import('application.extensions.*');
require_once('PHPExcel/PHPExcel.php');
require_once 'PHPExcel/PHPExcel/Writer/Excel5.php'; // 用于其他低版本xls
require_once 'PHPExcel/PHPExcel/Writer/Excel2007.php'; // 用于 excel-2007 格式
...

5、编写方法Download(以下是自己开发过程中的部分代码)

public function actionDownload($option)
    {
        // Create new PHPExcel object
        $objPHPExcel = new PHPExcel();

        // Set properties
        $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
            ->setLastModifiedBy("Maarten Balliauw")
            ->setTitle("Office 2007 XLSX Test Document")
            ->setSubject("Office 2007 XLSX Test Document")
            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
            ->setKeywords("office 2007 openxml php")
            ->setCategory("Test result file");
        //$objPHPExcel->getActiveSheet()->mergeCells('A1:G1');
        //$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        //$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
        //$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
        //$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20);
        $subjects = Subject::model()->findAll("headteacher=:name", array(":name" => Yii::app()->session['name'])); //找出相关课程组
        foreach ($subjects as $item1) {
            $criteria = new CDbCriteria; // 创建CDbCriteria对象
            $criteria->addCondition("suid = :id");
            $criteria->params[':id'] = $item1->id;
            $criteria->select = '*';
            //按照返回参数搜索选题信息
            if ($option == 1) {
                $criteria->order = 'Cid';
                //$criteria -> limit = 3;
                $b = Selectcourse::model()->findAll($criteria);
                $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('A1', '选题情况')
                    ->setCellValue('A2', '学生ID')
                    ->setCellValue('B2', '学生姓名')
                    ->setCellValue('C2', '课程名称')
                    ->setCellValue('D2', '题目名称')
                    ->setCellValue('E2', '选题时间');

                $count = 2;
                foreach ($b as $item2) {
                    $count += 1;
                    $l1 = "A" . "$count";
                    $l2 = "B" . "$count";
                    $l3 = "C" . "$count";
                    $l4 = "D" . "$count";
                    $l5 = "E" . "$count";

                    $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValue($l1, $item2->sid)
                        ->setCellValue($l2, Student::model()->find(array('condition' => 'id=' . $item2->sid,))->name)
                        ->setCellValue($l3, $item1->name)
                        ->setCellValue($l4, Course::model()->find(array('condition' => 'Cid=' . $item2->cid,))->Cname)
                        ->setCellValue($l5, $item2->apply_time);

                }

            }
            if ($option == 2) {
                $criteria->order = 'sid';
                //$criteria -> limit = 3;
                $b = Selectcourse::model()->findAll($criteria);
                $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('A1', '选题情况')
                    ->setCellValue('A2', '学生ID')
                    ->setCellValue('B2', '学生姓名')
                    ->setCellValue('C2', '课程名称')
                    ->setCellValue('D2', '题目名称')
                    ->setCellValue('E2', '选题时间');

                $count = 2;
                foreach ($b as $item2) {
                    $count += 1;
                    $l1 = "A" . "$count";
                    $l2 = "B" . "$count";
                    $l3 = "C" . "$count";
                    $l4 = "D" . "$count";
                    $l5 = "E" . "$count";

                    $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValue($l1, $item2->sid)
                        ->setCellValue($l2, Student::model()->find(array('condition' => 'id=' . $item2->sid,))->name)
                        ->setCellValue($l3, $item1->name)
                        ->setCellValue($l4, Course::model()->find(array('condition' => 'Cid=' . $item2->cid,))->Cname)
                        ->setCellValue($l5, $item2->apply_time);

                }
            }

        }
        // Rename sheet
        $objPHPExcel->getActiveSheet()->setTitle('学生选题信息');

        // Set active sheet index to the first sheet, so Excel opens this as the first sheet
        $objPHPExcel->setActiveSheetIndex(0);

        // Redirect output to a client’s web browser (Excel5)
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="学生选题信息.xls"');
        header('Cache-Control: max-age=0');

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
    }

6、不要忘了在用户访问控制里面添加动作download

public function accessRules(){
array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions' => array('download'),
                'roles' => array('...'),
            ),
}

7、在对应的view文件中,编写链接

<?php echo CHtml::link(CHtml::encode("》导出Excel表格"), array('download','option' => $option)); ?>

8、完成将数据以excel文件导出。

以上是自己对PHPExcel的一个应用,因为是初次接触,用的也不熟练,难免有一些不当,望大家指出,共同进步!

时间: 2024-10-17 20:29:38

PHPExcel(1)-- 导出功能的相关文章

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc

Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选型java .net均有apache.poi 可用,php使用phpexcel1.8.01 1.3. 需要解决的问题2 1.4. 自定义类库atiexcel2 1.5. Excel导出的流程细节--导出表头2 1.6. Excel导出的流程细节--导出数据2 1.7. Phpexcel与poi的差异

laravel框架excel 的导入导出功能

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该项目的GitHub地址是:https://github.com/Maatwebsite/Laravel-Excel. 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录下使用Co

Laravel Excel 实现 Excel-CSV 文件导入导出功能

Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https://github.com/Maatwebsite/Laravel-Excel 安装 我们就按照GIthub上的readme文件进行安装吧. composer require "maatwebsite/excel:~2.1.0" 在 config/app.php 中注册服务提供者到 provid

PHPExcel导入导出

慕课教程 -- PHPExcel导入导出 一.PHPExcel导出操作 1.快速入门 <?php #找到当前脚本的路径 $dir = dirname(__FILE__); #引入PHPExcel插件文件 require $dir."/excel/PHPExcel.php"; #实例化PHPExcel类 $objPHPExcel = new PHPExcel(); #获得当前活动sheet的操作对象 $objSheet = $objPHPExcel->getActiveShe

利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序 HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据,难免会含有方便操作的 主键ID这列的记录.现在项目需要在easyUI的DataGrid中显示的数据能全部导出Excel,包括DataGrid中的中文标题,其他的统统不 要. 完成该功能所需的工具和环境:Newtonsoft.Json序列化和反序列化类库.easyUI前端UI框架.HttpHandl

excel导出功能优化

先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中. 3. 将这个VO类的数据集写入到EXCEL中. 缺点: 1.每次做一个功能的excel导出需要定义一个vo类,并且vo类不可随便变更. 2. 从数据库查询到结果集不能直接输出到excel,需要二次遍历写入到vo中. 3. excel导出的顺序必须与vo定义的字段顺序一致,并且输出vo中所有的字段

写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接查询

世面上的API Viewer已经不少了,但给VBA用的几乎没有.我自己写了一个Windows API Viewer,提供VBA语句的导出功能,并可以提供两万多个API的MSDN链接查询. 环境需求:Windows 7.1 SP1及以上操作系统,安装.Net 4.5.2及以上框架. 下载地址:API Viewer v1.1 下载