thinkphp3.2与phpexcel带图片生成 完美案例
thinkphp3.2与phpexcel完美案例
// 导出exl
public function look_down(){
$id = I('get.id');
$m = M ('offer_goods');
$where['offer_id'] = $id;
$data = $m->field('goods_id,goods_sn,goods_name,barcode,goods_type,price')->select(); // 导出Exl
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.Worksheet.Drawing");
import("Org.Util.PHPExcel.Writer.Excel2007");
$objPHPExcel = new \PHPExcel();
$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel); $objActSheet = $objPHPExcel->getActiveSheet(); // 水平居中(位置很重要,建议在最初始位置)
$objPHPExcel->setActiveSheetIndex()->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex()->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex()->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex()->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex()->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objActSheet->setCellValue('A1', '商品货号');
$objActSheet->setCellValue('B1', '商品名称');
$objActSheet->setCellValue('C1', '商品图');
$objActSheet->setCellValue('D1', '商品条码');
$objActSheet->setCellValue('E1', '商品属性');
$objActSheet->setCellValue('F1', '报价(港币)');
// 设置个表格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth();
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth();
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth();
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth();
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth();
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(); // 垂直居中
$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); // 处理表数据
foreach($data as $k=>$v){
$k +=;
$objActSheet->setCellValue('A'.$k, $v['goods_sn']);
$objActSheet->setCellValue('B'.$k, $v['goods_name']); $img = M('goods')->where('goods_id = '.$v['goods_id'])->field('goods_thumb')->find();
// 图片生成
$objDrawing[$k] = new \PHPExcel_Worksheet_Drawing();
$objDrawing[$k]->setPath('./Upload/'.$img['goods_thumb']);
// 设置宽度高度
$objDrawing[$k]->setHeight();//照片高度
$objDrawing[$k]->setWidth(); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing[$k]->setCoordinates('C'.$k);
// 图片偏移距离
$objDrawing[$k]->setOffsetX();
$objDrawing[$k]->setOffsetY();
$objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet()); // 表格内容
$objActSheet->setCellValue('D'.$k, $v['barcode']);
$objActSheet->setCellValue('E'.$k, $v['goods_type']);
$objActSheet->setCellValue('F'.$k, $v['price']); // 表格高度
$objActSheet->getRowDimension($k)->setRowHeight(); } $fileName = '报价表';
$date = date("Y-m-d",time());
$fileName .= "_{$date}.xls"; $fileName = iconv("utf-8", "gb2312", $fileName);
//重命名表
// $objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex();
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
// END
}
注意事项:
1.phpexcel下载地址:http://phpexcel.codeplex.com/
2.把Classes目录下的文件(PHPExcel.php和PHPExcel文件夹),放到ThinkPHP\Library\Org\Util目录下(放到其他目录下也可以,只需要能加载类都没有问题)。并把PHPExcel.php 改成PHPExcel.class.php(这一步很重要,你需要加载的php文件都要改成xxx.class.php才行)
3.手动导入类(请注意"\"符号)
import("Org.Util.PHPExcel");
$objPHPExcel = new \PHPExcel();
(本人试过自动加载类,比较麻烦,因为phpexcel的文件都需要加上“namespace Org\Util;”,所以干脆就选择手动加载类)
4.水平居中,垂直居中,高度 等设置。注意放的位置,如果你放在末尾,那么是下一样生效。放到头部,第一行生效(上面代码是第一行生效,如果放到foreach里面就是下一行生效)。
5.import介绍。import("Org.Util.PHPExcel.Writer.Excel2007"); 文件位置:Org\Util\PHPExcel\Writer\Excel2007.class.php
6.图片地址一定要是本地。
$objDrawing[$k]->setPath('./Upload/'.$img['goods_thumb']); 图片位置:安装目录/Upload/xxx
容易出现的问题:
1.'class xxx not found' 类导入不成功,可以先在xxx.class.php 放个function ss(){} 然后输出下$xx = new xxx; $xx->ss()输出下看结果。
分析地址:http://www.thinkphp.cn/code/2112.html
thinkphp3.2与phpexcel带图片生成 完美案例的更多相关文章
- thinkphp3.2与phpexcel基础生成
public function ff(){ import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.Workshee ...
- Java 用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- 【Java】用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- C# Qrcode生成二维码支持中文,带图片,带文字 2015-01-22 15:11 616人阅读 评论(1) 收藏
1.下载Qrcode库源码,下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library 2.打开源码时,部分类库 ...
- Qrcode生成二维码支持中文,带图片,带文字
1.下载Qrcode库源码, 下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library2.打开源码时, 部分类 ...
- phpexcel导出带生成图片完美案例
// 导出exl public function look_down(){ $id = I('get.id'); $m = M ('offer_goods'); $where['offer_id'] ...
- C#Qrcode生成二维码支持中文,带图片,带文字
C#Qrcode生成二维码支持中文带图片的操作请看二楼的帖子,当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/2057 ...
- Flutter生成带图片的二维码
现在的APP中经常需要用自己的信息生成一个二维码给别人扫,下面就介绍一下Flutter中怎么生成一个带图片的二维码. 需要用到的插件qr_flutter 首先在 pubspec.yaml 文件中添加以 ...
- Xcode6.1标准Framework静态库制作方法。工程转Framework,静态库加xib和图片。完美解决方案。
http://www.cocoachina.com/bbs/read.php?tid-282490.html Xcode6.1标准Framework静态库制作方法.工程转Framework,静态库加x ...
随机推荐
- Postgresql 导出表结构信息
项目用了Postgresql 数据库,项目组要出表结构的文档,手写太麻烦,想用slq脚本导出一份.查了一番资料,似乎没有多好的方法.dump方式导出的脚本太乱,没法直接写在word文档里.只能自己写s ...
- Linux 使用iftop命令查看服务器流量
简介 iftop是类似于linux下面top的实时流量监控工具. iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等,详细的将会在后面的使用参数中说明. 安装 # yu ...
- [转]jQuery的each方法的几种常用的用法
下面提一下jQuery的each方法的几种常用的用法 复制代码 代码如下: var arr = [ "one", "two", "three&quo ...
- codevs1022 覆盖[Hungary 二分图最大匹配]
codevs1022 覆盖 有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积. 输入描述 ...
- 转: Protobuf 的 proto3 与 proto2 的区别
Protobuf 的 proto3 与 proto2 的区别 On 2015-07-17 19:16:00 By Soli Protobuf 的 proto3 与 proto2 的区别 这是一 ...
- dpctl 工具使用
一.在建立Mininet的时候,需要设置listenPort,这样可以在其它命令行里设置flow net = Mininet( topo=topo, listenPort=6634 ) 二.常见用法m ...
- PAT 1040. 有几个PAT(25)
字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问 ...
- 基于xml的Spring多数据源配置和使用
上一篇讲了<基于注解的Spring多数据源配置和使用>,通过在类或者方法上添加@DataSource注解就可以指定某个数据源.这种方式的优点是控制粒度细,也更灵活. 但是当有些时候项目分模 ...
- 如何动态在文档中加入<script></script>写入大段js
<script language="javascript"> var script = document.createElement("script" ...
- JS组件系列——封装自己的JS组件,你也可以
前言:之前分享了那么多bootstrap组件的使用经验,这篇博主打算研究下JS组件的扩展和封装,我们来感受下JQuery为我们提供$.Extend的神奇,看看我们怎么自定义自己的组件,比如我们想扩展一 ...