跳转至

列表/数组单元格 → 文本

位置:功能区 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: 公式确认。