thinkphp3.2中实现phpexcel导出带生成图片示例

 更新时间:2017年7月6日 23:49  点击:2001
小编给大家推荐的这篇文章介绍了thinkphp3.2中实现phpexcel导出带生成图片示例,非常实用,有兴趣的同学快来看看吧。

首先下载PHPEXCEL  下载地址:http://phpexcel.codeplex.com/        https://github.com/PHPOffice/PHPExcel

把Classes目录下的文件(PHPExcel.php和PHPExcel文件夹),放到ThinkPHP\Library\Org\Util目录下

PHPExcel.php  改名为 :PHPExcel.class.php

 

 代码如下复制代码

// 导出exl

 

  publicfunctionlook_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(0)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

 

    $objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

 

    $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

 

    $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

 

    $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

 

    $objPHPExcel->setActiveSheetIndex(0)->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(16);

 

    $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(80);

 

    $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);

 

    $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);

 

    $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);

 

    $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);

 

      

 

    // 垂直居中

 

    $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($dataas$k=>$v){

 

      $k+=2;

 

      $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(80);//照片高度

 

      $objDrawing[$k]->setWidth(80);//照片宽度

 

      /*设置图片要插入的单元格*/

 

      $objDrawing[$k]->setCoordinates('C'.$k);

 

      // 图片偏移距离

 

      $objDrawing[$k]->setOffsetX(12);

 

      $objDrawing[$k]->setOffsetY(12);

 

      $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(80);

 

        

 

    }

 

      

 

    $fileName='报价表'

 

    $date=date("Y-m-d",time());

 

    $fileName.="_{$date}.xls";

 

    $fileName= iconv("utf-8","gb2312",$fileName);

 

    //重命名表

 

    // $objPHPExcel->getActiveSheet()->setTitle('test');

 

    //设置活动单指数到第一个表,所以Excel打开这是第一个表

 

    $objPHPExcel->setActiveSheetIndex(0);

 

    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 

 

  }

 

水平居中,垂直居中,高度 等设置。注意放的位置,如果你放在末尾,那么是下一样生效。放到头部,第一行生效(上面代码是第一行生效,如果放到foreach里面就是下一行生效)。

import介绍。import("Org.Util.PHPExcel.Writer.Excel2007"); 文件位置:Org\Util\PHPExcel\Writer\Excel2007.class.php

图片地址一定要是本地。objDrawing[ objDrawing[k]->setPath('./Upload/'.$img['goods_thumb']); 图片位置:安装目录/Upload/xxx

 

 

php数组指针操作怎么用?本文详细解析了php数组指针操作,初学php的同学可以参考一下,非常有用。

数组指针的操作:

移动数组指针的操作:

Next() 向下 同时会获得当前元素的值。

Prev() 向上同时会获得当前元素的值。

End() 移动到最后一个元素单元 获得最后一个元素的值

Reset() 移动到第一个单元 获得第一个元素的值。

如果移动不成功,返回false。

参数都为需要操作的数组,并且是引用传递。

获得指针指向的元素的信息:

Key();//获得当前数组指针指向的元素下标

Current();//获得当前数组指针指向的元素

只获取数据 不移动指针

还有一个混合的操作:

即可以获得当前指针元素的信息(键值) 也 可以同时移动指针。

Each(); 获得当前元素的信息(键和值的信息),

移动指针:

我们有时可以利用each的特性,来达到遍历数组的目的:

应该利用循环结构 配合each完成。

配合条件:each到最后一个元素时,就会返回false。

List 函数:

List的限制:只针对索引数组起作用。

利用list 和each 完成遍历

但是使用完each遍历后 数组指针是不会reset的重置的,需要手动重置。

小编推荐的这篇文章介绍了PHP中include()与require()的区别说明,非常实用,有兴趣的同学快来看看吧。

require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。他们最根本的区别在于错误处理的方式不一样。

require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误

include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。

以下为补充:

1. include有返回值,而require没有。

2. include()包括并运行指定文件 在处理失败时include() 产生一个警告,被导入的程序代码都会被执行,而且这些程序在执行的时候会拥有和源文件中呼叫到include()语句的位置相同的变量范围。你可以导入同一个服务器中的静态页面。

3. include_once()的作用和include()是几乎相同的

唯一的差别在于include_once()会先检查要导入的档案是不是已经在该程序中的其它地方被导入过了,如果有的话就不会再次重复导入(这项功能有时候是很重要的,比方说要导入的里面宣告了一些你自行定义好的函数,那么如果在同一个程序重复导入这个文件,在第二次导入的时候便会发生错误讯息,因为PHP不允许相同名称的函数被重复宣告第二次)。

4. require()会将目标文件的内容读入,并且把自己本身代换成这些读入的内容 在处理失败时require() 则导致一个致命错。

这个读入并且代换的动作是在PHP引擎编译你的程序代码的时候发生的,而不是发生在PHP引擎开始执行编译好的程序代码的时候(PHP  3.0引擎的工作方式是编译一行执行一行,但是到了PHP 4.0以后就有所改变了,PHP  4.0是先把整个程序代码全部编译完成后,再将这些编译好的程序代码一次执行完毕,在编译的过程中不会执行任何程序代码)。require()通常来导入静态的内容,而include()则适合用导入动态的程序代码。

5. 如同include_once(),require_once()会先检查目标文件的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。

6. require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require。

7. require通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

8. include一般是放在流程控制的处理部分中PHP程序网页在读到include的文件时,才将它读进来。这种方式可以把程序执行时的流程简单化。

小编给大家推荐的这篇文章介绍了PHP最常用的正则表达式,非常实用,有兴趣的同学快来看看吧。

一、校验数字的表达式

数字:^[0-9]*$

n位的数字:^\d{n}$

至少n位的数字:^\d{n,}$

m-n位的数字:^\d{m,n}$

零和非零开头的数字:^(0|[1-9][0-9]*)$

非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$

正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$

有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

非零的负整数:^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$

非负整数:^\d+$ 或 ^[1-9]\d*|0$

非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

二、校验字符的表达式

汉字:^[\u4e00-\u9fa5]{0,}$

英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

长度为3-20的所有字符:^.{3,20}$

由26个英文字母组成的字符串:^[A-Za-z]+$

由26个大写英文字母组成的字符串:^[A-Z]+$

由26个小写英文字母组成的字符串:^[a-z]+$

由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$

中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

可以输入含有^%&',;=?$\”等字符:[^%&',;=?$\x22]+

禁止输入含有~的字符:[^~\x22]+

三、特殊需求表达式

Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$

国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

身份证号(15位、18位数字):^\d{15}|\d{18}$

短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$

强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

日期格式:^\d{4}-\d{1,2}-\d{1,2}

一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

钱的输入格式:

  • 有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00″, 和没有 “分” 的 “10000″ 和 “10,000″:^[1-9][0-9]*$

  • 这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$

  • 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$

  • 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$

  • 必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10″ 和 “10.2″ 是通过的:^[0-9]+(.[0-9]{2})?$

  • 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$

  • 这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

  • 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

  • 备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

中文字符的正则表达式:[\u4e00-\u9fa5]

双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))

空白行的正则表达式:\n\s*\r (可以用来删除空白行)

HTML标记的正则表达式:<(\s*?)[^>]*>.*?|<.*?> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)

中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)

IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)

[!--infotagslink--]

相关文章

  • PHP批量生成图片缩略图(1/5)

    这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
  • phpexcel导入xlsx文件报错xlsx is not recognised as an OLE file 怎么办

    phpexcel是一款php读写excel的插件了,小编有一个这样的功能要来实现,但是在导入xlsx时发现xlsx is not recognised as an OLE file 了,但是导入xls是没有问题了,碰到这种...2016-11-25
  • .net生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法

    这篇文章主要介绍了.net生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法 ,需要的朋友可以参考下...2021-09-22
  • PHP实例:EmailAddress生成图片程序

    把下面的文件保存为index.php <? /* MailX Managment System 0.8 Beta */ header("Content-type:image/png"); $mailaddress=$_GET['mailname']; $mailaddres...2016-11-25
  • php中使用PHPExcel操作excel(xls)文件

    PHPExcel是php的一个插件,它可以实现读取excel文件也就是xls文件了,下面我们就来看一个PHPExcel操作excel(xls)文件例子,希望能帮助到各位。 读取中文的xls、csv文件...2016-11-25
  • 基于phpexcel的php导出excel类,附注释和调用方法

    以前我们写过一个 HP通过链式操作将数据输出excel(csv)格式,最近项目又要导出excel,由于项目中要导出excel的地方太多,因此写个类便于管理使用。 以前我们写过一个PHP...2016-11-25
  • php生成图片文字混合图片的例子

    生成图片文字混合图片通常用于验证码了,下面来看一个关于php生成图片文字混合图片的例子,希望对大家会有所帮助. 例子一 图片合成文字 <?php $im = imagecreatet...2016-11-25
  • phpexcel读写xls文件实现程序

    文章介绍了关于phpexcel读写xls文件的方法代码,有需要了解的同学可以参考一下本教程哦。 代码如下 复制代码 <?php include_once('PHPExcel...2016-11-25
  • phpExcel导出大量数据出现内存溢出错误解决办法

    我们经常会使用phpExcel导入或导入xls文件,但是如果一次导出数据比较大就会出现内存溢出错误,下面我来总结解决办法。 phpExcel将读取的单元格信息保存在内存中,...2016-11-25
  • phpExcel类从mysql中将数据导出到xls乱码

    代码如下 复制代码 $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', iconv('gbk', 'utf-8', '中文Hello')) ->setCellValue('B...2016-11-25
  • phpStudy2013中php无法生成图片解决办法

    在php中生成图片是需要用到一个GD库的,默认情况下phpStudy都是打开了,但到了phpStudy2013之后GD库就像php默认安装一个不再开启这个功能了,要用户需配置一下。 phpSt...2016-11-25
  • ThinkPHP5.0版本和ThinkPHP3.2版本的区别

    本篇文章主要为大家介绍了ThinkPHP5.0版本和ThinkPHP3.2版本的区别,有兴趣的朋友就来看一看吧。 5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5...2017-07-06
  • PHPExcel导出2003和2007的excel文档功能的实例代码

    小编介绍的这篇文章写了PHPExcel导出2003和2007的excel文档功能的实例代码,有需要的同学可以参考一下 本文实例讲述了PHPExcel导出2003和2007的excel文档功能。分...2017-01-22
  • PHP中利用PHPExcel导出Excel示例

    在php中导出excel有一种最简单的方法就是导出csv文件,但要做到真正的导出excel文件我们可以借助于PHPExcel插件来实现。 PHPExcel是个很强大的PHP操作Excel的类库,...2016-11-25
  • php 利用phpexcel生成excel文档实例

    //ini_set("display_errors",1);//是否显示报错信息 //ini_set('include_path', ini_get('include_path').';D:\www.111cn.net\htdocs\lianxi\1.7.2\Classes');//设置...2016-11-25
  • PHPExcel合并与拆分单元格的方法

    这篇文章主要介绍了PHPExcel合并与拆分单元格的方法,涉及PHPExcel中setCellValue与mergeCells方法的使用技巧,需要的朋友可以参考下...2016-07-25
  • php的phpExcel类生成excel时列超过26大于Z时如何解决

    本文我们来分享用php的phpExcel类生成的excel当列名超过26列大于Z时的解决方法,供大家参考学习。 我们生成excel都会使用phpExcel类,这里就来给大家介绍在生成exce...2016-11-25
  • php 生成图片缩略图-大图生成小图片

    /* 函数:生成缩略图 MakeBuild("images/a.jpg","news/b.jpg","100"); 参数: echo $BuildFile; 原图 带路径 echo $newFile; 生成的缩略图...2016-11-25
  • thinkphp3.2中实现phpexcel导出带生成图片示例

    小编给大家推荐的这篇文章介绍了thinkphp3.2中实现phpexcel导出带生成图片示例,非常实用,有兴趣的同学快来看看吧。 首先下载PHPEXCEL 下载地址:http://phpexcel.co...2017-07-06
  • php生成图片缩略图功能示例

    小编给大家推荐的这篇文章介绍了php生成图片缩略图功能示例,非常实用,有兴趣的同学快看看吧 本文实例讲述了php生成图片缩略图功能。分享给大家供大家参考,具体如下:...2017-07-06