跳轉到

清單/陣列儲存格 → 文字

位置: 功能區 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 個項目。

操作流程

  1. 讀取檔案 — 把目前活頁簿的複本(SaveCopyAs)解壓到暫存資料夾,讀取其中的 richData (清單/陣列豐富值)。未儲存的編輯也包含在複本中,因此會照常反映。
  2. 確認對象 — 沒有清單儲存格時提示後結束。
  3. 確認視窗 — 提示將轉換 N 個值清單儲存格。若有 M 個公式結果的清單儲存格,會詢問 「是否也把它們固定為文字?」:是 = 全部 / 否 = 僅值儲存格 / 取消。 (公式清單儲存格儲存為 _xlfn._ARRAY(...),在舊版中本來就是 #NAME?。選「否」且沒有值儲存格時結束。)
  4. 儲存關卡 + 備份 — 尚未儲存時詢問是否儲存(拒絕/取消則中止),套用前會自動儲存備份檔案 (與活頁簿相同的資料夾,原檔名_egbak_<時間>.<副檔名> — 與套用舊版相容相同的程序)。 備份失敗則不會進行。
  5. 套用 — 依下面的規則把每個清單儲存格改寫為文字(或值)。
  6. 完成視窗 — 告知已轉換的儲存格數、已略過的儲存格數(如有)與備份檔案路徑。

套用規則

對象 處理
值清單儲存格 只改寫目前值為錯誤(#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: 公式確認。