杰克工作室 发表于 2023-2-23 18:49

PHPExcel 行合并、列合并、设置背景颜色实战

<p><img alt="PHPExcel-colmerge-linemerge.png" src="data/attachment/forum/202302/23/2023-02-23_18-48-56_664.png" style="width:1100px" title="1488536779796994.png" /></p>

<p>需求:运营需要实现导出上面报表,格式为excel,方便作二次统计。</p>

<p>一看到这个报表当场就懵了,又是行合并,又是列合并,又是背景色。HTML页面的话,还好说。但导出报表为Excel就&hellip;&hellip;唉,老板的需求,硬着头皮也要完工。</p>

<p>&nbsp;</p>

<p>接招吧,码农:</p>

<pre>
import(&#39;ORG.phpexcel.PHPExcel&#39;,&nbsp;&#39;&#39;,&nbsp;&#39;.php&#39;);
$objPHPExcel&nbsp;&nbsp;=&nbsp;new&nbsp;PHPExcel();
$objWorksheet&nbsp;=&nbsp;$objPHPExcel-&gt;getActiveSheet();
$objWorksheet-&gt;setTitle(&#39;群组数据&#39;);&nbsp;//给当前sheet设置名称

//设置列宽
$istart&nbsp;=&nbsp;ord(&#39;A&#39;)&nbsp;-&nbsp;65;
$iend&nbsp;&nbsp;&nbsp;=&nbsp;ord(&#39;R&#39;)&nbsp;-&nbsp;65;
for($i&nbsp;=&nbsp;$istart;&nbsp;$i&nbsp;&lt;=&nbsp;$iend;&nbsp;$i++){
&nbsp;&nbsp;&nbsp;&nbsp;$col_width&nbsp;=&nbsp;in_array($i,&nbsp;)&nbsp;?&nbsp;19&nbsp;:&nbsp;11;
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;getColumnDimension(&nbsp;chr(ord(&#39;A&#39;)&nbsp;+&nbsp;$i)&nbsp;)-&gt;setWidth($col_width);//setAutoSize(true)不起作用
}

$hcenter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;PHPExcel_Style_Alignment::HORIZONTAL_CENTER;//水平居中
$vcenter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;PHPExcel_Style_Alignment::VERTICAL_CENTER;//上下居中
//搜索条件:
$objWorksheet-&gt;setCellValue(&#39;A1&#39;,&nbsp;&#39;群组ID&#39;);
$objWorksheet-&gt;setCellValue(&#39;B1&#39;,&nbsp;$search[&#39;group_id&#39;])-&gt;getStyle(&#39;B1&#39;)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;f8cbad&#39;);
$objWorksheet-&gt;setCellValue(&#39;D1&#39;,&nbsp;&#39;数据更新完成时间&#39;);
$objWorksheet-&gt;setCellValue(&#39;E1&#39;,&nbsp;$search[&#39;group_time&#39;])-&gt;getStyle(&#39;E1&#39;)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;f8cbad&#39;);
$objWorksheet-&gt;setCellValue(&#39;G1&#39;,&nbsp;&#39;选取时间&#39;);
$objWorksheet-&gt;setCellValue(&#39;H1&#39;,&nbsp;$search[&#39;start_time&#39;])-&gt;getStyle(&#39;H1&#39;)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;f8cbad&#39;);
$objWorksheet-&gt;setCellValue(&#39;I1&#39;,&nbsp;$search[&#39;end_time&#39;])-&gt;getStyle(&#39;I1&#39;)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;f8cbad&#39;);
$objWorksheet-&gt;setCellValue(&#39;L1&#39;,&nbsp;&#39;优惠券ID&#39;);
$objWorksheet-&gt;setCellValue(&#39;M1&#39;,&nbsp;$search[&#39;coupon_id&#39;])-&gt;getStyle(&#39;M1&#39;)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;f8cbad&#39;);

//数据表头
$bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[&#39;群组ID&#39;,&nbsp;&#39;数据更新完成时间&#39;,&nbsp;&#39;总人数&#39;,&nbsp;&#39;回访人数&#39;,&nbsp;&#39;用券人数&#39;,&nbsp;&#39;订单量&#39;,&nbsp;&#39;销售额&#39;,&nbsp;&#39;使用券的销售额&#39;,&nbsp;&#39;购买人数&#39;,&#39;订单价&#39;,&nbsp;&#39;平均回访天数&#39;,&nbsp;&#39;平均购买天数&#39;];//
$bt_sub&nbsp;=&nbsp;[&#39;0-20&#39;,&nbsp;&#39;21-50&#39;,&nbsp;&#39;51-70&#39;,&nbsp;&#39;71-100&#39;,&nbsp;&#39;101-200&#39;,&nbsp;&#39;200以上&#39;];
foreach($bt&nbsp;as&nbsp;$k&nbsp;=&gt;&nbsp;$v)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$col&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;chr(65&nbsp;+&nbsp;$k);
&nbsp;&nbsp;&nbsp;&nbsp;if($v&nbsp;==&nbsp;&#39;平均回访天数&#39;){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$col&nbsp;&nbsp;&nbsp;=&nbsp;&#39;P&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;}elseif($v&nbsp;==&nbsp;&#39;平均购买天数&#39;){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$col&nbsp;&nbsp;&nbsp;=&nbsp;&#39;Q&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;$mergeLine&nbsp;=&nbsp;$col.&#39;3:&#39;.$col.&#39;4&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;$celV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;$col.&#39;3&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;$mergeCol&nbsp;&nbsp;=&nbsp;&#39;K3:O3&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;if($v&nbsp;==&nbsp;&#39;订单价&#39;){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;mergeCells($mergeCol)-&gt;setCellValue(&#39;K3&#39;,&nbsp;$v)-&gt;getStyle(&#39;K3&#39;)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;f8cbad&#39;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;getStyle(&#39;K3&#39;)-&gt;getAlignment()-&gt;setHorizontal($hcenter);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($bt_sub&nbsp;as&nbsp;$kk&nbsp;=&gt;&nbsp;$vv){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cel&nbsp;=&nbsp;chr(ord(&#39;K&#39;)&nbsp;+&nbsp;$kk)&nbsp;.&nbsp;&#39;4&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue($cel,&nbsp;$vv)-&gt;getStyle($cel)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;fce4d6&#39;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;getStyle($cel)-&gt;getAlignment()-&gt;setHorizontal($hcenter);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;mergeCells($mergeLine)-&gt;setCellValue($celV,&nbsp;$v)-&gt;getStyle($celV)-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID)-&gt;getStartColor()-&gt;setRGB(&#39;f8cbad&#39;);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;getStyle($celV)-&gt;getAlignment()-&gt;setHorizontal($hcenter);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;getStyle($celV)-&gt;getAlignment()-&gt;setVertical($vcenter);
}

//数据体
foreach($datalist&nbsp;as&nbsp;$k&nbsp;=&gt;&nbsp;$v){
&nbsp;&nbsp;&nbsp;&nbsp;$lineno3&nbsp;&nbsp;&nbsp;=&nbsp;($k&nbsp;==&nbsp;0&nbsp;?&nbsp;&nbsp;5&nbsp;&nbsp;:&nbsp;($k&nbsp;+&nbsp;5));

&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;A&#39;)).$lineno3,&nbsp;$v[&#39;qun_id&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;B&#39;)).$lineno3,&nbsp;$v[&#39;update_time&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;C&#39;)).$lineno3,&nbsp;$v[&#39;members&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;D&#39;)).$lineno3,&nbsp;$v[&#39;view_nums&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;E&#39;)).$lineno3,&nbsp;$v[&#39;coupon_user&#39;]);

&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;F&#39;)).$lineno3,&nbsp;$v[&#39;orders&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;G&#39;)).$lineno3,&nbsp;$v[&#39;sales_money&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;H&#39;)).$lineno3,&nbsp;$v[&#39;coupon_money&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;I&#39;)).$lineno3,&nbsp;$v[&#39;buyers&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;J&#39;)).$lineno3,&nbsp;$v[&#39;buyer_0_20&#39;]);

&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;K&#39;)).$lineno3,&nbsp;$v[&#39;buyer_21_50&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;L&#39;)).$lineno3,&nbsp;$v[&#39;buyer_51_70&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;M&#39;)).$lineno3,&nbsp;$v[&#39;buyer_71_100&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;N&#39;)).$lineno3,&nbsp;$v[&#39;buyer_101_200&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;O&#39;)).$lineno3,&nbsp;$v[&#39;buyer_200_&#39;]);

&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;P&#39;)).$lineno3,&nbsp;$v[&#39;view_days_avg&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$objWorksheet-&gt;setCellValue(chr(ord(&#39;Q&#39;)).$lineno3,&nbsp;$v[&#39;buy_days_avg&#39;]);
}


$filename&nbsp;=&nbsp;$sheet_title.&quot;.xlsx&quot;;
$ua&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;$_SERVER[&quot;HTTP_USER_AGENT&quot;];
$encoded_filename&nbsp;=&nbsp;urlencode($filename);
$encoded_filename&nbsp;=&nbsp;str_replace(&quot;+&quot;,&nbsp;&quot;%20&quot;,$encoded_filename);
header(&#39;Content-Type:&nbsp;application/octet-stream&#39;);
if&nbsp;(preg_match(&quot;/MSIE/&quot;,&nbsp;$ua))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$filename&nbsp;=&nbsp;$encoded_filename;
&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;Content-Disposition:&nbsp;attachment;filename=&quot;&#39;&nbsp;.$filename&nbsp;.&nbsp;&#39;&quot;&#39;);
}else&nbsp;if&nbsp;(preg_match(&quot;/Firefox/&quot;,&nbsp;$ua)){
&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;Content-Disposition:&nbsp;attachment;&nbsp;filename*=&quot;utf8\&#39;\&#39;&#39;&nbsp;.&nbsp;$filename&nbsp;.&nbsp;&#39;&quot;&#39;);
}else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;Content-Disposition:&nbsp;attachment;&nbsp;filename=&quot;&#39;&nbsp;.&nbsp;$filename&nbsp;.&nbsp;&#39;&quot;&#39;);
}
////////////////////////////////////////

header(&#39;Cache-Control:&nbsp;max-age=0&#39;);
//&nbsp;If&nbsp;you&#39;re&nbsp;serving&nbsp;to&nbsp;IE&nbsp;9,&nbsp;then&nbsp;the&nbsp;following&nbsp;may&nbsp;be&nbsp;needed
header(&#39;Cache-Control:&nbsp;max-age=1&#39;);

//&nbsp;If&nbsp;you&#39;re&nbsp;serving&nbsp;to&nbsp;IE&nbsp;over&nbsp;SSL,&nbsp;then&nbsp;the&nbsp;following&nbsp;may&nbsp;be&nbsp;needed
header&nbsp;(&#39;Expires:&nbsp;Mon,&nbsp;26&nbsp;Jul&nbsp;1997&nbsp;05:00:00&nbsp;GMT&#39;);&nbsp;//&nbsp;Date&nbsp;in&nbsp;the&nbsp;past
header&nbsp;(&#39;Last-Modified:&nbsp;&#39;.gmdate(&#39;D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s&#39;).&#39;&nbsp;GMT&#39;);&nbsp;//&nbsp;always&nbsp;modified
header&nbsp;(&#39;Cache-Control:&nbsp;cache,&nbsp;must-revalidate&#39;);&nbsp;//&nbsp;HTTP/1.1
header&nbsp;(&#39;Pragma:&nbsp;public&#39;);&nbsp;//&nbsp;HTTP/1.0

$objWriter&nbsp;=&nbsp;PHPExcel_IOFactory::createWriter($objPHPExcel,&nbsp;&#39;Excel2007&#39;);
$objWriter-&gt;save(&#39;php://output&#39;);
exit();</pre>

<p>&nbsp;</p>

<p>唉,终于可以小小的休息一下了,明天继续加班。</p>
页: [1]
查看完整版本: PHPExcel 行合并、列合并、设置背景颜色实战