# CSV Explorer

> Excel 打不開的超大 CSV，直接在瀏覽器開：GB 級、幾百萬列沒問題。檔案串流匯入瀏覽器裡的 SQLite，附虛擬捲動表格、欄位型別偵測、排序篩選與 SQL 查詢，全程不上傳。

- URL: https://bytescope.dev/zh-Hant/csv-explorer/
- Locale: zh-Hant · Also: [en](https://bytescope.dev/en/csv-explorer.md) · [ja](https://bytescope.dev/ja/csv-explorer.md)
- Runs: 檔案在你的裝置上直接讀取且保留在本地。解析、資料庫與所有查詢皆在本分頁內執行——不上傳、不用帳號、伺服器上也無副本。
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

Excel 的上限是 1,048,576 列，而且早在碰到上限之前就已經不能用了：一個 900 MB 的匯出檔開個二十分鐘，最後還是當掉。這個頁面拿同一個檔案，幾秒鐘就能開始瀏覽。CSV 會從你的磁碟一段一段串流讀入、邊讀邊解析，寫進分頁裡以 WebAssembly 執行的貨真價實的 SQLite 資料庫——所以上限是你的磁碟還剩多少空間，不是記憶體，更不是 1985 年某人拍板的列數。實測 1.08 GB、836 萬列的檔案，在一般筆電的瀏覽器分頁裡大約兩分鐘匯入完成。

什麼都不會上傳。其他打得開這種大小檔案的服務，全都要你先把檔案放上他們的伺服器——而客戶名單、薪資檔、資料庫匯出檔，偏偏就是絕對不能這樣處理的東西。這裡的做法是把 `File` 交給 Web Worker，用 `file.stream()` 讀取，寫進 origin-private 檔案系統（`OPFS`）裡的資料庫。這個網站根本沒有上傳端點，就算手滑也沒有地方可以送；暫存資料庫在你離開時就會清掉。

你捲動的表格是一扇窗，不是整個檔案。只有游標附近的列會被抓出來——一次大約六十列，用 `LIMIT` 加 `OFFSET` 查匯入的資料表——所以第九百萬列和第九列一樣快。欄位型別在匯入時偵測（整數、浮點數、布林、日期、文字），規則是寧可不猜：`007` 和 `0912345678` 保留成文字，電話號碼不會被吃掉；`31/07/2026` 不會被當成日期，因為日／月還是月／日根本說不準；超出 JavaScript 安全範圍的整數也保留成文字，而不是被悄悄捨入。

排序、篩選和 SQL 查詢列骨子裡是同一件事：對你自己的資料表下 SQL。欄名會確實加上引號，標題裡帶引號字元也不會壞掉；你輸入的每個值都以綁定參數傳入，而不是直接拼進語句。SQL 查詢列本身完全不設限——這是你機器上、你自己的資料庫，`GROUP BY`、各種 join、`CREATE INDEX`，想怎麼下就怎麼下。目前檢視或查詢的結果都能再匯出成 CSV，逐列串流寫出，一千萬列的匯出只花一個緩衝區，而不是一千萬個字串。

## Limits

Does not edit cells or open Excel .xlsx files; it filters, sorts and profiles large CSV/TSV files.

## FAQ

### 這到底能開多大的 CSV？

比你的記憶體還大也行，因為沒有東西被留在記憶體裡。檔案以串流讀入，資料列落在瀏覽器 origin-private 檔案系統裡的 SQLite 資料庫檔中，所以實際上限是磁碟剩餘空間和瀏覽器給這個網站的儲存配額。幾 GB 是家常便飯；在一般筆電上，匯入速度是每秒幾十 MB。

### 我的檔案會被上傳到任何地方嗎？

不會。檔案由瀏覽器從你自己的磁碟讀取、在你機器上的 worker 執行緒解析、寫進同樣住在你機器上的資料庫。沒有帳號、沒有伺服器、沒有上傳端點。要清理的話，關掉分頁就是全部了。

### 為什麼 Excel 打不開我的 CSV？

通常是兩個原因。一張工作表最多只能放 1,048,576 列，再長就被默默截斷或直接拒開。而且 Excel 會把整個檔案載入記憶體，幾 GB 的匯出檔還沒碰到列數上限，記憶體就先耗盡了。這個頁面兩個問題都沒有：沒有列數上限，所有的列也從來不會同時存在。

### 我的檔案不是用逗號分隔的，有關係嗎？

沒關係。分隔符會從檔案開頭嗅探：逐一測試逗號、分號、tab 和 pipe，看哪一個在前面幾筆記錄裡切出來的欄位數最一致——比的是一致性而不是出現次數，所以一整欄塞滿逗號的長文字，贏不過每一列都切得整整齊齊的分號。頁面會告訴你它選了哪個、為什麼。

### 中文或日文變成亂碼，救得回來嗎？

可以——從下拉選單挑對的字元編碼，檔案就會用它重新匯入。編碼會從開頭 65,536 個位元組自動偵測，涵蓋 UTF-8、UTF-16、Big5、GBK、Shift_JIS、EUC-KR 和 Windows-1252；但老舊的 CSV 本身不帶編碼標記，所以有可能猜錯，結果也會標成「猜測」，而不是當成事實呈現。

### 我可以對自己的 CSV 下 SQL 嗎？

查詢列存在的意義就是這個。檔案會匯入成一個可以在語句裡直接點名的資料表，SQLite 看得懂的 SQL 都能跑——聚合、window function、`CREATE INDEX`、子查詢。結果會顯示在自己的表格裡，也能匯出成 CSV。

### 欄位太多或太少的列會怎麼處理？

只回報，不擅自修補。欄位不夠的列，缺的欄位留空。比標題欄數還多的列，多出來的儲存格會重新編成 CSV 收進一個獨立欄位——檔案裡的東西一個都不會消失，頁面也會告訴你有幾列發生了這種事。

### 它會改動我的檔案嗎？

絕不會。原始檔以唯讀方式開啟，從頭到尾不寫入。瀏覽器儲存空間裡那份匯入複本只是暫存資料庫，每次匯入都整個重建、你下次回來時已經清掉；匯出也是寫一個新檔案，不碰舊的。

## Related tools

- [SQLite Viewer](https://bytescope.dev/zh-Hant/sqlite-viewer.md) — 已有 .db 或 .sqlite 檔案？以相同方式瀏覽其資料表、結構與查詢。
- [VCF to CSV Converter](https://bytescope.dev/zh-Hant/vcf-to-csv.md) — 將 .vcf 聯絡人匯出檔轉為試算表可順暢開啟的 CSV——亦可雙向轉換。
- [File Type Identifier](https://bytescope.dev/zh-Hant/file-type.md) — 不確定檔案格式？透過標頭位元組而非副檔名辨識檔案型態。
