手机版

php中excel导出方法示例

时间:2021-09-01 来源:互联网 编辑:宝哥软件园 浏览:

一、通用出口方式

在网上导出excel有很多方法。在crm或oa系统中导出excel是很常见的。做过这个功能的人都知道,它的主要操作是循环数据列表,然后将数据逐个添加到固定单元格中。只要做一次,然后只要复制修改相关代码,其他地方的导出功能就完成了。

但是有两个问题:

1.列表数据字段修改时,需要修改大量代码,维护困难,修改不舒服;

2.导出功能多次出现时,需要在很多地方复制大量冗余代码,看着不舒服;

因此,有必要统一导出excel的方法。使用时,只需导入数据的表头、表头字段名、数据列表、数据表名即可导出excel。

第二,使用通用的导出方法

如下图所示,只要传入四个参数,就可以完成导出,使用和维护变得简单多了。

好了,目标明确了,代码就实现了。

显然,要实现这个功能,最大的困难是在excel中根据单个数据的索引和表头字段的顺序,自动计算出每条数据中每个字段的坐标值(如A1、B3)。

然后我们来分析一下excel的单元格坐标。从A1开始,纵向增加数字的值,横向增加字母的值。当水平字母变成Z时,下一个字母是AA,然后是AB,ZZ,AAA.

这样,我们就知道纵向坐标很简单,可以根据每一条数据的索引值来计算。难的是水平坐标。如何计算它们?仔细分析水平坐标后,我们可以发现它是一种类似于26的字母数字系统。如果A被认为是0,那么Z代表25。但是这个数和我们常见的十六进制、八进制数不一样,因为当Z进位时,下一个数是AA而不是BA。在常见的十进制系统中,如十进制9,它变成10而不是00;十六进制0xF进位变为0x10,而不是0x00。

因此,可以参考二进制转换的算法,然后进行修改,得到excel水平坐标的计算方法(10到伪26):

//AAA将公共静态函数转换为AAA ($ dec) {if ($ dec 0)返回“”;$ y=$ dec % 26$x=下限($ dec/26);返回self : toaa($ x-1)。加拿大人权委员会(65日元);}最后,附上完整的代码

框架是Yii2,excel导出组件是moonlandsoft/yii2-phpexcel。

其他类似的

//导出xlspublic静态函数导出xls($ array){ set _ time _ limit(0);包括(网址:到(@ vendor/moon land/phpexcel/phpexcel。PHP’);包括(网址:到(' @厂商/月球土地/PHPExcel/PHPExcel/Writer/excel 2007。PHP’);$ titles=$ array[' titles '];$ fields=$ array[' fields '];$ list=$ array[' list '];$ name=$ array[' name '];$ count=count($ titles);$ keys=[];//A=chr(65)foreach($ titles as $ k=$ v){ $ keys[]=self : toaa($ k);} $ objPHPExcel=new \ PHPExcel();$ objWriter=new \ PHPExcel _ Writer _ excel 2007($ objPHPExcel);$ objPHPExcel-setActiveSheetIndex(0);$ activeSheet=$ objPHPExcel-getActiveSheet();$ activeSheet-setTitle($ name);$ activeSheet-getStyle(' a 1: { $ keys[$ count-1]} 1 ')-getAlignment()-设置水平(\ PHPExcel _ Style _ alignment : horizontal _ CENTER);$ ActiveSheet-合并单元格(' a 1: { $ keys[$ count-1]} 1 ');$activeSheet-setCellValue('A1 ',$ name);//设置标题,样式foreach($ titles as $ key=$ title){ $ activeSheet-setCellValue($ keys[$ key]).2 ',$ title);$ activeSheet-get column dimension($ keys[$ key])-设置宽度(20);$ activeSheet-getrow维度(($ key 1))-setrow高度(18);} $ I=3;foreach($ list as $ item){ foreach($ key as $ k=$ v){ $ val=isset($ item[$ field[$ k]])?$ item[$ field[$ k]].' : ' ';$ activeSheet-setCellValue($ v . $ I,$ val);} $ I;} $fileName=$name ._' .日期(' Y _ m _ d _ His '). xlsx ';标头(“缓存控制:公共”);标头(' Pragma : public ');标题('内容类型:应用程序/vnd。ms-excel ');标题('内容-处置:附件;文件名='。iconv('utf-8 ',' GB2312//TRANSLIT ',$ FIlename));标题('内容类型:应用程序/八位字节流');ob _ clean();ob _ start();$ Objwriter-save(' PHP ://输出');ob _ end _ flush();}//AAA转换公共静态函数ToAa($ 12月){ if($ 12月0日)返回"";$ y=$ dec % 26$x=下限($ dec/26);返回self : toaa(x-1美元).加拿大人权委员会(65日元);}三。导出结果示例

导出结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

版权声明:php中excel导出方法示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。