注册  找回密码

兴化400生活网

搜索
查看: 474|回复: 5
打印 上一主题 下一主题

PHP利用Spreadsheet_Excel_Writer输出多SHEET EXCEL表

[复制链接]

0

主题

0

好友

0

积分

新手上路

Rank: 1

铜板
0
金币
0
在线时间
184 小时
注册时间
2004-7-22
帖子
4122

原创一级勋章 尉级勋章

1#
发表于 2006-12-13 20:53 |只看该作者
<>辛苦辛苦,恩现在解放了,报表离恩远去了<IMG src="http://www.400.com.cn/images/Emotions/12.gif"></P>
回复

使用道具 举报

0

主题

0

好友

187

积分

注册会员

Rank: 2

铜板
187
金币
0
在线时间
72 小时
注册时间
2004-9-17
帖子
511
2#
发表于 2006-12-5 23:48 |只看该作者
<>寒那,明天我要倒腾10几个报表,想换单位了,累</P>
回复

使用道具 举报

4

主题

10

好友

337

积分

注册会员

Rank: 2

铜板
337
金币
0
在线时间
672 小时
注册时间
2004-9-14
帖子
679
3#
发表于 2006-12-5 13:44 |只看该作者
好东东```先借走``不打借条````
回复

使用道具 举报

0

主题

0

好友

0

积分

新手上路

Rank: 1

铜板
0
金币
0
在线时间
184 小时
注册时间
2004-7-22
帖子
4122

原创一级勋章 尉级勋章

4#
发表于 2006-12-4 17:49 |只看该作者
<IMG src="http://400.com.cn/images/Emotions/5.gif">感谢楼主共享<BR>多表的还没用到。<BR>单表以前都用fopen写,有机会试pera套件。
回复

使用道具 举报

0

主题

0

好友

187

积分

注册会员

Rank: 2

铜板
187
金币
0
在线时间
72 小时
注册时间
2004-9-17
帖子
511
5#
发表于 2006-12-4 22:52 |只看该作者
<>fopen是输出&#92;t制表符吧,哪个好象不是正统的EXCEL格式,只是EXCEL兼容打开那样的文件.</P><>有点象用WORD打开格RTF文件的意思</P>
回复

使用道具 举报

0

主题

0

好友

187

积分

注册会员

Rank: 2

铜板
187
金币
0
在线时间
72 小时
注册时间
2004-9-17
帖子
511
6#
发表于 2006-12-4 17:07 |只看该作者

PHP利用Spreadsheet_Excel_Writer输出多SHEET EXCEL表

<H4 class=TextColor1 id=subjcns!820CAFC159F45D65!141 style="MARGIN-BOTTOM: 0px">HP利用Spreadsheet_Excel_Writer输出多SHEET EXCEL表</H4><><FONT size=3>公司制作数据报表需要按合作伙伴名分SHEET来制作数据报表以前用过DELPHI来输出EXCEL数据.DELPHI处理EXCEL是通过COM或者OLE来处理的,当数据量很大的时候效果不是太理想,而且还要求系统必须安装过OFFICE软件.考虑到输出效率问题,想寻求一个高效的解决方法,于是再网上搜索PHP下的输出类.无意中发现PEAR下的Spreadsheet_Excel_Writer包好象不错,它是完全从EXCEL文件格式出发,不依赖与OFFICE软件的,在LINUX下也能输出正统的XLS格式文件.于是迅速配置PEAR本地环境,在线安装了Spreadsheet_Excel_Writer支持包及其OLE依赖包配置完后,利用网PEAR手册中的示例代码测试了一下环境,一切OK,正常输出EXCEL文件了下面贴出我写的处理EXCEL输出的代码,大家共享一下:</FONT></P><><FONT color=#ee1111>&lt;?php</FONT><FONT color=#ff0000><BR></FONT><FONT color=#3cc43c size=3>require_once("Spreadsheet/Excel/Writer.php");<BR>function txt2xls($arr,$fxls,$type=0){<BR>&nbsp;$time1=microtime_float();<BR>&nbsp;if ($type==0){//第三个参数为0则下载EXCEL文件,不为0则保存EXCEL在服务器上。<BR>&nbsp;&nbsp;$workbook = new Spreadsheet_Excel_Writer();<BR>&nbsp;&nbsp;$workbook-&gt;send($fxls);<BR>&nbsp;}else{<BR>&nbsp;&nbsp;$workbook = new Spreadsheet_Excel_Writer($fxls);<BR>&nbsp;}<BR>&nbsp;$format=&amp; $workbook-&gt;addFormat(array(&#39;size&#39; =&gt; 10));<BR>&nbsp;$index=array();<BR>&nbsp;for($i=0;$i&lt;count($arr);$i++){//循环处理数组,处理每一行数据<BR>&nbsp;&nbsp;//每一行先判断合作伙伴,然后查找该合作伙伴的SHEET表,再写入数据。<BR>&nbsp;&nbsp;$arr_temp=explode(&#39;,&#39;,$arr[$i]);//数据格式:2006-11-01,辽一网,liao1_com_pcode1,510,sdq,vip<BR>&nbsp;&nbsp;$vipname=strtoupper($arr_temp[1]);//$arr_temp[1]为合作伙伴<BR>&nbsp;&nbsp;$index[$vipname][$arr_temp[2]]=$arr_temp[2];//建立标识索引,为了数据完整,这里只好牺牲一下性能了<BR>&nbsp;&nbsp;$exp=explode(&#39;|&#39;,$temp[$vipname][$arr_temp[0]][$arr_temp[2]]);<BR>&nbsp;&nbsp;if (trim($vipname)!=&#39;&#39;)<BR>&nbsp;&nbsp;&nbsp;$temp[$vipname][$arr_temp[0]][$arr_temp[2]]=strval($exp[0]+$arr_temp[3])."|".$arr_temp[4];&nbsp;<BR>&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;//print_r($temp);<BR>&nbsp;while(list($vipname,$data)=each($temp)){//处理每一个sheet数据<BR>&nbsp;&nbsp;//echo $vipname."=";print_r($date);echo "&lt;br&gt;";<BR>&nbsp;&nbsp;$arr_sheet=$workbook-&gt;_parser-&gt;_ext_sheets;//返回所有的SHEET名数组&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;if (!isset($arr_sheet[$vipname])){//如果没添加过SHEET<BR>&nbsp;&nbsp;&nbsp;&nbsp;$worksheet=&amp;$workbook-&gt;addWorksheet($vipname);<BR>&nbsp;&nbsp;&nbsp;}else{//已经添加过<BR>&nbsp;&nbsp;&nbsp;&nbsp;$worksheets=$workbook-&gt;sheets();<BR>&nbsp;&nbsp;&nbsp;&nbsp;$worksheet=&amp;$worksheets[($arr_sheet[$vipname])];<BR>&nbsp;&nbsp;&nbsp;&nbsp;$worksheet-&gt;activate();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;$worksheet-&gt;writeString(0,0,"日期",$format);<BR>&nbsp;&nbsp;$worksheet-&gt;writeString(0,1,"总计",$format);<BR>&nbsp;&nbsp;$i=0;<BR>&nbsp;&nbsp;while(list($date,$arr_sid)=each($data)){<BR>&nbsp;&nbsp;&nbsp;$i++;<BR>&nbsp;&nbsp;&nbsp;$worksheet-&gt;writeString($i,0,$date,$format);//处理1+$i行<BR>&nbsp;&nbsp;&nbsp;$j=0;<BR>&nbsp;&nbsp;&nbsp;$total=0;<BR>&nbsp;&nbsp;&nbsp;$temarr=$index[$vipname];<BR>&nbsp;&nbsp;&nbsp;while (list($idx,$sid)=each($temarr)){<BR>&nbsp;&nbsp;&nbsp;&nbsp;$j++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;$complex=$arr_sid[$sid];<BR>&nbsp;&nbsp;&nbsp;&nbsp;$num=explode(&#39;|&#39;,$complex);//1+$i行开始写数据&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;$worksheet-&gt;writeString(0,1+$j,$sid,$format);//写入标识<BR>&nbsp;&nbsp;&nbsp;&nbsp;//$worksheet-&gt;writeString(0,1+$j,$num[1],$format);//写入作者<BR>&nbsp;&nbsp;&nbsp;&nbsp;$worksheet-&gt;writeNumber($i,1+$j,$num[0],$format);//写入数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;$total+=$num[0];&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;$worksheet-&gt;writeNumber($i,1,$total,$format);//写入总数<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;//$worksheet-&gt;setColumn(0,1+$j,14);&nbsp;<BR>&nbsp;}<BR>&nbsp;$workbook-&gt;close();<BR>&nbsp;$time2=microtime_float();<BR>&nbsp;return $time2-$time1;<BR>}<BR>function microtime_float()<BR>{<BR>&nbsp;&nbsp;&nbsp; list($usec, $sec) = explode(" ", microtime());<BR>&nbsp;&nbsp;&nbsp; return ((float)$usec + (float)$sec);<BR>}</FONT><FONT color=#ff0000>?&gt;</FONT></P><><FONT color=#000000 size=3>函数txt2xls($arr,$fxls,$type) $arr里书要处理的数据,格式为"日期,合作伙伴名,标识,值,作者"数组.</FONT><FONT size=3>$fxls是要输出的EXCEL的文件名,$type为0则自动下载,$type为1则自动保存在服务器上.函数返回结果是处理所需要的时间.单位为秒:</FONT></P><><FONT size=3>DEMO:<A href="http://mahuzi.com/demo/log2xls.php"><FONT color=#4d99d3>http://mahuzi.com/demo/log2xls.php</FONT></A></FONT><FONT size=3></FONT></P><><FONT size=3>完整代码:<A href="http://mahuzi.com/demo/log2xls.zip"><FONT color=#4d99d3>http://mahuzi.com/demo/log2xls.zip</FONT></A></FONT></P><>&nbsp;</P><p>[此帖子已被 麻虎子 在 2006-12-4 23:02:39 编辑过]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

在线客服
回顶部