在线查询
输入公式后点击「查询版本」试试
接口说明
| 接口 | 方法 | 传参 | 返回 |
|---|---|---|---|
/api/version |
GETPOST | 查询串 ?f=公式,或 POST JSON {"formula":"=..."} |
版本号纯文本,如 WPS、2021、2003 |
/api/versions |
GETPOST | 同上 | JSON:{"version":"365","functions":{...}} |
GET 示例
https://excel.zhouzhouya.top/api/version?f==XLOOKUP(A1,B:B,C:C)
→ 2021 (纯文本)
https://excel.zhouzhouya.top/api/versions?f==SUM(A1)
→ {"version":"2003","functions":{"SUM":"2003"}}
POST 示例(长公式推荐)
curl -X POST https://excel.zhouzhouya.top/api/version \
-H "Content-Type: application/json" \
-d '{"formula":"=LET(f,LAMBDA(n,IF(n<=1,1,f(n-1)+n)),f(3))"}'
→ WPS
错误统一返回 400/413:JSON 接口为 {"error":"说明"},纯文本接口为说明文本。
在 Excel 表格中直接调用(仅 Windows)
Windows 版 Excel 2013 起提供的函数,可以在单元格里发起 HTTP 请求,与本接口配合可一步查出任意公式的版本。注意:WEBSERVICE 仅 Windows 版 Excel 支持(Mac 版 Excel、Excel 网页版、WPS 表格均不支持);ENCODEURL 在 WPS 中可用,Mac 版 Excel 与 Excel 网页版不支持。
FORMULATEXT(引用) — Excel 2013+(WPS / Mac 版 Excel 亦支持)
把某个单元格里的公式取出来,变成文本。
A2 的内容为公式 =XLOOKUP(A1,B:B,C:C) FORMULATEXT(A2) → 文本 "=XLOOKUP(A1,B:B,C:C)"
ENCODEURL(文本) — Excel 2013+(WPS 亦支持)
对文本做 URL 编码。公式里的 & ( ) " 空格 { } 等字符直接拼进网址会被截断或破坏参数,必须先编码。
ENCODEURL("=SUM(1)") → "%3DSUM%281%29"
WEBSERVICE(网址) — 仅 Windows 版 Excel 2013+,需联网
请求一个网址,把响应内容作为文本返回。本接口的 /api/version 返回纯文本,正好可以直接显示。
=WEBSERVICE("https://excel.zhouzhouya.top/api/version?f=%3DSUM%281%29")
→ 2003
组合用法(推荐)
判断 A2 中公式的版本(A2 里已有一条公式,无需改动它):
=WEBSERVICE("https://excel.zhouzhouya.top/api/version?f="&ENCODEURL(FORMULATEXT(A2)))
→ 单元格直接显示:2021 / WPS / 2003 …
公式以文本形式放在 A1(输入时最前面加英文单引号 ',如 '=IFS(A1,1)):
=WEBSERVICE("https://excel.zhouzhouya.top/api/version?f="&ENCODEURL(A1))
需要函数明细时改用 /api/versions,返回 JSON 文本:
=WEBSERVICE("https://excel.zhouzhouya.top/api/versions?f="&ENCODEURL(FORMULATEXT(A2)))
→ {"version":"WPS","functions":{"LET":"2021","LAMBDA":"365","IF":"2003"}}
提示:WEBSERVICE 每次重算都会发起网络请求,判定完成后可把该单元格「复制 → 粘贴为值」避免反复请求。WPS 表格支持 ENCODEURL,但不支持 WEBSERVICE(Mac 版 Excel 两者均不支持),因此无法在单元格内发起网络请求调用本接口——WPS 用户可把公式文本粘贴到页面顶部「在线查询」框查询,或直接在浏览器访问 API 网址。
在前端 / 程序中调用
const formula = '=LET(F,LAMBDA(n,IF(n<=1,1,F(n-1)+n)),F(3))';
// GET
const res = await fetch('https://excel.zhouzhouya.top/api/versions?f=' + encodeURIComponent(formula));
const data = await res.json();
// data => { version: 'WPS', functions: { LET: '2021', LAMBDA: '365', IF: '2003' } }
// POST(长公式推荐)
const res2 = await fetch('https://excel.zhouzhouya.top/api/versions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ formula: formula })
});
CORS 已全开放,任何网页均可直接调用。
版本判定规则
2003→2007→2010→2013→2016→2019→2021→365
- 最高版本:取公式中出现的最高版本函数。如
=IFS(A1,1)+SUM(1)→ 2016 - 函数引用语法糖:函数名作为参数传给
MAP/BYROW/REDUCE等(不带括号)同样识别,如=BYROW(B2:H8,SUM)会同时识别 BYROW 与 SUM;LAMBDA 参数名、LET 绑定名不会误判为函数 - WPS 独有函数:出现
REGEXP、EVALUATE、ROUNDBANK、REPTARRAY、SUBSTITUTES、BOOKNAME、SHEETNAME等 → WPS - LET 命名递归(365 不支持的写法)→ WPS
=LET(FIB,LAMBDA(n,IF(n<=2,1,FIB(n-1)+FIB(n-2))),FIB(10)) → WPS
- 自传参递归(365 支持)→ 365
=LET(FIB,LAMBDA(self,n,IF(n<=2,1,self(self,n-1))),FIB(FIB,10)) → 365
- 未识别到任何已知函数 → 400
{"error":"未在公式中识别到任何已知函数"}
限制
- 公式长度 ≤ 10000 字符(Excel 公式本身上限 8192),超长返回 400
- POST 请求体 ≤ 1MB,超限返回 413
- 无需鉴权、无频率限制,请合理使用