清單/陣列儲存格 → 文字¶
位置: 功能區 EGTools 索引標籤 → EGTools 群組 → 分割按鈕下拉式選單
Microsoft 365 測試版(版本 2610、組建 20520 以上)的儲存格內清單/陣列(Lists in Cells)
以豐富值形式儲存,因此在舊版 Excel(包括一般的 Microsoft 365)中只會顯示為 #UNKNOWN!
(Excel 2016 為 #VALUE!),無法讀取其中的項目。此命令直接讀取已儲存檔案中的 richData,
把每個清單儲存格改寫為下面的文字表示法。轉換後的文字可用相容函數
HAS · HASANY ·
HASALL · FLATTEN
評估(在 Microsoft 365 中以 EG.HAS 這樣的 EG. 前綴註冊,與原生函數並存)。
文字表示法¶
| 清單形態 | 表示法 | 範例 |
|---|---|---|
| 一欄清單(無巢狀) | 逗號分隔 — 與 ARRAYTOTEXT 簡潔格式相同。項目含 , ; { } " 或前後空白,或會被讀成數字/TRUE/錯誤的文字,以 "…" 引住(內部 " 寫成 "") |
Mon, Tue, Wed / "1,000", "TRUE" |
| 二維、巢狀陣列 | 陣列常數格式 — ARRAYTOTEXT 嚴格格式(文字全部加引號、無空白、; 分列、, 分欄)的大括號巢狀擴充 |
{"a",1;"b",2} / {"a",{"b","c"},"d"} |
| 只有一個數字/邏輯項目的清單 | 不寫成文字,而是寫入數字/邏輯值本身 | 3、TRUE |
- 陣列常數格式的文字在測試版 Excel 中前面加
=即可直接變回儲存格內陣列公式。 - HAS 系列函數兩種表示法都能讀取。逗號分隔清單或
{…}內的各項:數字形狀 → 數字、 TRUE/FALSE → 邏輯值、#N/A等錯誤名稱 → 錯誤;沒有逗號與大括號的單一文字不做分類, 原樣作為 1 個文字項目。引號未閉合等無法解析時不會報錯,整體視為 1 個項目。
操作流程¶
- 讀取檔案 — 把目前活頁簿的複本(SaveCopyAs)解壓到暫存資料夾,讀取其中的 richData (清單/陣列豐富值)。未儲存的編輯也包含在複本中,因此會照常反映。
- 確認對象 — 沒有清單儲存格時提示後結束。
- 確認視窗 — 提示將轉換 N 個值清單儲存格。若有 M 個公式結果的清單儲存格,會詢問
「是否也把它們固定為文字?」:是 = 全部 / 否 = 僅值儲存格 / 取消。
(公式清單儲存格儲存為
_xlfn._ARRAY(...),在舊版中本來就是#NAME?。選「否」且沒有值儲存格時結束。) - 儲存關卡 + 備份 — 尚未儲存時詢問是否儲存(拒絕/取消則中止),套用前會自動儲存備份檔案
(與活頁簿相同的資料夾,
原檔名_egbak_<時間>.<副檔名>— 與套用舊版相容相同的程序)。 備份失敗則不會進行。 - 套用 — 依下面的規則把每個清單儲存格改寫為文字(或值)。
- 完成視窗 — 告知已轉換的儲存格數、已略過的儲存格數(如有)與備份檔案路徑。
套用規則¶
| 對象 | 處理 |
|---|---|
| 值清單儲存格 | 只改寫目前值為錯誤(#UNKNOWN!/#VALUE!)的儲存格。儲存後已編輯、不再是錯誤的儲存格會略過 |
| 公式清單儲存格 | 只在確認視窗選「是」時轉換。原公式會以 EgListRemoved: <公式> 保存在儲存格註解中(已有註解時接在其後) |
| CSE 陣列區域 | 先把整個區域固定為值,再向該儲存格寫入文字 |
| 會被自動解讀為公式/數字/TRUE 的文字 | 先把儲存格格式改為文字(@)再寫入 |
| 只有一個數字/邏輯項目的清單 | 不寫成文字,而是寫入數字/邏輯值本身 |
非 _array 的豐富值(儲存格內圖片、連結的資料類型等) |
不是轉換對象 |
備註¶
- 在測試版 Excel 中同樣可以執行此命令,因此也可用於與他人共用前預先轉換。
- 轉換後用 HAS / HASANY / HASALL / FLATTEN 可得到相同結果。若文件在測試版 Excel 中以
=HAS(...)之類的公式儲存,套用舊版相容會把_xlfn.HAS、_xlfn._xlws.FLATTEN符記轉換為 EGTools 相容函數名稱。 - 建議執行順序:① 清單/陣列儲存格 → 文字,② 套用舊版相容(在 Microsoft 365 非測試版
則為還原為內建函數)。遵守此順序,
=HAS(...)之類的公式才會得到正確結果而不是#VALUE!。若對公式結果的清單儲存格選了「否」而保留原樣,其_xlfn._ARRAY(...)公式會由套用舊版相容 改寫為ARRAYTOTEXT(…,1)。 - 若要復原,請開啟備份檔案。公式儲存格也可從註解中的
EgListRemoved:公式確認。