一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ThinkPHP中用PHPExcel导出excel文件数据例子

时间:2022-06-24 18:46:42 编辑:袖梨 来源:一聚教程网

下面给出步骤:

1.准备:自己制作一个生成的excel参考的模板文件,template.xls,我的模板为

在这个模板里面,你想在哪个位置显示什么样式就设置什么样式,到时候相对应位置 查出来的数据就会自动套用样式,比如说标题大小,背景颜色,用函数等,都会自动套用,就不用在后台代码控制那么麻烦了,这个也是选择用模板生成excel原因。
附:
1.某列用条件格式等高级一点的操作应该也是可以的,没有试。

2.大家要注意一点,我要输出的数据是从第4行开始填充的,但是最好留出一行空的,比如说第5行,并不仅仅为了查出来的数据和统计总数分开好看,也是为了方便在模板里面设置函数,比如说上面的D6,用了SUM(D4:D5)函数,我是想统计D这一列的数据,但是在D6函数不能仅仅是=SUM(D4)吧,等生成数据的时候就到达不了效果,查出来的数据就是统计D4这个了,所以记得留出一行

2.下载PHPExcel文件,网上一百度就出来了,下载下来解压后目录结构如下:(附件中也提供有下载,附件中的PHPExcel是经过我的压缩,把多余的东西删除了的)

psb (3)

结构目录的说明,

1.下载下来的文件夹有3个文件夹和3个txt的说明文档(说明文档就不说了):

Classes文件夹:这个文件夹是PHPExcel的主要包,也就是说只要把这个文件夹拷贝到项目,引用就可以了。这个文件夹下面有PHPExcel.php文件和PHPExcel文件夹,引用的时候用PHPEx.php就可以了。
Documentation文件夹:说明文档,略过。
Tests文件夹:这个文件夹虽然不用导入到项目,但是里面满满的都是例子啊,都是给我们用的。我测试用的就是里面01simple-download-xls.php和30template.php这两个例子的代码结合在一起,分别是下载xls和加载模板的。
3.新建一个项目,导入ThinkPHP,配置好index.php,配置文件,在Public文件夹下面放我们的excel.模板文件。特别的,在ThinkPHP下面的Extend文件夹下新建文件夹Vendor,把PHPExcel复制到其根目录下。因为ThinkPHP中用PHPExcel不能通过

require './include/phpexcel/Classes/PHPExcel.php';这样加载,只能是用Vendor()加载第三方类库方式加进去。(这个很重要,我之前一直不成功原因就是在这里)

psb (2)

5.我的项目目录如下:

psb (3)psb (4)

6.在IndexAction中的index()内写如下方法

代码如下 复制代码
class IndexAction extends Action {
/**导出的excel表格 */
function index() {
//将需要导出到excel的数据查询出来
$mdata = M ( 'a' );
$data = $mdata->select ();

//开始生成excel内容
/** 加载IOFactory包 */
Vendor ( 'Excel.Classes.PHPExcel' ); //Vendor路径的写法参考ThinkPHP文档

/** 错误信息 */
error_reporting ( E_ALL );

$objReader = PHPExcel_IOFactory::createReader ( 'Excel5' ); //在内存中建一个excel2003操作
//加载需要读取的模板放在内存的excel中,路径一定要对啊,我在index.php中用了define(ROOT, dirname(__FILE__));所以下面这样写
$objPHPExcel = $objReader->load ( ROOT . "/Pulice/template/template.xls" );

//设置excel格式
//$objPHPExcel->getActiveSheet ()->setCellValue ( 'B1', '统计表' ); //在B位置显示标题,可以动态添加,这个例子中我是在母版中写死了的
$objPHPExcel->getActiveSheet ()->setCellValue ( 'E1', date ( 'Y-m-d H:i:s', time () ) ); //在E位置显示时间

/**将数据用循环放进表格相对应位置S*/
$baseRow = 5; //数据从5-1行开始往下输出,具体数据看你的模板了

foreach ( $data as $r => $dataRow ) {
$row = $baseRow + $r;
$objPHPExcel->getActiveSheet ()->insertNewRowBefore ( $row, 1 ); //插入新的行

//将数据填充到相对应的位置
$objPHPExcel->getActiveSheet ()->setCellValue ( 'A' . $row, $r + 1 ); //序号
$objPHPExcel->getActiveSheet ()->setCellValue ( 'B' . $row, $dataRow ['codenum'] ); //编号
$objPHPExcel->getActiveSheet ()->setCellValue ( 'C' . $row, $dataRow ['name'] ); //物品名称
$objPHPExcel->getActiveSheet ()->setCellValue ( 'D' . $row, $dataRow ['price'] ); //单价
$objPHPExcel->getActiveSheet ()->setCellValue ( 'E' . $row, $dataRow ['quantity'] ); //数量
}
$objPHPExcel->getActiveSheet ()->removeRow ( $baseRow - 1, 1 ); //作用:把最顶上面的那一空白行去掉
//---------上面的代码是从30template.php(加载模板)中copy下来自己改成我想要————————————————

// ----------下面的代码是从01simple-download-xls.php(下载excel表格)中copy下来的-------
//将得到的数据导出到excel中提供给用户下载

// 将输出重新定向到客户端浏览器的(Excel5)
$filename = date ( 'Y-m-d', time () );
header ( 'Content-Type: application/vnd.ms-excel' );
header ( 'Content-Disposition: attachment;filename="' . $filename . '.xls"' ); //要下载的excel文件的文件名,这设置了用当前时间作为文件名
header ( 'Cache-Control: max-age=0' );

$objWriter = PHPExcel_IOFactory::createWriter ( $objPHPExcel, 'Excel5' ); //在内存中准备一个excel2003文件
$objWriter->save ( 'php://output' );
exit ();
}
}

7.在模板页调用上面的方法就可以了,比如

当然啦,想根据条件来导出内容就看你怎么查数据库咯。


写最后:当然啦,我是做好了才截图上来的,所以还没有完善,还要处理一下问题滴,比如说乱码 啊(看你下载下来的有没有乱码咯)。

热门栏目