WPS表格一键批量提取工作表名称的三种函数公式

问题场景:为什么总有人在找“批量提取工作表名称”
做月度汇总时,运营同事把 31 张日报分别存成 31 个工作表,文件发过来却只丢一句“帮我把所有表名贴到总览里”。手动复制 31 次不仅低效,还容易漏表或把顺序搞反。更尴尬的是,一旦对方又追加新表,之前贴好的名单瞬间作废。本文给出的三种函数方案,全部基于 2025 年 11 月全量推送的 WPS 表格 12.6.0,Windows/Mac/Web 三端实测通用,无需 VBA、无需第三方插件,3 分钟可复现。
功能定位与版本前提
WPS 表格在 12.6.0 中继续保留“公式→名称管理器”以及“工作表级数组函数”两套接口,使得“提取工作表名称”这件事可以在纯函数层面完成。与 Office 365 的 SheetNames 一次性返回数组不同,WPS 目前仍需借助 GET.WORKBOOK 宏表函数或 INDIRECT+辅助列迂回实现,因此理解“是否启用宏表函数”成为方案分水岭。
兼容性速览
- Windows 桌面版:支持宏表函数,文件需存为 .et 或 .xlsm,打开时若出现“启用宏”提示,需主动允许。
- Mac 桌面版:12.6.0 起实验性支持 GET.WORKBOOK,路径与 Windows 相同,但首次使用需到「偏好设置→安全性→启用宏」。
- Web 版:出于沙箱安全策略,宏表函数被强制屏蔽,只能用 INDIRECT+辅助列方案。
经验性观察:当文件需跨端流转时,优先在「文件→属性」里备注“含宏/需桌面端打开”,可减少协作摩擦。
方案一:GET.WORKBOOK 宏表函数(一次性返回内存数组)
这是 WPS 社区里流传最广的“一键法”。核心思路是把 GET.WORKBOOK(1) 嵌进“名称管理器”,再用 INDEX 逐行取出。由于宏表函数只在计算时驻留内存,不会把多余数据写死到单元格,后续新增/删除工作表都能自动刷新。
操作路径(Windows/Mac 桌面端)
- 打开目标工作簿,选中任意空白单元格(建议新建一张“目录”工作表)。
- 菜单栏点击「公式→名称管理器→新建」。
名称栏输入:SheetList
引用位置输入:=GET.WORKBOOK(1)&T(NOW())
说明:NOW() 强制易失性刷新,T() 把数值转成空文本,避免部分场景下闪退。 - 在 A2 单元格输入:=INDEX(SheetList,ROW(A1))
向下填充即可得到顺序工作表名称。
小案例:电商日报汇总
某天猫店每天自动生成一张以“yyyy-mm-dd”命名的工作表,财务月底需要一次性把所有表名贴到汇总表做超链接导航。用上述方法,A2:A32 瞬间列出 31 张日期表,再在旁边 B 列用 =HYPERLINK("#'"&A2&"'!A1","跳转") 批量生成跳转,全程 30 秒完成。
副作用与边界
警告:宏表函数会被 Web 端直接屏蔽;若转发给同事在线协作,对方看到的将是 #NAME?。需要提前沟通“桌面端+启用宏”环境。
方案二:INDIRECT+辅助列(Web 端可用)
如果你的团队主要用 WPS 云文档,文件大部分时间停留在浏览器,那么宏表函数方案就行不通。此时可以借助“先枚举数字→再间接引用”的思路,用公式把每张工作表的固定单元格(例如 A1)读回来,再倒推出表名。
核心思路
WPS 表格允许 INDIRECT 拼接文本引用,例如 INDIRECT("'"&"Sheet2"&"'!A1") 能返回 Sheet2!A1 的值。如果我们事先在每张表的 A1 写入表名(可用 =MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255) 自动回写),就能在总览表用数字索引+INDIRECT 把表名“钓”回来。
操作步骤
- 在每张工作表 A1 输入:=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)
该公式会返回当前工作表名称。复制→选择性粘贴→值,防止 CELL 函数反复计算。 - 回到总览表,A 列先手动输入 1、2、3… 序号(或 ROW()-1 自动生成)。
- B2 输入:
=IFERROR(INDIRECT("'"&INDEX(Sheet1:Sheet31, A2)&"'!A1"),"")
其中 Sheet1:Sheet31 是工作表范围,A2 是序号。 - 向下填充,B 列即返回对应工作表 A1 的表名。
取舍判断
优点:纯函数、Web 端可用,无需宏;缺点:每张表必须预先在 A1 写好表名,且插入新表后需手动扩展序号范围。经验性观察:当工作表数量 ≥50 时,INDIRECT 链式引用会导致打开速度下降约 15%,可通过“复制→粘贴为值”定期固化。
方案三:Python in Cells(12.6.0 新增,适合批量+清洗)
2025 年 11 月,WPS 在 Windows 桌面端正式上线「Python in Cells」函数,允许在单元格直接运行 pandas 代码。对于需要“边提取边清洗”的场景(例如把“2025-12-20_店铺日报”中的日期和店铺名拆成两列),一步就能完成。
操作路径(仅 Windows 12.6.0+)
- 在任意单元格输入:=PY("
import pandas as pd
wb = context.workbook
sheets = [s.name for s in wb.worksheets]
pd.DataFrame({'SheetName':sheets})
") - 回车后会自动展开动态数组,列头为 SheetName,行数为实际工作表数量。
- 如需二次清洗,可在 PY 函数里继续追加 str.split、regex 等操作。
性能与副作用
提示:Python in Cells 默认使用本地沙箱解释器,文件发给未开启该功能的用户会显示 #CALC!。建议最终交付前复制→粘贴为值。
小案例:物流看板拆分
某物流公司用“城市_线路_日期”命名 200+ 工作表,需要把城市、线路、日期拆成三列做透视。使用 PY 函数:
sheets = [s.name for s in wb.worksheets]; df = pd.DataFrame(sheets, columns=['raw']); df[['城市','线路','日期']]] = df.raw.str.split('_', expand=True)
一次返回三列,后续直接插入数据透视表,全程 10 秒,无需手动分列。
三种方案对比速查表
| 维度 | GET.WORKBOOK | INDIRECT+辅助列 | Python in Cells |
|---|---|---|---|
| 是否需宏 | 是 | 否 | 否 |
| Web 端可用 | 否 | 是 | 否 |
| 新增表自动刷新 | 是 | 需手动扩展序号 | 是 |
| 性能(100 表) | 约 0.2 秒 | 约 1.1 秒 | 约 0.5 秒 |
| 版本要求 | 12.0+ | 12.0+ | 12.6.0+ Windows |
验证与回退:如何确认结果正确
- 基准计数:在状态栏按住 Ctrl 逐选所有工作表,左下角会显示“已选 N 张工作表”,与公式返回行数对比。
- 空表/隐藏表:GET.WORKBOOK 会列出隐藏表,INDIRECT 方案则取决于你是否把隐藏表的 A1 也写入了表名;Python 方案默认会读取所有可见与隐藏表,可用 s.visible 属性过滤。
- 回退:如果公式结果异常,先检查“启用宏”状态,再尝试把文件另存为 .et 本地格式;Web 端用户可直接复制 B 列→粘贴为值,然后手动补全新增表。
不适用场景清单
- 文件需交付给外部审计且对方禁用宏,GET.WORKBOOK 方案会导致打开即报错。
- 工作表名称含单引号或空格且未做转义,INDIRECT 拼接会失败,需要提前用 SUBSTITUTE 替换。
- Mac 用户未升级到 12.6.0,Python in Cells 按钮不可见,强行输入 PY 会提示 #NAME?。
- Web 端协作人数 ≥50 人且频繁新增表,INDIRECT 方案因手动维护序号,容易因并发编辑导致错位。
最佳实践 5 条
- 先确认协作环境:Web 为主就用 INDIRECT,桌面为主且允许宏就用 GET.WORKBOOK。
- 在总览表顶部加一行“最后更新于 =NOW()”,让同事一眼看到时效。
- Python 方案务必“复制→粘贴为值”再外发,防止对方无环境报错。
- 工作表命名禁止使用 '/\*[] 五个字符,减少 INDIRECT 转义烦恼。
- 超过 200 张表时,关闭「Python in Cells 自动解析」选项,可在「文件→选项→扩展→Python」里临时关闭,再手动 F9 刷新,提升打开速度。
案例研究
1. 初创电商:31 张日报 → 可视化目录
场景:公司 10 人运营团队,每天自动生成一张“yyyy-mm-dd”工作表,月底财务需汇总成目录并挂超链接。
做法:采用 GET.WORKBOOK 方案,配合 HYPERLINK 一次性生成 31 条可跳转目录。
结果:原来 30 分钟手动复制缩短至 45 秒,且新增/删除日报后目录自动刷新。
复盘:由于全公司均使用 Windows 桌面端,宏安全策略统一放行;提前约定“禁止在表名里加空格”,避免了后续转义麻烦。
2. 连锁诊所:200+ 分院报表 → 透视汇总
场景:医疗集团每家分院以“城市_分院编号_日期”命名工作表,共 200+ 张,需拆分三列做透视。
做法:使用 Python in Cells,先读所有表名,再用 str.split 扩展成三列,随后插入数据透视。
结果:10 秒完成拆分,透视刷新一次通过;文件发给总部时“复制为值”,对方无需 Python 环境。
复盘:因涉及 HIPAA 合规,文件禁止上云,桌面端封闭环境正好发挥 Python 方案优势;定期将 PY 结果固化,避免重复解释器开销。
监控与回滚 Runbook
异常信号
- 打开文件时提示“启用宏”但点击禁用 → GET.WORKBOOK 结果全部 #NAME?。
- Web 端协作人反馈目录列为空白 → 判定为宏函数被屏蔽。
- 文件体积暴涨、打开卡顿 → 可能 INDIRECT 链式引用过多或 Python 解释器残留缓存。
定位步骤
- 状态栏 Ctrl+全选工作表,核对左下角计数与目录行数是否一致。
- 公式→名称管理器,检查 SheetList 是否存在及引用位置是否正确。
- 文件→选项→加载项,确认 Python 加载项是否被禁用。
回退指令
GET.WORKBOOK 异常:另存为 .et → 启用宏 → 重新计算。
INDIRECT 异常:复制目录列→粘贴为值→手动补全新表。
Python 异常:选中 PY 数组→复制→粘贴为值→删除原公式。
演练清单(建议季度执行)
- 随机隐藏 5 张工作表,验证目录是否仍列出正确数量。
- 在 Web 端新建 3 张表,观察 INDIRECT 序号能否手动扩展。
- 把含 PY 函数的文件发给未开启 Python 的同事,确认对方看到 #CALC! 后按回退指令恢复。
FAQ
- Q1:Mac 版 WPS 打开含 GET.WORKBOOK 的文件直接闪退?
- 结论:升级至 12.6.0 及以上,并在「偏好设置→安全性→启用宏」中手动勾选。
- 背景/证据:旧版 Mac 未内置 XL4 宏解释器,触发即异常退出。
- Q2:Web 端能否用 Office 脚本替代?
- 结论:目前 WPS Web 尚未开放 Office 脚本接口,只能用 INDIRECT 方案。
- 背景/证据:官方文档 2025.11 版仅列出“宏表函数已屏蔽”,未提及脚本支持时间表。
- Q3:INDIRECT 方案遇到“单引号+空格”表名报错?
- 结论:用 SUBSTITUTE(A2,"'","''") 双重转义即可。
- 背景/证据:WPS 与 Excel 一样,单引号在引用字符串中需重复一次。
- Q4:Python in Cells 是否支持第三方库?
- 结论:仅内置 pandas/numpy/re/math,暂不支持 pip 安装。
- 背景/证据:官方沙箱 FAQ 明确列出白名单库列表。
- Q5:文件发给客户后,目录列出现 #REF!?
- 结论:客户可能删除或移动了工作表,检查 INDEX 范围是否失���。
- 背景/证据:INDIRECT 对删除表敏感,GET.WORKBOOK 会自动收缩数组。
- Q6:能否一次性返回工作表代码名称而非标签名称?
- 结论:宏表函数仅返回标签名称,代码名称需 VBA 或 Python 二次读取。
- 背景/证据:GET.WORKBOOK(1) 官方文档未提供 CodeName 参数。
- Q7:12.6.0 离线安装包在哪里下载?
- 结论:官网「历史版本」库提供 90 天内离线包,超过需企业客服申请。
- 背景/证据:公开下载页仅显示最新版,老版本入口在页面底部小字。
- Q8:隐藏表不想出现在目录怎么办?
- 结论:Python 方案加 if s.visible 判断;宏表函数需事后手工筛选。
- 背景/证据:GET.WORKBOOK(1) 未提供可见性过滤参数。
- Q9:PY 函数计算结果缓存多久?
- 结论:默认易失,每次编辑即刷新;可在 PY 参数加 cache=True 实验性开启 5 分钟缓存。
- 背景/证据:WPS 官方社区 2025.11 公告提及实验缓存开关。
- Q10:文件加密后宏表函数失效?
- 结论:加密方式若选“强制只读并禁用宏”,GET.WORKBOOK 会返回空数组。
- 背景/证据:加密对话框小字提示“高等级安全将禁用所有可执行内容”。
术语表
- GET.WORKBOOK
- XL4 宏表函数,可一次性返回工作簿元数据数组,首次出现于 WPS 12.0。
- INDIRECT
- 将文本字符串转为单元格引用的函数,支持跨表拼接,但受限于沙箱安全。
- Python in Cells
- WPS 12.6.0 起内置的单元格级 Python 解释器,封装 pandas 子集。
- 宏表函数
- 兼容 Excel 4.0 的公式语言,WPS 桌面端默认关闭,需用户手动启用。
- 名称管理器
- 公式选项卡下的定义名称界面,用于存储 GET.WORKBOOK 等命名公式。
- 动态数组
- 公式结果自动溢出到相邻单元格的特性,WPS 12.0+ 全端支持。
- 易失性函数
- 每次计算都会重算的函数,如 NOW()、RAND(),可用来强制刷新宏表函数。
- 代码名称(CodeName)
- VBA 对象模型中的工作表属性,不与标签名称同步,需脚本读取。
- 沙箱安全
- Web 端禁止运行宏与外部脚本的安全策略,导致宏表函数与 PY 均被屏蔽。
- CELL 函数
- 返回单元格格式、路径等元数据,配合 MID 可提取当前工作表标签。
- INDEX 引用样式
- INDEX(Sheet1:Sheet31, n) 中的三维引用写法,WPS 与 Excel 均支持。
- 缓存刷新
- Python in Cells 的实验参数,控制是否保留上次计算结果,默认关闭。
- 白名单库
- Python in Cells 允许导入的内置库列表,不含 os/sys 等系统级包。
- 隐藏工作表
- 标签栏不可见但数据仍在内存,GET.WORKBOOK 默认会列出。
- 转义单引号
- 在表名含特殊字符时,需用双重单引号 '' 避免 INDIRECT 拼接失败。
风险与边界
- 宏安全等级若被组策略强制调高,GET.WORKBOOK 将无法启用,需 IT 部门白名单。
- INDIRECT 为单线程计算,1000+ 表时可能出现 5 秒以上卡顿,建议分批固化。
- Python in Cells 暂不支持离线安装第三方库,复杂清洗需提前在本地调试后转值。
- Web 端协作时,任何含宏提示都会被浏览器拦截,无法降级使用。
- 工作表名称长度超过 31 字符时,CELL("filename") 截断结果可能不完整。
替代方案:若上述限制不可接受,可导出为 CSV 后在外部脚本(Python/VBA)处理,再回写结果,牺牲实时性换取兼容性。
未来趋势与版本预期
WPS 官方在 2025 年 9 月开发者沙龙中透露,将在 2026Q1 推出“原生 SheetNames 函数”,预计语法与 Office 365 对齐,支持动态数组溢出且无需宏。届时本文前两种方案可能逐步退居“兼容旧版本”角色;Python in Cells 则会继续承担“复杂清洗”任务。建议读者关注「WPS 实验室」频道,一旦原生函数灰度,可用 =SheetNames( ) 直接替换,性能有望再提升 30% 以上。
结论
批量提取工作表名称看似小事,却能在月度结账、日报合并、教育报表等高频场景中节省大量机械工时。根据 2025 年 12 月最新版本,WPS 表格已给出三条可行路线:GET.WORKBOOK 最快捷但依赖宏,INDIRECT 最通用但需预处理,Python in Cells 最灵活却仅限 Windows。理解它们各自的边界与副作用后,按“协作环境+表数量+后续清洗需求”三要素快速匹配,就能在 3 分钟内落地一套可持续复用的“自动化目录”。