【完整教學】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 檔案
💡 結語:這些細節才是企業系統的專業度體現
將英文欄位轉換為中文、設計美觀的表格、提供一鍵匯出,這些都不只是「畫面」,而是資訊整合能力的展現。如果你是負責企業內部系統或專案報表工具的開發者,這些技巧絕對值得收藏與應用!
留言
張貼留言