thinkphp3.2.3 excel导出,下载文件,包含图片
关于导出后出错的问题
https://segmentfault.com/q/1010000005330214
https://blog.csdn.net/ohmygirl/article/details/6907946
我遇到了文件损坏,经过百度,大神说是缓冲区的问题,在导出函数的第一行加上
ob_end_clean();
相关介绍
https://blog.csdn.net/soonfly/article/details/52103795
扩展下载链接
https://pan.baidu.com/s/1yPzl7dKZ-CT6DNi9SUt6kg
本文章摘取了一下文献
http://www.thinkphp.cn/code/1257.html
thinkphp3.2和phpexcel导入
http://www.thinkphp.cn/code/2124.html
thinkphp3.2和phpexcel导入,出现PHPExcel_RichText object解决办法
http://www.thinkphp.cn/code/2143.html
thinkphp3.2和phpexcel导出带生成图片完美案例
http://www.thinkphp.cn/code/2112.html
第一步:下载PHPEXCEL文件(这个可以百度下载)
第二步:解压这个文件,把这里全部的文件复制到 ThinkPHP/Library/Org/Util
这个文件夹下面(如图所示), 并把 PHPExcel.php 这个文件改名为 PHPExcel.class.php
第三步:如何使用
通过上面的代码,已经成功导出一下excel文件
生成excel的代码如下和上面图片类似
public function imgexcel(){ ob_end_clean();import("Org.Util.PHPExcel");$excel = new \PHPExcel();$excel->getProperties()->setCreator("JAMES")->setLastModifiedBy("JAMES")->setTitle("zltrans")->setSubject("Dorder")->setDescription("Dorder List")->setKeywords("Dorder")->setCategory("Test result file");$excel->setActiveSheetIndex(0)->setCellValue("A1","hello")->setCellValue("A3","龙龙")->setCellValue("B2","你好")->setCellValue("B4","世界");import("Org.Util.PHPExcel.IOFactory");$excelWriter = \PHPExcel_IOFactory::createWriter($excel,'Excel2007');//转码文件名,防止汉字乱码$filename = iconv("utf-8","gb2312","guagua龙.xlsx");$excelWriter->save($filename);//使用下载方法一的时候注释$this->force_download($filename);//使用下载方法一的时候注释
}
下载方法一:
header('Content-Type: application/vnd.ms-excel');header("Content-Disposition: attachment;filename=\"$filename\"");//文件名header('Cache-Control: max-age=0');$objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007');$objWriter->save('php://output'); //文件通过浏览器下载
下载方法二:
导出到了服务器上,如果需要下载到客户端的话如下:
//下面两个是下载需要的函数 public function force_download($filename){if ($filename == ''){return FALSE;}if (FALSE === strpos($filename, '.')){return FALSE;}$x = explode('.', $filename);$extension = end($x);$mimes =$this->getMimes();// Set a default mime if we can't find itif ( ! isset($mimes[$extension])){$mime = 'application/octet-stream';}else{$mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];}// Generate the server headersif (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE){header('Content-Type: "'.$mime.'"');header('Content-Disposition: attachment; filename="'.$filename.'"');header('Expires: 0');header('Cache-Control: must-revalidate, post-check=0, pre-check=0');header("Content-Transfer-Encoding: binary");header('Pragma: public');header("Content-Length: ".filesize($filename));}else{header('Content-Type: "'.$mime.'"');header('Content-Disposition: attachment; filename="'.$filename.'"');header("Content-Transfer-Encoding: binary");header('Expires: 0');header('Pragma: no-cache');header("Content-Length: ".filesize($filename));}readfile($filename);}private function getMimes(){return $mimes = array( 'hqx' => 'application/mac-binhex40','cpt' => 'application/mac-compactpro','csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),'bin' => 'application/macbinary','dms' => 'application/octet-stream','lha' => 'application/octet-stream','lzh' => 'application/octet-stream','exe' => array('application/octet-stream', 'application/x-msdownload'),'class' => 'application/octet-stream','psd' => 'application/x-photoshop','so' => 'application/octet-stream','sea' => 'application/octet-stream','dll' => 'application/octet-stream','oda' => 'application/oda','pdf' => array('application/pdf', 'application/x-download'),'ai' => 'application/postscript','eps' => 'application/postscript','ps' => 'application/postscript','smi' => 'application/smil','smil' => 'application/smil','mif' => 'application/vnd.mif','xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),'wbxml' => 'application/wbxml','wmlc' => 'application/wmlc','dcr' => 'application/x-director','dir' => 'application/x-director','dxr' => 'application/x-director','dvi' => 'application/x-dvi','gtar' => 'application/x-gtar','gz' => 'application/x-gzip','php' => 'application/x-httpd-php','php4' => 'application/x-httpd-php','php3' => 'application/x-httpd-php','phtml' => 'application/x-httpd-php','phps' => 'application/x-httpd-php-source','js' => 'application/x-javascript','swf' => 'application/x-shockwave-flash','sit' => 'application/x-stuffit','tar' => 'application/x-tar','tgz' => array('application/x-tar', 'application/x-gzip-compressed'),'xhtml' => 'application/xhtml+xml','xht' => 'application/xhtml+xml','zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),'mid' => 'audio/midi','midi' => 'audio/midi','mpga' => 'audio/mpeg','mp2' => 'audio/mpeg','mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),'aif' => 'audio/x-aiff','aiff' => 'audio/x-aiff','aifc' => 'audio/x-aiff','ram' => 'audio/x-pn-realaudio','rm' => 'audio/x-pn-realaudio','rpm' => 'audio/x-pn-realaudio-plugin','ra' => 'audio/x-realaudio','rv' => 'video/vnd.rn-realvideo','wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'),'bmp' => array('image/bmp', 'image/x-windows-bmp'),'gif' => 'image/gif','jpeg' => array('image/jpeg', 'image/pjpeg'),'jpg' => array('image/jpeg', 'image/pjpeg'),'jpe' => array('image/jpeg', 'image/pjpeg'),'png' => array('image/png', 'image/x-png'),'tiff' => 'image/tiff','tif' => 'image/tiff','css' => 'text/css','html' => 'text/html','htm' => 'text/html','shtml' => 'text/html','txt' => 'text/plain','text' => 'text/plain','log' => array('text/plain', 'text/x-log'),'rtx' => 'text/richtext','rtf' => 'text/rtf','xml' => 'text/xml','xsl' => 'text/xml','mpeg' => 'video/mpeg','mpg' => 'video/mpeg','mpe' => 'video/mpeg','qt' => 'video/quicktime','mov' => 'video/quicktime','avi' => 'video/x-msvideo','movie' => 'video/x-sgi-movie','doc' => 'application/msword','docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'),'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),'word' => array('application/msword', 'application/octet-stream'),'xl' => 'application/excel','eml' => 'message/rfc822','json' => array('application/json', 'text/json'));}
下面是导出excel带图片的代码
这个代码的使用环境是图片全部是网络图片,需要下载下来,然后在将图片放进excel,如果是本地图片可以直接169行参数写完整的图片路径即可
以下代码是写在thingphp3.2的function.php里面的
1 /** 2 * 判断文件夹是否存在,不存在则创建,支持递归试的多目录创建 3 * @param [type] $dir [description] 4 * @return boolean [description] 5 */ 6 function z_is_dir($dir=''){ 7 $dir = "./excelimgs"; 8 if(empty($dir)){ 9 return false; 10 }else{ 11 if(is_dir($dir)){ 12 return true; 13 }else{ 14 $dir = iconv("UTF-8","GBK",$dir); 15 return mkdir($dir,0777,true); 16 } 17 } 18 } 19 /** 20 * 下载图片到指定目录 21 * @return [type] [description] 22 */ 23 function imgdown($url='',$dir=''){ 24 if(!preg_match('/\/([^\/]+\.[a-z]{3,4})$/i',$url,$matches)){ 25 return false; 26 } 27 //判断目录有效性 28 if(!z_is_dir($dir)){ 29 return false; 30 } 31 32 $image_name = strToLower($matches[1]); 33 $ch = curl_init ($url); 34 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 35 curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); 36 $img = curl_exec ($ch); 37 curl_close ($ch); 38 $fp = fopen($dir.$image_name,'w');//保存的文件名称用的是链接里面的名称 39 // dump($image_name);die; 40 fwrite($fp, $img); 41 fclose($fp); 42 } 43 /** 44 * excel导出 图片文件 45 * @return [type] [description] 46 */ 47 function look_down($data='',$dir=''){ 48 //以下是数据格式 49 // $data[] = array( 50 // 'addtime'=>' 2018/03/05 12:23', 51 // 'address'=>'平顶山卫东区新华路南环路明珠花园', 52 // 'car_code'=>'豫D38880', 53 // 'shenhe'=>'小明', 54 // 'zhidan'=>'小强', 55 // 'price'=>'5', 56 // 'img'=>array( 57 // '图片链接http://p6t.clouddn.com/5acdb30.png', 58 // '图片链接http://p6t.clouddn.com/5acdb30.png', 59 // '图片链接http://p6t.clouddn.com/5acdb30.png', 60 // '图片链接http://p6t.clouddn.com/5acdb30.png', 61 // '图片链接http://p6t.clouddn.com/5acdb30.png' 62 // ) 63 // ); 64 // $data[] = array( 65 // 'addtime'=>' 2018/08/05 12:23', 66 // 'address'=>'郑州市卫东区新华路南环路明珠花园', 67 // 'car_code'=>'豫D38X80', 68 // 'shenhe'=>'小红', 69 // 'zhidan'=>'小刚', 70 // 'price'=>'5', 71 // 'img'=>array( 72 // '图片链接http://p6t.clouddn.com/5acdb30.png', 73 // '图片链接http://p6t.clouddn.com/5acdb30.png', 74 // '图片链接http://p6t.clouddn.com/5acdb30.png', 75 // '图片链接http://p6t.clouddn.com/5acdb30.png', 76 // '图片链接http://p6t.clouddn.com/5acdb30.png' 77 // ) 78 // ); 79 if(empty($data) || empty($dir)){ 80 E('数据或者路径不能为空;数据格式请进入本方法看注释;路径需要根目录开始的路径,如:./excelimgs/'); 81 return false; 82 } 83 //将所有包含的图片下载下来 84 foreach ($data as $k => $v) { 85 $imgs = $v['img']; 86 $img_str = null; 87 foreach ($imgs as $kk => $vv) { 88 $this->imgdown($vv,$dir); 89 //在下载的过程中将文件名单独摘出来,用于生成excel的时候要的文件名 90 $img_str[] = substr($vv,strripos($vv,"/")+1); 91 } 92 $data[$k]['img_str'] = $img_str; 93 } 94 95 // 导出Exl 96 import("Org.Util.PHPExcel"); 97 import("Org.Util.PHPExcel.Worksheet.Drawing"); 98 import("Org.Util.PHPExcel.Writer.Excel2007"); 99 $objPHPExcel = new \PHPExcel(); 100 101 $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel); 102 103 $objActSheet = $objPHPExcel->getActiveSheet(); 104 105 // 水平居中(位置很重要,建议在最初始位置) 106 $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 107 $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 108 $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 109 $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 110 $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 111 $objPHPExcel->setActiveSheetIndex(0)->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 112 $objPHPExcel->setActiveSheetIndex(0)->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 113 $objPHPExcel->setActiveSheetIndex(0)->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 114 $objPHPExcel->setActiveSheetIndex(0)->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 115 $objPHPExcel->setActiveSheetIndex(0)->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 116 $objPHPExcel->setActiveSheetIndex(0)->getStyle('K')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 117 118 $objActSheet->setCellValue('A1', '时间'); 119 $objActSheet->setCellValue('B1', '地点'); 120 $objActSheet->setCellValue('C1', '车牌号'); 121 $objActSheet->setCellValue('D1', '制单人'); 122 $objActSheet->setCellValue('E1', '审核人'); 123 $objActSheet->setCellValue('F1', '奖励金'); 124 $objActSheet->setCellValue('G1', '图片'); 125 $objActSheet->setCellValue('H1', '图片'); 126 $objActSheet->setCellValue('I1', '图片'); 127 $objActSheet->setCellValue('J1', '图片'); 128 $objActSheet->setCellValue('K1', '图片'); 129 // 设置个表格宽度 130 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20); 131 $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(80); 132 $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30); 133 $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20); 134 $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20); 135 $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20); 136 $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(30); 137 $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(30); 138 $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(30); 139 $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30); 140 $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(30); 141 142 // 垂直居中 143 $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 144 $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 145 $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 146 $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 147 $objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 148 $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 149 $objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 150 $objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 151 $objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 152 $objPHPExcel->getActiveSheet()->getStyle('J')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 153 $objPHPExcel->getActiveSheet()->getStyle('K')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); 154 155 foreach($data as $k=>$v){ 156 $k +=2; 157 // 表格内容 158 $objActSheet->setCellValue('A'.$k, $v['addtime']); 159 $objActSheet->setCellValue('B'.$k, $v['address']); 160 $objActSheet->setCellValue('C'.$k, $v['car_code']); 161 $objActSheet->setCellValue('D'.$k, $v['shenhe']); 162 $objActSheet->setCellValue('E'.$k, $v['zhidan']); 163 $objActSheet->setCellValue('F'.$k, $v['price']."元"); 164 $lies = array('G','H','I','J','K'); 165 $lies_index = 0; 166 foreach ($v['img_str'] as $kk => $vv) { 167 // 图片生成 168 $objDrawing[$k] = new \PHPExcel_Worksheet_Drawing(); 169 $objDrawing[$k]->setPath($dir.$vv); 170 // 设置宽度高度 171 $objDrawing[$k]->setHeight(80);//照片高度 172 $objDrawing[$k]->setWidth(80); //照片宽度 173 /*设置图片要插入的单元格*/ 174 $objDrawing[$k]->setCoordinates($lies[$lies_index].$k); 175 // 图片偏移距离 176 $objDrawing[$k]->setOffsetX(0); 177 $objDrawing[$k]->setOffsetY(0); 178 $objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet()); 179 $lies_index++; 180 } 181 182 183 // 表格高度 184 $objActSheet->getRowDimension($k)->setRowHeight(80); 185 186 } 187 188 $fileName = '报价表'; 189 $date = date("Y-m-d",time()); 190 $fileName .= "_{$date}.xls"; 191 $fileName = iconv("utf-8", "gb2312", $fileName); 192 //重命名表 193 // $objPHPExcel->getActiveSheet()->setTitle('test'); 194 //设置活动单指数到第一个表,所以Excel打开这是第一个表 195 $objPHPExcel->setActiveSheetIndex(0); 196 header('Content-Type: application/vnd.ms-excel'); 197 header("Content-Disposition: attachment;filename=\"$fileName\""); 198 header('Cache-Control: max-age=0'); 199 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 200 $objWriter->save('php://output'); //文件通过浏览器下载 201 // END 202 }
如果文件损坏,可以在导出的方法的第一行加入ob_end_clean();
转载于:https://www.cnblogs.com/zonglonglong/p/8819989.html
thinkphp3.2.3 excel导出,下载文件,包含图片相关推荐
- easyexcel结合zip 导出压缩文件(包含多个excel)
easyexcel结合zip 导出压缩文件(包含多个excel) 直接上代码- 分批次查询处理示例代码 int limit = 1;int pageNum = 500;ByteArrayOutputS ...
- SpringBoot打成jar包部署,Excel模板下载文件遇到的问题
问题一. 读取resource 目录下文件时出现路径找不到 在本机测试都很顺利,当打包jar文件放到服务器上测试的时候发现了类似下面的异常信息: java.nio.file.NoSuchFileExc ...
- Python爬虫之scrapy下载文件和图片
Python爬虫之scrapy下载文件和图片 一:pipeline 二:使用scrapy下载图片 2.1 创建scrapy项目 1.2 创建爬虫 1.3 配置文件设置 1.4 编写启动文件 1.5 爬 ...
- 爬虫框架Scrapy(10)下载文件与图片
文章目录 下载文件与图片 (一)FilesPipeline 和 ImagesPipeline 1. FilesPipeline 使用说明 2. ImagesPipeline 使用说明 (二)项目实例: ...
- [转]使用URLConnection下载文件或图片并保存到本地
Code import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; ...
- linux 导出 excel文件名乱码,excel导出,文件名称中文乱码问题 · 大腿的博客
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 记录一个excel导出遇见的中文名称的问题 接到项目需要有excel的导入导出功能,基于poi实现还是挺简单的,文件的导 ...
- SpringBoot打成jar包部署,Excel模板下载文件损坏,提示恢复问题处理
Spring Boot 静态资源Excel模板文件下载遇到的坑 问题描述: 使用spring boot,在resource/static目录下,有Excel模板文件, 需要提供给用户下载,用于数据的导 ...
- java完成excel导出下载
废话不多说,直接上代码! 一.添加依赖 <!-- excel导出相关依赖 --><dependency><groupId>org.apache.poi</gr ...
- java excel api 下载文件_java excel api实现输出EXCEL文件下载
java excel api实现输出EXCEL文件下载 [// 下载本地文件String fileName = 苹果知识库授权网点整理汇总副本20130210.xls.toString(); // 文 ...
最新文章
- ORACLE 配置文件
- 程序员到项目经理:从内而外的提升不看后悔去吧
- Django(part14)--模板的继承
- 'parent.relativePath' points at no local POM
- crontab 执行时间与系统时间不一致问题解决
- Deploy Oracle 10.2.0.5 DataGuard on Red Hat Enterprise Linux 6.4
- C++自学14:关系运算符(bool/std::boolalpha)
- 全向轮机器人运动模型及应用分析(图片版)
- 【pwnable.kr】passcode
- 8-ORACLE四种关闭方式
- 玩转大数据系列之一:数据采集与同步
- 基于 Multiple Teacher Single Student 框架的多领域对话模型
- html静态页面作跳转
- php 源码 flash,Flash小游戏PHP源码
- linux 监听 ipv6,zabbix 监控 ipv6
- 你值得拥有的Mac PS滤镜插件和特效处理软件合集,不要错过!
- CSR8811A12-ICXR-R蓝牙芯片
- Efficient Net_V2
- IE浏览器设置UserAgent
- 音频合并的步骤有哪些
热门文章
- Linux创建文件的五种方法,Linux常用命令 - 五种创建文件命令详解
- linux java jstat_JDK自带工具之jstat
- 基于ARM的LCD(800*480)触摸屏实现音频、视频播放、图像显示功能
- html自动跳转源码,两款404页面自动跳转源码html
- L2-028 秀恩爱分得快 (25分) C++
- java ajax面试题_几道Web/Ajax的笔试题
- java就业前景_2020年java就业前景
- gta4 oracle_中关村在线 - 画质设定保守些:MSAAx2/x4区别不大_DIY新手说明书15:CPU不再是GTA5瓶颈?...
- Houdini如何创建置换贴图?
- openpyxl模块安装及使用