如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2020年2月12日

PHPExcel unmerge_cells解除合併儲存格產生的錯誤與解決方法

作者: Fred F.M. Wang (FW知識瑣記) 日期:2020/2/12


PHPExcel是一個PHP用來處理Excel讀取與寫入最好的程式庫,實際撰寫時,跟Excel的對應功能還是
有些差異的。

筆者使用PHPExcel的removeRow()要刪除一個Excel檔的特定列時,發生錯誤,原因是這列中存在合併
儲存格,PHPExcel的removeRow()無法刪除包含合併儲存格的列,因此,必須使用unmerge_cells()來解除合併儲存格。

下面是使用unmerge_cells()解除合併儲存格產生的錯誤與解決方法 :

如果unmerge_cells()要解除的範圍包含兩個合併儲存格,會發生錯誤。
例如 範圍A1:D1是一個合併儲存格,範圍A2:D2是一個合併儲存格
用$objPHPExcelOut->getActiveSheet()->unmergeCells("A1:D2”);要解除此範圍的合併,開啟產生
的Excel檔時會跳出錯誤視窗,訊息為"已移除的記錄: /xl/worksheets/sheet1.xml 部分的 合併儲存格"

原因是 $objPHPExcelOut->getActiveSheet()->unmergeCells("A1:D2”);
只能範圍A1:D2必須是一個完整合併的儲存格。

如果是兩個範圍,就必須分別解除合併,如下:
$objPHPExcelOut->getActiveSheet()->unmergeCells("A1:D1”);
$objPHPExcelOut->getActiveSheet()->unmergeCells("A2:D2”);

另外,unmerge_cells()要解除的範圍內有一般儲存格與合併儲存格,也會發生錯誤。
例如 範圍A1:C1是一個已合併的儲存格
用$objPHPExcelOut->getActiveSheet()->unmergeCells("A1:D1”);
要解除範圍A1:C1的合併儲存格,同樣也會產生錯誤。

所以PHPExcel unmergeCells()一次只能解除一個合併儲存格,而且不能包含其他儲存格




沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)