【完整教學】Vue 3 + Vite 串接 .NET API 並以中文表格輸出網頁與 Excel(含樣式與欄位對應)

✨ 前言:當工程師遇上 Excel 輸出與中文表格的挑戰

在企業內部系統開發中,「將資料表格輸出成 Excel」是常見的需求之一。如果你使用 Vue 3 搭配 Vite 作為前端框架,並以 .NET Core API 提供後端資料,還希望將表格顯示為「中文欄位名稱」並美觀呈現在網頁上與 Excel 檔中,那你可能會遇到以下挑戰:

  1. API 回傳資料是英文欄位,但客戶要看中文

  2. Excel 匯出標題變成英文字串,不符合格式

  3. 頁面表格欄寬不一致,看起來很亂

  4. 想要像群創光電一樣的表格 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 檔案





💡 結語:這些細節才是企業系統的專業度體現

將英文欄位轉換為中文、設計美觀的表格、提供一鍵匯出,這些都不只是「畫面」,而是資訊整合能力的展現。如果你是負責企業內部系統或專案報表工具的開發者,這些技巧絕對值得收藏與應用!








留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🔎EF Core 連 Oracle 出現 ORA-00600 [kpp_concatq:2] 的完整排錯指南(含 EF Core ToString/CultureInfo 錯誤)