zonglonglong

关于导出后出错的问题

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 it
        if ( ! isset($mimes[$extension])){
            $mime = \'application/octet-stream\';
        }else{
            $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
        }
        // Generate the server headers
        if (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();

分类:

技术点:

相关文章: