之前寫過一篇【PhpSpreadsheet電子表格PHP匯出excel排版範例】的工作心得
//表頭區
$worksheet
->setCellValue('A1', 'Product')
->setCellValue('B1', 'Quantity')
->setCellValue('C1', 'Unit Price')
->setCellValue('D1', 'Price');
function IntToChr($index, $start = 65) {
$str = '';
if (floor($index / 26) > 0) {
$str .= IntToChr(floor($index / 26)-1);
}
return $str . chr($index % 26 + $start);
}
$worksheet
->setCellValue(''.IntToChr($i).'1', 'Product'); //A1
$i++;
$worksheet
->setCellValue(''.IntToChr($i).'1', 'Quantity'); //B1
$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'2', 'test1'); //A2
$i++;
$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'2', 'test2'); //B2
$i=0;
$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'3', 'test1'); //A3
$i++;
$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'3', 'test2'); //B3
但是發現一個問題,就是excel的列標一定是英文字母A~Z組合,例如:
$worksheet
->setCellValue('A1', 'Product')
->setCellValue('B1', 'Quantity')
->setCellValue('C1', 'Unit Price')
->setCellValue('D1', 'Price');
如果吧C1刪除剩下ABD,匯出Excel還是會空一格C的欄位,必須要重編A~Z的列標,實在不方便,最好的方法就是以數字增加自動生成英文,這樣的好處是如果要刪除欄位或是需要設定匯出條件某些欄位不匯出時,就不會產生空欄位的問題,方法如下:
1、先在模組的function.php中置入以下的function
$str = '';
if (floor($index / 26) > 0) {
$str .= IntToChr(floor($index / 26)-1);
}
return $str . chr($index % 26 + $start);
}
這樣只要輸入數字就能產生英文
echo IntToChr(0);
輸出:A
echo IntToChr(1);
輸出:B
再來就是修改Excel程式部分,吧原本英文字改為IntToChr($i),然後帶入$i值產生數字->帶出英文字母
//表頭區
$i=0;$worksheet
->setCellValue(''.IntToChr($i).'1', 'Product'); //A1
$i++;
$worksheet
->setCellValue(''.IntToChr($i).'1', 'Quantity'); //B1
//內容區,可改由資料表迴圈讀出內容
$i=0;$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'2', 'test1'); //A2
$i++;
$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'2', 'test2'); //B2
$i=0;
$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'3', 'test1'); //A3
$i++;
$spreadsheet->getActiveSheet()
->setCellValue(''.IntToChr($i).'3', 'test2'); //B3
這樣欄位要更動維護新增都很方便,有需要的朋友可以參考看看
工作心的撰寫:徐嘉裕 Neil hsu
留言
張貼留言