2013年7月23日 星期二

PHPExcel - 欄位寬度的設定問題 (setWidth)


在1.73版,如果存成 xls 檔,實際寬度會比設定寬度小。
如果PHP程式用setWidth函數設成 6,打開Excel檔後變成 5.29
如果設成 8 => 7.29
如果設成 10 => 9.29
換句話說,整數都會相差 0.71
(6 - 5.29 = 0.71)

如果設成 10.5 => 9.71
如果設成 11.5 => 10.71
換句話說,如果是 .5 的話,例如 1.5, 2.5, 3.5,結果會相差 0.79
( 10.5 - 9.71 = 0.79 )

目前還不知道它到底是怎麼算的,為什麼不是一律相差 0.71,或是一律相差 0.79?

這篇文章說,這是因為 PHPExcel 的這個檔案:Classes\PHPExcel\Writer\Excel5\Worksheet.php
裡面的這一行
$coldx   += 0.72;
所導致。

但是我在我的 1.73 版裡面去搜尋 $coldx 這個變數,沒看到那一行。
我的搜尋結果:
$coldx = $col_array[2];
$coldx = 8.43;
$coldx   *= 256; // Convert to units of 1/256 of a char
$data = pack("vvvvvv", $colFirst, $colLast, $coldx,

而且它的數字是 0.72,但我的數字則是 0.71 跟 0.79。
可能版本不同吧。

總之,
如果要取整數,都加上 0.71。假設要設定成 6,那就寫成 setWidth(6.71)。這樣出來的結果就會是 6 。

如果不取整數,仍然建議取 0.5 的倍數 ,然後一律加 0.79。 如果要設定成 6.5,那就寫成 setWidth(7.29)

沒有留言:

張貼留言