ToolAct工具行動

Excel 轉 JSON 工具

上傳 Excel 檔案,將表格資料轉換為 JSON 格式

拖放 Excel 檔案到此處,或點選選擇檔案

什麼是 Excel 轉 JSON?

Excel 轉 JSON 是一個線上資料格式轉換工具,可以將 Microsoft Excel(.xlsx/.xls)檔案中的表格資料轉換為 JSON(JavaScript 物件表示法)格式。

Excel 是全球最流行的試算表軟體,廣泛用於資料儲存、分析和報表製作。JSON 是現代 Web 應用程式和 API 中最常用的資料交換格式,具有結構清晰、易於解析的優點。

使用本工具,您可以快速將 Excel 表格資料轉換為 JSON 陣列,方便在程式設計、資料分析和 Web 開發中使用。所有處理均在瀏覽器本地完成,確保資料安全。

使用方式

使用方式

  1. 點選上傳區域或拖放 Excel 檔案(支援 .xlsx 和 .xls 格式)
  2. 若有多個工作表,請從下拉選單中選擇要轉換的工作表
  3. 選擇是否將第一列作為 JSON 物件的欄位名稱
  4. 格式化的 JSON 資料會自動產生,可直接複製

試算表說明

  • 使用 JSON 前,請檢查所選的工作表、標題列、合併儲存格、空白列和日期格式。
  • 試算表經常將顯示格式與原始值混在一起,因此轉換後請驗證數字和日期。

使用場景

將工作簿的工作表轉為 JSON 供開發使用匯入 .xlsx 或 .xls 工作簿,選擇工作表,將其轉換為帶有語法標示的 JSON,用於模擬資料、初始資料、下拉選項、本地化草稿或 API 範例。工作簿的讀取和解析完全在瀏覽器中透過 SheetJS 函式庫完成,客戶、人資或內部財務試算表在轉換過程中不會離開裝置。
控制首列是否成為物件鍵切換「首行作為欄位名稱」開關,在以欄位名稱為鍵的物件陣列與以欄位位置為索引的陣列匯出之間切換,然後利用行數和欄位數來發現意外的空白欄或選錯的工作表。這很適合作為將輸出貼到正式目標之前的受控中間步驟。
在本機完成小型資料的試算表解析頁面透過 SheetJS 在瀏覽器中讀取工作簿並直接複製輸出。它適合可檢視的試算表,而非大型檔案、公式重新計算、巨集、樞紐分析快取或受保護工作簿的邏輯。在將 JSON 視為正式來源之前,請在目標系統中快速做一次合理性檢查。
辨識公式值與儲存字串的差異SheetJS 在瀏覽器中傳回公式的最後快取值,因此一整欄計算合計在 JSON 中會顯示為純數字,而快取過期的儲存格可能與 Excel 目前顯示的內容不一致。在將匯出視為正式來源之前,快速掃描是否有意外的零值或不匹配的字串,如果公式是在上次儲存後新增的,請重新儲存工作簿。
在 Schema 壞掉前先檢查標題列當「首行作為欄位名稱」開啟時,重複或空白的欄位名稱會產生無效的 JSON 鍵,部分鍵可能被自動重新命名。打開 JSON 後搜尋 'undefined' 或數字字尾,當鍵值必須在重新匯入時保持穩定時(特別是用於 TypeScript 介面或 GraphQL Schema 產生的下游場景),請清理來源工作表。

技術原理

現代 .xlsx 工作簿是由 ECMA-376 / ISO/IEC 29500(Office Open XML 標準)定義的 SpreadsheetML 檔案:.xlsx 副檔名是一個 ZIP 容器,其條目為 xl/worksheets/sheetN.xml 下的 XML 文件,字串儲存在共用字串表 xl/sharedStrings.xml 中,儲存格類型由 t 屬性宣告(s = 共用字串、n = 數字、b = 布林值、str = 行內字串、d = ISO 8601 日期)。頁面使用 FileReader.readAsArrayBuffer 讀取上傳的 File,然後將 ArrayBuffer 傳遞給 SheetJS(xlsx)。XLSX.read(buffer, {type: 'array'}) 傳回一個工作簿物件,其 SheetNames 陣列驅動工作表選擇器,而 XLSX.utils.sheet_to_json(sheet, options) 遍歷儲存格格線,產生以標題列為鍵的物件陣列,或在傳入 header: 1 時產生陣列的陣列。 舊版 .xls 是二進位 BIFF8 格式(Excel 97-2003),SheetJS 透過同一個 read() 進入點解碼,但使用 type: 'binary' 對應 FileReader.readAsBinaryString,或以位元組讀取時使用 'array'。兩種格式中的儲存格日期值都以序號儲存(Excel 中為自 1900 紀元以來的天數,帶有歷史性的 1900-02-29 閏年錯誤,使 1900-03-01 之前的日期偏移一天;或在 Excel for Mac 中當工作簿的 date1904 旗標設定時,為自 1904-01-01 以來的天數)。轉換為 JavaScript Date 的公式為 (serial - 25569) * 86400 * 1000 毫秒(Unix 紀元之後),適用於 1900 系統,前提是已考慮閏年錯誤。公式儲存在 f 屬性中,SheetJS 在 v 中報告其最後快取結果;如果工作簿是由未重新計算的工具儲存的(例如某些腳本匯出),v 可能缺失或過期。 當第一列用作標題時,重複或空白的標題儲存格會迫使 SheetJS 跳過或自動重新命名鍵(例如 __EMPTY、__EMPTY_1),這會破壞下游 JSON 契約。合併儲存格範圍(在 worksheet/mergeCells 中宣告)僅在左上角錨點處暴露值,在合併的尾部儲存格中發出 undefined,因此合併的標題列會產生一筆有值的記錄,後面跟著 N - 1 筆稀疏記錄。對於數十 MB 以上的工作簿,同步的 XLSX.read() 路徑可能會阻塞 UI 執行緒;串流替代方案是將解析移至 Web Worker,以保持主執行緒的回應能力。

  • .xlsx 是 XML 的 ZIP 容器(ECMA-376 / ISO/IEC 29500);.xls 是二進位 BIFF8 格式;SheetJS XLSX.read(buffer, {type: 'array'}) 透過 FileReader.readAsArrayBuffer 處理兩者。
  • sheet_to_json 選項:header: 1 傳回陣列的陣列;header: 'A' 使用試算表欄位字母;defval: null 以 null 填充稀疏儲存格而非刪除鍵;raw: false 套用 Excel 顯示格式。
  • Excel 日期序號為自 1900-01-01 以來的天數(帶有 1900-02-29 閏年錯誤;Mac 1904 日期系統為自 1904-01-01 以來的天數);JS Date 毫秒 = (serial - 25569) * 86400000(Unix 紀元之後)。
  • 重複或空白的標題儲存格會變成自動重新命名的鍵(__EMPTY、__EMPTY_1)或無聲碰撞;在依賴 Schema 之前,請驗證 JSON 中是否包含這些字串。
  • 合併儲存格範圍(worksheet.mergeCells)僅在左上角錨點處暴露值;合併中的尾部儲存格為 undefined,因此合併的標題列會產生一筆有值的記錄和 N-1 筆空欄位的記錄。
  • 公式儲存格將運算式存於 f,最後快取結果存於 v;未重新計算就儲存的工具會使 v 過期或缺失,SheetJS 會原樣傳回 v。
  • 對於超過約 10 MB 的工作簿,將 XLSX.read 移至 Web Worker;同步解析路徑會阻塞 requestAnimationFrame,並可能在大型工作表上凍結分頁數秒。

範例

員工工作表轉為 JSON 物件陣列

Excel 列(工作表 Staff):
id | name    | dept       | salary
1  | Alice   | Engineering| 8500
2  | Bob     | Sales      | 6200

JSON 輸出:
[
  { "id": 1, "name": "Alice", "dept": "Engineering", "salary": 8500 },
  { "id": 2, "name": "Bob",   "dept": "Sales",       "salary": 6200 }
]

多工作表活頁簿(orders.xlsx)

活頁簿工作表:["Customers", "Orders", "Products"]
選擇工作表:Orders
以第一列作為標題:order_id, customer_id, total, date

結果:將 1,284 列轉換為 JSON 物件
結尾的空白儲存格會轉為 null,而非空字串

Excel 日期儲存格轉為 ISO 8601 字串

儲存格 A2(Excel 中格式為日期):46173(Excel 序列號)
Excel 顯示為:2026-06-01

JSON 輸出:
{ "order_date": "2026-06-01T00:00:00.000Z" }

備註:Excel 以數字序列儲存日期;本工具會將其標準化為 ISO 字串

標題包含空格與中文字元

標題列:"Order No." | "客戶姓名" | "金額 (USD)"

JSON 鍵會原樣保留:
{
  "Order No.": "A-1024",
  "客戶姓名": "王小明",
  "金額 (USD)": 199.50
}

常見問題

我的 Excel 檔會被上傳嗎?

不會。.xlsx、.xls 或 .csv 檔案是用 SheetJS 在你的瀏覽器中解析。位元組不會離開裝置。你可以在載入檔案時開啟 Network 分頁確認。

哪些 Excel 功能能保留下來?

儲存格值、日期(依選項輸出為 ISO 字串或 Excel 序號)、數字、布林值與文字。圖表、圖片、條件式格式、公式(保留快取值,而非公式本身)、註解與合併儲存格會被丟棄或簡化。

所有工作表都會轉換嗎?

只會轉換選中的工作表。請用工作表下拉選單選擇要匯出的工作表。需要多個工作表的話,請逐一轉換。

標題和列怎麼對應到 JSON?

若開啟「第一列為標題」,結果會是物件陣列,標題欄為鍵。關閉的話會是儲存格值的二維陣列。空白儲存格在輸出中會變成 null。

日期是怎麼處理的?

Excel 將日期儲存為序號(自 1900 年起的天數)。本頁預設轉成 ISO 8601 字串(2026-06-13)。切到「raw」可保留序號,方便日後重新匯入 Excel。純時間儲存格會變成 'T14:30:00' 之類的字串。

公式怎麼處理?

公式不會被計算;只使用快取的計算結果(Excel 上次儲存時的值)。若你需要最新的公式結果,請用 Excel 開啟、按 F9 重新計算、儲存後再上傳。

檔案大小限制是多少?

由瀏覽器記憶體決定。現代桌機可處理數百 MB 內的活頁簿。對非常大的檔案(超過 100 萬列),請改用桌面腳本工具(Python pandas、Excel Power Query),瀏覽器會記憶體不足。