杰克工作室 发表于 2023-2-23 19:46

PHP操作excel推荐使用phpoffice组件,不推荐使用phpexcel

<p>由于phpexcel官方已经不再维护,建议所有新项目都使用phpoffice。</p>

<p>在些记录一下相关操作(复制过去就可以使用,尽量减少不必要的开发时间):</p>

<p>在调试设置时,确保引入了正确的文件并实例化。</p>

<pre>
use&nbsp;PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet&nbsp;=&nbsp;new&nbsp;Spreadsheet();
$worksheet&nbsp;=&nbsp;$spreadsheet-&gt;getActiveSheet();</pre>

<h4><span style="color:#e74c3c">字体</span></h4>

<p>第1行代码将A7至B7两单元格设置为粗体字,Arial字体,10号字;第2行代码将B1单元格设置为粗体字。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getStyle(&#39;A7:B7&#39;)-&gt;getFont()-&gt;setBold(true)-&gt;setName(&#39;Arial&#39;)-&gt;setSize(10);
$spreadsheet-&gt;getActiveSheet()-&gt;getStyle(&#39;B1&#39;)-&gt;getFont()-&gt;setBold(true);</pre>

<h4><span style="color:#e74c3c">颜色</span></h4>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getStyle(&#39;A4&#39;)-&gt;getFont()-&gt;getColor()
-&gt;setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);&nbsp;//将文字颜色设置为红色。

$worksheet-&gt;getStyle(&#39;A4&#39;)-&gt;getFill()-&gt;setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
-&gt;getStartColor()-&gt;setARGB(&#39;76933C&#39;);//单元格背景颜色

//单元格背景颜色+边框
$styleArray&nbsp;=&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&#39;borders&#39;&nbsp;=&gt;&nbsp;[//边框
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;outline&#39;&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;borderStyle&#39;&nbsp;=&gt;&nbsp;\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;color&#39;&nbsp;=&gt;&nbsp;[&#39;argb&#39;&nbsp;=&gt;&nbsp;&#39;00000000&#39;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&#39;fill&#39;&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;fillType&#39;&nbsp;=&gt;&nbsp;\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;rotation&#39;&nbsp;=&gt;&nbsp;90,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;startColor&#39;&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;argb&#39;&nbsp;=&gt;&nbsp;&#39;76933C&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;endColor&#39;&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;argb&#39;&nbsp;=&gt;&nbsp;&#39;76933C&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&#39;alignment&#39;&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;horizontal&#39;&nbsp;=&gt;&nbsp;\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,//水平对齐
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;vertical&#39;&nbsp;=&gt;&nbsp;\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,//上下居中
&nbsp;&nbsp;&nbsp;&nbsp;],
];
$worksheet-&gt;getStyle(&#39;A4&#39;)-&gt;applyFromArray($styleArray);</pre>

<h4><span style="color:#e74c3c">图片</span></h4>

<p>可以将图片加载到Excel中。</p>

<pre>
$drawing&nbsp;=&nbsp;new&nbsp;\PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing-&gt;setName(&#39;Logo&#39;);
$drawing-&gt;setDescription(&#39;Logo&#39;);
$drawing-&gt;setPath(&#39;./images/officelogo.jpg&#39;);//这里的地址只能是本地服务器的地址不能是http网络地址
$drawing-&gt;setHeight(36);
$drawing-&gt;setCoordinates(&#39;E&#39;&nbsp;.&nbsp;$row);//哪一列哪一行
$drawing-&gt;setWorksheet($worksheet);
$worksheet-&gt;getRowDimension($row)-&gt;setRowHeight(60);
unset($drawing);</pre>

<h4><span style="color:#e74c3c">列宽</span></h4>

<p>将A列宽度设置为30(字符)。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getColumnDimension(&#39;A&#39;)-&gt;setWidth(30);</pre>

<p>如果需要自动计算列宽,可以这样:</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getColumnDimension(&#39;B&#39;)-&gt;setAutoSize(true);</pre>

<p>设置默认列宽为12。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getDefaultColumnDimension()-&gt;setWidth(12);
$worksheet-&gt;getColumnDimension($k)-&gt;setWidth(12);//列宽</pre>

<h4><span style="color:#e74c3c">行高</span></h4>

<p>设置第10行行高为100pt。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getRowDimension(&#39;10&#39;)-&gt;setRowHeight(100);</pre>

<p>设置默认行高。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getDefaultRowDimension()-&gt;setRowHeight(15);
$worksheet-&gt;getRowDimension($startRow)-&gt;setRowHeight(25);//行高</pre>

<h4><span style="color:#e74c3c">对齐</span></h4>

<p>将A1单元格设置为水平居中对齐。</p>

<pre>
$styleArray&nbsp;=&nbsp;[&#39;alignment&#39;&nbsp;=&gt;&nbsp;[&#39;horizontal&#39;&nbsp;=&gt;&nbsp;\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,],];
$worksheet-&gt;getStyle(&#39;A1&#39;)-&gt;applyFromArray($styleArray);</pre>

<h4><span style="color:#e74c3c">合并</span></h4>

<p>将A18到E22合并为一个单元格(注意:合并为一个单元格后,再设置值的时候,单元格为A18)。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;mergeCells(&#39;A18:E22&#39;);</pre>

<h4><span style="color:#e74c3c">拆分</span></h4>

<p>将合并后的单元格拆分。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;unmergeCells(&#39;A18:E22&#39;);</pre>

<h4><span style="color:#e74c3c">边框</span></h4>

<p>将B2至G8的区域添加红色边框。</p>

<pre>
$styleArray&nbsp;=&nbsp;[
        &#39;borders&#39;&nbsp;=&gt;&nbsp;[
                &#39;outline&#39;&nbsp;=&gt;&nbsp;[
                        &#39;borderStyle&#39;&nbsp;=&gt;&nbsp;\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                        &#39;color&#39;&nbsp;=&gt;&nbsp;[&#39;argb&#39;&nbsp;=&gt;&nbsp;&#39;FFFF0000&#39;],
                ],
        ],
];
$worksheet-&gt;getStyle(&#39;B2:G8&#39;)-&gt;applyFromArray($styleArray);</pre>

<h4><span style="color:#e74c3c">工作表标题</span></h4>

<p>设置当前工作表标题。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;setTitle(&#39;Hello&#39;);</pre>

<h4><span style="color:#e74c3c">日期时间</span></h4>

<p>设置日期格式。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;setCellValue(&#39;D1&#39;,&nbsp;&#39;2018-06-15&#39;);
$spreadsheet-&gt;getActiveSheet()-&gt;getStyle(&#39;D1&#39;)-&gt;getNumberFormat()-&gt;setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDD2);</pre>

<h4><span style="color:#e74c3c">换行</span></h4>

<p>使用\n进行单元格内换行,相当于(ALT+&quot;Enter&quot;)。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getCell(&#39;A4&#39;)-&gt;setValue(&quot;hello\nworld&quot;);
$spreadsheet-&gt;getActiveSheet()-&gt;getStyle(&#39;A4&#39;)-&gt;getAlignment()-&gt;setWrapText(true);</pre>

<h4><span style="color:#e74c3c">超链接</span></h4>

<p>将单元格设置为超链接形式。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;setCellValue(&#39;E6&#39;,&nbsp;&#39;www.phpshiti.com&#39;);&nbsp;
$spreadsheet-&gt;getActiveSheet()-&gt;getCell(&#39;E6&#39;)-&gt;getHyperlink()-&gt;setUrl(&#39;https://www.phpshiti.com&#39;);</pre>

<h4><span style="color:#e74c3c">使用函数</span></h4>

<p>使用SUM计算B5到C5之间单元格的总和。其他函数同理:最大数(MAX),最小数(MIN),平均值(AVERAGE)。</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;setCellValue(&#39;B7&#39;,&nbsp;&#39;=SUM(B5:C5)&#39;);</pre>

<h4><span style="color:#e74c3c">设置文档属性</span></h4>

<p>可以设置Excel文档属性。</p>

<pre>
$spreadsheet-&gt;getProperties()
&nbsp;-&gt;setCreator(&quot;Helloweba&quot;)&nbsp;&nbsp;&nbsp;//作者
&nbsp;-&gt;setLastModifiedBy(&quot;Yuegg&quot;)&nbsp;//最后修改者
&nbsp;-&gt;setTitle(&quot;Office&nbsp;2007&nbsp;XLSX&nbsp;Test&nbsp;Document&quot;)&nbsp;&nbsp;//标题
&nbsp;-&gt;setSubject(&quot;Office&nbsp;2007&nbsp;XLSX&nbsp;Test&nbsp;Document&quot;)&nbsp;//副标题
&nbsp;-&gt;setDescription(&quot;Test&nbsp;document&nbsp;for&nbsp;Office&nbsp;2007&nbsp;XLSX,&nbsp;generated&nbsp;using&nbsp;PHP&nbsp;classes.&quot;)&nbsp;&nbsp;//描述
&nbsp;-&gt;setKeywords(&quot;office&nbsp;2007&nbsp;openxml&nbsp;php&quot;)&nbsp;//关键字
&nbsp;-&gt;setCategory(&quot;Test&nbsp;result&nbsp;file&quot;);&nbsp;//分类</pre>

<h4><span style="color:#e74c3c">设置提示</span></h4>

<p>To add a comment to a cell, use the following code. The example below adds a comment to cell E11:</p>

<pre>
$spreadsheet-&gt;getActiveSheet()-&gt;getComment(&#39;E11&#39;)-&gt;setAuthor(&#39;Mark&nbsp;Baker&#39;);
$commentRichText&nbsp;=&nbsp;$spreadsheet-&gt;getActiveSheet()-&gt;getComment(&#39;E11&#39;)
&nbsp;&nbsp;&nbsp;&nbsp;-&gt;getText()-&gt;createTextRun(&#39;PhpSpreadsheet:&#39;);
$commentRichText-&gt;getFont()-&gt;setBold(true);
$spreadsheet-&gt;getActiveSheet()-&gt;getComment(&#39;E11&#39;)-&gt;getText()-&gt;createTextRun(&quot;\r\n&quot;);
$spreadsheet-&gt;getActiveSheet()-&gt;getComment(&#39;E11&#39;)
&nbsp;&nbsp;&nbsp;&nbsp;-&gt;getText()-&gt;createTextRun(&#39;Total&nbsp;amount&nbsp;on&nbsp;the&nbsp;current&nbsp;invoice,&nbsp;excluding&nbsp;VAT.&#39;);</pre>

<p><img alt="08-cell-comment.png" src="https://phpspreadsheet.readthedocs.io/en/latest/topics/images/08-cell-comment.png" /></p>

<p>&nbsp;</p>

<p>此外,除了提供丰富的Excel文件处理接口外,PhpSpreadshee还提供了CSV,PDF,HTML以及XML等文件处理接口。</p>

<p>更多使用设置请参照官网文档:<a href="https://phpspreadsheet.readthedocs.io/en/stable/" rel="nofollow">https://phpspreadsheet.readthedocs.io/en/stable/</a>。</p>
页: [1]
查看完整版本: PHP操作excel推荐使用phpoffice组件,不推荐使用phpexcel