🧾使用 SheetJS 在 Excel 匯出中正確顯示「千分位」與「小數」格式教學
前言
在現代的網頁應用中,我們常需要把後端資料匯出成 Excel,並希望在 Excel 中同時保留運算功能,又能以易讀的「千分位」和「小數」格式顯示數值。本文將介紹如何利用 SheetJS(XLSX.js)在 Vue 前端處理、設定 cell 格式,讓最終下載的 Excel 既能自動格式化,又能讓使用者直接做計算。
問題描述
在實作過程中,若直接把數字用 .ToString("N0") 或只將儲存格套用
#,##0,Excel 會將小數結果四捨五入到整數。例如:
-
原始值
0.9504會顯示成1。 -
但公式運算時,儲存格裡的真實值仍保留小數,造成顯示和運算結果不一致。
根本原因
-
#,##0這個 Excel number format 只顯示整數部分,並四捨五入。 -
若要顯示小數,就必須在格式碼中指定小數位數(如兩位小數
#,##0.00,四位小數#,##0.0000)。
範例程式碼
以下示範如何在 Vue 前端,利用 SheetJS 下載「2.RemainSupply」工作表,並對
SUPPLY_QTY(E 欄)與 RemainSupply(G
欄)設定千分位與小數格式。
// 1. 讀取整張 ws 的範圍
const rangeTwo = XLSX.utils.decode_range(wsTwo['!ref']);
// 2. 逐列設定格式 (從第 3 列起,0-based index)
for (let R = rangeTwo.s.r + 2; R <= rangeTwo.e.r; ++R) {
['E','G'].forEach(col => {
const cellRef = col + (R+1);
const cell = wsTwo[cellRef];
if (cell && cell.t === 'n') {
// 統一顯示兩位小數、並加千分位
cell.z = '#,##0.00';
}
});
}
// 3. 把 sheet 加入 workbook
XLSX.utils.book_append_sheet(wb, wsTwo, '2.RemainSupply');
提醒:後端請勿
.ToString("N0");直接傳回decimal?,前端才能拿到純數字來套格式。
步驟總結
-
後端投影:回傳數字型態,不要提前格式化成字串。
-
SheetJS 匯出:
XLSX.utils.aoa_to_sheet+sheet_add_json插入資料。 -
格式化儲存格:遍歷
ws['!ref']範圍內的數字欄位,設定cell.z。 -
下載 Excel:
XLSX.writeFile(wb, '檔名.xlsx')。
留言
張貼留言