【完整教學】Vue 3 + Vite 串接 .NET API 並以中文表格輸出網頁與 Excel(含樣式與欄位對應)
✨ 前言:當工程師遇上 Excel 輸出與中文表格的挑戰
在企業內部系統開發中,「將資料表格輸出成 Excel」是常見的需求之一。如果你使用 Vue 3 搭配 Vite 作為前端框架,並以 .NET Core API 提供後端資料,還希望將表格顯示為「中文欄位名稱」並美觀呈現在網頁上與 Excel 檔中,那你可能會遇到以下挑戰:
-
API 回傳資料是英文欄位,但客戶要看中文
-
Excel 匯出標題變成英文字串,不符合格式
-
頁面表格欄寬不一致,看起來很亂
-
想要像群創光電一樣的表格 UI 和下載功能
別擔心,這篇文章一步一步教你解決以上所有問題!
🧱 系統架構概覽
-
前端技術:Vue 3 + Vite + Axios
-
後端技術:ASP.NET Core Web API
-
匯出工具:xlsx + file-saver
-
API 範例:
/api/Data/GetDataByVersionA?apsVersion=V1
🛠️ Step 1:建立 API 並正確回傳資料
.NET API Controller 中,我們設計一個 GetDataByVersionA
方法:
[HttpGet("GetDataByVersionA")] public async Task>> GetDataByVersionA([FromQuery] string apsVersion) { var result = await _dataProcessor.GetDataByVersionA(apsVersion); return Ok(result); }
這個方法會依據使用者傳入的版本編號(例如 V1
),回傳對應的資料清單。
🧩 Step 2:Vue 3 前端如何串接並轉換欄位為中文?
✍️ 對照欄位轉換表(Mapping)
我們使用 JavaScript 將英文欄位名稱轉換為中文:
const columnMapping = { APS_VERSION: "計畫版本", DOC_NO: "急單編號", DEMAND_DATE: "需求日期", DEMAND_QTY: "需求數量", SITE: "廠別 SITE", CUSTOMER_NAME: "客戶", APPL: "Appl.", PLANT: "PLANT", PRODUCT_ID: "機種", RECIPE: "製程", EQ: "機台", INPUT_DATE: "日期", INPUT_QTY: "投入數量", NORMAL_OUTPUT: "產出數量" };
我們利用 map()
函數將 API 資料進行轉換,產生新的資料供表格使用:
tableData.value = response.data.map(row => { let newRow = {}; Object.keys(row).forEach(key => { newRow[columnMapping[key] || key] = row[key]; }); return newRow; });
🎨 Step 3:網頁表格樣式與寬度優化(模仿群創風格)
為了讓網頁表格更直觀與企業風格一致,我們套用以下幾點樣式:
-
標題列背景為黃色
-
欄位寬度依照內容長度自適應
-
禁止自動換行(
white-space: nowrap
)
th { background-color: #FFFF00; font-weight: bold; padding: 10px; text-align: center; white-space: nowrap; } td { white-space: nowrap; padding: 8px; text-align: center; }
📤 Step 4:匯出 Excel 並保留中文標題
我們使用 xlsx
套件轉換為 Excel 格式,並搭配 file-saver
匯出檔案:
const exportToExcel = () => { if (mappedTableData.value.length === 0) { alert('沒有數據可導出'); return; } const ws = XLSX.utils.aoa_to_sheet([ tableHeaders.value, // 中文標題列 ...mappedTableData.value.map(row => Object.values(row)) ]); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, '供應鏈計劃數據'); const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' }); const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); saveAs(blob, `供應鏈計劃數據_${selectedVersion.value}.xlsx`); };
✅ 匯出的檔案名稱會自動依照選擇的版本命名,例如:
供應鏈計劃數據_V1.xlsx
✅ 實際成果展示
▲ 網頁表格介面
▲ 匯出的 Excel 檔案
💡 結語:這些細節才是企業系統的專業度體現
將英文欄位轉換為中文、設計美觀的表格、提供一鍵匯出,這些都不只是「畫面」,而是資訊整合能力的展現。如果你是負責企業內部系統或專案報表工具的開發者,這些技巧絕對值得收藏與應用!
留言
張貼留言