Excel 轉 JSON 工具
上傳 Excel 檔案,將表格資料轉換為 JSON 格式
拖放 Excel 檔案到此處,或點選選擇檔案
什麼是 Excel 轉 JSON?
Excel 轉 JSON 是一個線上資料格式轉換工具,可以將 Microsoft Excel(.xlsx/.xls)檔案中的表格資料轉換為 JSON(JavaScript 物件表示法)格式。
Excel 是全球最流行的試算表軟體,廣泛用於資料儲存、分析和報表製作。JSON 是現代 Web 應用程式和 API 中最常用的資料交換格式,具有結構清晰、易於解析的優點。
使用本工具,您可以快速將 Excel 表格資料轉換為 JSON 陣列,方便在程式設計、資料分析和 Web 開發中使用。所有處理均在瀏覽器本地完成,確保資料安全。
使用方式
使用方式
- 點選上傳區域或拖放 Excel 檔案(支援 .xlsx 和 .xls 格式)
- 若有多個工作表,請從下拉選單中選擇要轉換的工作表
- 選擇是否將第一列作為 JSON 物件的欄位名稱
- 格式化的 JSON 資料會自動產生,可直接複製
試算表說明
- 使用 JSON 前,請檢查所選的工作表、標題列、合併儲存格、空白列和日期格式。
- 試算表經常將顯示格式與原始值混在一起,因此轉換後請驗證數字和日期。
使用場景
技術原理
現代 .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),瀏覽器會記憶體不足。