ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Excel/WPS网络函数库实战:用VBA封装HTTP请求与JSON解析

Excel/WPS网络函数库实战:用VBA封装HTTP请求与JSON解析 简介这是一套面向Excel与WPS用户的网络函数库资源主要解决电子表格软件原生无法直接访问网络服务的问题。通过VBA调用Winsock或MSXML等网络接口可实现在单元格中直接发起HTTP请求、获取接口数据并写回工作表适用于需要实时数据抓取、网络接口测试或自动化报表更新的办公与开发场景。资源包共67个文件整体55.44MB以DLL动态链接库为主31个另有XML配置/说明、JS脚本、XLSX示例工作簿及XLSM宏文件等。其中包含ExcelAPIUpdateTool工具及安装卸载教程可简化网络库的部署和更新流程附带“公式大全”和“快递查询”等示例展示了不同网络接口的调用方式。目前已有2572人学习下载。资源内还集成了NPOI、Spire、EntityFramework等常用库便于二次扩展。无论是办公人员还是VBA开发者都能借助这套函数库快速打通Excel/WPS与外部网络服务之间的数据通道。1. 网络函数库是什么把“联网取数”变成单元格里的一条公式你手上有一份渠道编号清单500 行每一行都要去查最新的物流轨迹、汇率或者报表接口的数据。手工开网页复制粘贴上午九点贴到下午三点贴完还要担心哪一格粘错列。网络函数库要解决的就是这个过程——把 HTTP 请求、参数拼接、返回解析封装成 Excel 或 WPS 表格能直接调用的函数让NET_GET(https://...)这样的公式把结果自动落到单元格里。它不是一个商业软件的名字而是一套可以自己搭的工程方案。这篇笔记适合两类人天天跟接口数据打交道、又不想上爬虫框架的运营和财务以及被要求把线上数据同步进表格的表格重度用户。我会从选型开始一路写到能跑的代码、要改的参数和最常见的翻车点。2. 为什么原生表格撑不起网络函数库自带函数、Power Query 与宏的边界2.1 原生 WEBSERVICE、FILTERXML 的短板与 WPS 兼容性很多人的第一反应是Excel 不是自带 WEBSERVICE 和 FILTERXML 吗确实Excel 里有这两个函数组合起来可以在单元格里发起请求并解析 XML 返回。但真实业务里有两个硬伤。第一个硬伤是格式错位。今天绝大多数接口返回的是 JSON不是 XML。FILTERXML 只认 XML 结构拿 JSON 喂给它直接返回#VALUE!。虽然 JSON 在语法上接近 XML 的亲戚但解析器不认你只能绕道。第二个硬伤是没有 POST、不能自定义请求头。WEBSERVICE 本质就是 GET连带鉴权的接口都接不了——现在稍微正规一点的业务接口都要求Authorization头原生函数连门都进不去。WPS 的兼容性是更现实的坑。WPS 表格里这两个函数的支持情况历来不稳定有些版本根本没有 WEBSERVICE有些版本函数在但行为跟 Excel 不一致。我的习惯是拿到新环境先花三十秒做验证在单元格里输入WEBSERVICE(https://www.baidu.com)如果返回#NAME?说明这个版本连函数都没注册如果返回一大段 HTML 文本说明能用。这一步能帮你省掉后面一整天的排查时间。结论先放在这里原生函数只能当“有没有网络”的探针撑不起一个正经的网络函数库。真要做批量取数还是得自己封装。2.2 三条可行路线的选型对比Power Query、VBA 加载宏、WPS JS 宏把需求拆开看Excel 和 WPS 里能落地“网络函数库”的路线有三条。路线适用场景门槛主要局限Power Query仅 Excel周期性导入接口数据清洗后回表中需学查询编辑器不在单元格里公式化WPS 没有VBA 封装自定义函数Excel 和装 VBA 组件的 WPS 都能用中VBA 语法 接口调试同步请求会卡界面需启用宏WPS JS 宏较新版本 WPS 自带中JavaScript 语法对象模型与 VBA 不同老版本不支持Power Query 的优点是清洗能力强、支持数据源刷新缺点是它走的是“查询面板 刷新”的流程不是一个能在任意单元格里随时调用的函数。如果你需要的是一个让业务同事自己填 URL、回车就出结果的工具Power Query 的体验是断的。而且 WPS 里没有 Power Query双平台的团队直接用不了。VBA 封装是兼容面最广的做法。Excel 全系支持WPS 只要补一个 VBA 兼容组件也能跑。自定义函数写好后调用体验和普通函数完全一样还能配合缓存、限流这些工程手段做控制。缺点是同步请求会让 Excel 在请求期间“转圈”量大时容易看起来像死机——这个坑后面专门讲。WPS 的 JS 宏是另一个值得关注的方向。较新版本的 WPS 自带 JS 宏环境语法是 JavaScript对拿到接口数据后想顺手做字符串处理的人来说比 VBA 顺手得多。但它跟 VBA 的对象模型有差异网上抄的 VBA 代码不能直接搬过去用。我一般这么选工作簿要长期在多人之间传来传去选 VBA 加载宏兼容性最稳只有自己用而且用的 WPS 版本较新优先 JS 宏需要复杂的数据清洗和合并Power Query 打底网络请求部分用少量 VBA 补。2.3 先定函数形态再写代码自定义函数与宏按钮怎么分工很多人一上来就写代码写到一半才发现不知道该用“单元格函数”还是“按钮”。这两者定位完全不同提前定好能省很多返工。自定义工作表函数UDF返回单值适合“一行一个请求”的场景。比如你有 500 个快递单号每个单号查一次物流状态在 C 列填NET_GET(...)下拉填充结果逐行落格。它的好处是天然和表格结构对齐随时能看到哪个单号失败坏处是公式每次重算都会重新发起请求而且 500 个同步请求逐个跑Excel 界面会一直卡。宏按钮则负责“一次拉全量”点一下按钮代码里用循环把数据写入指定区域。它适合批量导入但点击后想查“某一行到底出了什么错”就得靠代码里的日志输出体验不如函数清晰。我的组合方案是自定义函数负责单格取值和公式透传宏按钮只做一件事——把整张工作表的网络函数统一触发重算。自定义函数里加缓存参数按钮触发重算时只刷新必要数据而不是让 Excel 把所有公式从头到尾拉一遍。命名规范也建议在最开始就定好。函数统一带NET_前缀比如NET_GET、NET_POST、NET_PICK一眼能看出是网络函数跟表格自带的函数区分开。后面接手的同事翻公式的时候不会把网络请求当成普通文本处理函数。3. 用 VBA 搭一个最小可用的网络函数库GET、POST、JSON 提取3.1 环境准备VBA 编辑器、信任设置与加载宏存放位置写代码之前先花十分钟把环境理顺。Excel 里打开 VBA 编辑器路径是“开发工具 → Visual Basic”如果没有“开发工具”选项卡去“文件 → 选项 → 自定义功能区”里勾选。WPS 则要看版本部分版本自带 VBA 环境个人版默认不带需要额外装 WPS VBA 兼容组件才能进入 VBA 编辑器。如果你用的 WPS 版本比较新又不想折腾 VBA 组件可以直接跳到第 4 章用 JS 宏方案。进入 VBA 编辑器后在“插入 → 模块”里新建一个标准模块函数就写在模块里。这里有两个设置直接影响后面能不能跑通。第一宏安全级别。Excel 的“文件 → 选项 → 信任中心 → 宏设置”里选“启用所有宏”或者“禁用所有宏并发出通知”并且让使用者每次打开时点“启用内容”。不启用宏自定义函数在单元格里直接显示#NAME?没有任何提示。WPS 在“设置 → 安全和隐私”里也有类似的宏限制开关。第二函数的存放位置。如果你只在当前工作簿里用直接放在模块里就行保存为.xlsm带宏的工作簿。如果要做成团队通用工具把模块导出成.bas文件再做成加载宏.xlam放进%APPDATA%\Microsoft\AddIns目录然后去“加载项”里勾选启用。这里提醒一句要不要做加载宏取决于使用范围自己用就放当前工作簿少一层加载项失效的麻烦。3.2 NET_GET带超时和请求头的 GET 函数下面这个函数是网络函数库的地基负责把任意 URL 的内容拉回来Function NET_GET(ByVal url As String, Optional ByVal timeoutSec As Long 10) As String 发 GET 请求返回接口原始文本 失败时返回 ERROR: 状态码/描述 Dim http As Object Set http CreateObject(MSXML2.XMLHTTP) On Error GoTo ErrorHandler http.Open GET, url, False False 同步请求等结果返回再继续 http.setRequestHeader User-Agent, Mozilla/5.0 部分接口拒绝空 UA http.timeout timeoutSec * 1000 单位是毫秒 http.send If http.Status 200 Then NET_GET http.responseText Else NET_GET ERROR: http.Status End If Set http Nothing Exit Function ErrorHandler: NET_GET ERROR: Err.Description Set http Nothing End Function逻辑说明Open的第三个参数写False表示同步请求这是自定义函数能“在公式里直接返回值”的前提——如果是异步请求函数会立刻返回拿不到结果。setRequestHeader是很多接口的硬性要求不少服务器对没有 User-Agent 的请求直接返回 403。timeout单位是毫秒所以传进来的秒数要乘 1000。最后错误处理里捕获所有异常把错误描述拼进返回值而不是让公式直接崩掉。参数说明url必须是完整地址带http://或https://前缀timeoutSec默认 10 秒可以根据接口稳定性调一般内网接口设 3 秒就够慢接口才需要 10 秒以上。返回值里ERROR:404、ERROR:500这类前缀是约定好的错误标记后面要用这个标记做条件格式和统计。3.3 NET_POST对接带鉴权的业务接口GET 能解决一半场景另一半要靠 POST。业务接口通常要求提交 JSON body并且带鉴权头。这个函数把常用的几个动作都封装进去Function NET_POST(ByVal url As String, ByVal body As String, _ ParamArray headers() As Variant) As String 发 POST 请求body 传 JSON 字符串 headers 按成对传入Authorization, Bearer xxx, Content-Type, application/json Dim http As Object Set http CreateObject(MSXML2.XMLHTTP) On Error GoTo ErrorHandler http.Open POST, url, False http.setRequestHeader Content-Type, application/json 逐个设置可选请求头 Dim i As Long For i LBound(headers) To UBound(headers) Step 2 http.setRequestHeader CStr(headers(i)), CStr(headers(i 1)) Next i http.timeout 10000 http.send body If http.Status 200 Or http.Status 201 Then NET_POST http.responseText Else NET_POST ERROR: http.Status : http.responseText End If Set http Nothing Exit Function ErrorHandler: NET_POST ERROR: Err.Description Set http Nothing End Function逻辑说明ParamArray是 VBA 里实现“可变参数”的方式调用时参数按“名字, 值”交替往后传例如NET_POST(url, body, Authorization, Bearer xyz123)。默认设置了Content-Type: application/json大多数接口都按这个标准如果遇到需要表单格式的接口把传参里写一个Content-Type, application/x-www-form-urlencoded就能覆盖默认值。错误分支里额外带上了接口返回的文本排查鉴权问题时能直接看到服务端的错误消息。参数说明body是一个 JSON 字符串可以手工拼接也可以在前面套TEXTJOIN()把单元格内容拼成 JSON。注意 VBA 里字符串长度不是问题但过长的 body 会拖慢请求速度单次 POST 超过 1MB 的建议拆批。headers是可选参数最少可以一个都不传。3.4 NET_PICK把 JSON 里的值取出来当公式用请求发出去文本拉回来了下一个问题是怎么从一长串 JSON 里取到想要的字段。完整的 JSON 解析在 VBA 里没有原生支持社区里流传最广的做法是引入一个叫 JsonConverter 的公共模块那个模块能处理任意嵌套结构。我这里给一个更轻量的版本专门应付大多数业务接口的“浅层取值”Function NET_PICK(ByVal jsonText As String, ByVal key As String, _ Optional ByVal nth As Long 1) As String 从 JSON 文本中取指定 key 的值支持字符串/数字/true/false/null 以及简单的数组 {...} 片段重复 key 用 nth 指定取第几个 Dim re As Object, matches As Object Dim pat As String Set re CreateObject(VBScript.RegExp) re.Global True 正则原样为: key\s*:\s*([^]*|-?\d(?:\.\d)?|true|false|null|\{[^{}]*\}|\[[^\[\]]*\]) VBA 字符串里每个双引号要写成两个双引号 pat \ key \ 匹配 key pat pat \s*:\s*( 冒号与空白 pat pat \[^]*\| 双引号字符串 pat pat -?\d(?:\.\d)?| 数字 pat pat true|false|null| 布尔与空值 pat pat \{[^{}]*\}| 简单对象 pat pat \[[^\[\]]*\]) 简单数组 re.Pattern pat Set matches re.Execute(jsonText) If matches.Count 0 Then NET_PICK NOT_FOUND Exit Function End If If nth 1 Or nth matches.Count Then nth 1 Dim raw As String raw matches(nth - 1).SubMatches(0) 如果是字符串类型剥掉首尾引号 If Left$(raw, 1) Then raw Mid$(raw, 2, Len(raw) - 2) End If NET_PICK raw End Function逻辑说明这个函数用正则匹配key: 值的片段捕获组里同时考虑了字符串、数字、布尔值、null、简单对象和简单数组六种形态返回时自动剥掉字符串首尾引号让你拿到的是“值”而不是“带引号的值”。它是一个约定边界很清楚的工具只取浅层 key不支持深层路径。要取嵌套值常见做法是分两步——先用NET_PICK把内层 JSON 片段取到中间单元格再对中间单元格用一次NET_PICK。例如返回的 JSON 里data.list是个数组第一步取data第二步对片段再取你要的字段。参数说明nth用于处理同一个 key 出现多次的情况默认取第一个。拿到的值如果超过 32767 个字符Excel 单元格会截断这个限制在第 5 章单独讲。4. 把网络函数接进日常表格URL 拼接、刷新节奏与 WPS JS 宏方案4.1 单元格公式串联动态参数拼接与重算时机函数写好了真正的用法是把它跟单元格内容串起来。一个最常见的模板是A 列放业务编号B 列拼 URLC 列发请求D 列取字段。公式按这样的链路写下去B2: $B$1 ?code A2 page B2 其中 B1 是接口地址 C2: IF(OR(A2,B1),,NET_GET(B2)) D2: IF(LEFT(C2,5)ERROR,请求失败:C2,NET_PICK(C2,name))这段公式的逻辑是先在 B 列用文本连接把动态参数拼进 URL然后在 C 列判断参数是否为空再决定发不发请求最后在 D 列把错误前缀挡在前面出错就显示“请求失败”正常就取 JSON 里的name字段。这里的IF(OR(...))不是摆设它可以阻止你下拉 500 行时 Excel 对空行发 500 个无效请求。重算时机是这个方案里最重要的节奏控制。Excel 的默认计算模式是自动重算意味着你每改动单元格、每次打开文件所有网络函数都会重新请求一次。如果你的接口是查询型问题不大如果是提交型 POST打开一次文件就等于重新提交一次业务数据这在生产环境里能闹出大事。我一般会把承载网络函数的工作簿设为手动重算公式选项卡 → 计算选项 → 手动。手动之后日常编辑不会触发请求只有你做两件事时才真正发网络请求一是按 F9 全簿重算二是通过宏按钮只重算指定工作表。配合“粘贴为值”的习惯数据拉完确认无误后把结果列整列复制、选择性粘贴为数值让数据脱离公式独立存在。这样既保留了随时刷新的“活表”又有一个不怕误触发的“死表”相当于给数据上了个后悔药。4.2 WPS 的 JS 宏路线同需求的另一种写法如果你的环境是 WPS 较新版本又不想折腾 VBA 组件JS 宏是一条更现代的路线。WPS 的“开发工具 → JS 宏”能打开 JavaScript 宏编辑器在里面可以定义一个函数函数名在单元格里直接调用这一点跟 VBA 完全一致。下面是用 JS 宏实现 GET 请求的版本// 在 WPS 表格的 JS 宏编辑器中新建模块后粘贴 // 单元格用法: NET_GET(https://example.com/api) function NET_GET(url, timeoutSec) { timeoutSec timeoutSec || 10; let xhr new XMLHttpRequest(); xhr.open(GET, url, false); // false 同步等返回结果 xhr.timeout timeoutSec * 1000; try { xhr.send(); if (xhr.status 200) { return xhr.responseText; } return ERROR: xhr.status; } catch (e) { return ERROR: e.message; } }逻辑说明JavaScript 里的XMLHttpRequest跟 VBA 里MSXML2.XMLHTTP是同一个底层模型属性名几乎一样open的第三个参数同样是同步开关。JS 宏环境自带try/catch错误信息比 VBA 的On Error更直观这是它好排查的优势。WPS 的 JS 宏对象模型跟 Excel VBA 不同不能用WorksheetFunction那套但单元格交互用Range(A1).Value2这类 API熟悉 Excel 的人半天就能上手。参数说明timeoutSec是可选参数不传默认 10 秒。这里返回的是responseText原始文本需要提取字段时JavaScript 里直接用JSON.parse()就能把返回文本转成对象比 VBA 正则取 key 舒服太多。所以如果你能用 JS 宏复杂的 JSON 解析工作量会直线下降只有被迫用 VBA 时才需要NET_PICK。4.3 限流与缓存加一层缓存把请求次数降一个数量级网络函数库跑起来之后紧接着遇到的就是限流问题。一个接口通常有每分钟调用次数限制500 行数据的表格下拉一次就发 500 个请求连续刷新几次接口直接返回 429。破解思路很简单加缓存相同 URL 在有效期内只请求一次。下面这个带缓存的 GET 函数是生产环境里我会替换NET_GET的版本Private mCache As Object Private mCacheTime As Object Function NET_GET_CACHE(ByVal url As String, Optional ByVal cacheSec As Long 300) As String 带缓存的 GET相同 URL 在 cacheSec 秒内只请求一次 If mCache Is Nothing Then Set mCache CreateObject(Scripting.Dictionary) Set mCacheTime CreateObject(Scripting.Dictionary) End If 命中缓存且未过期直接返回 If mCache.Exists(url) Then If Timer - mCacheTime(url) cacheSec Then NET_GET_CACHE mCache(url) Exit Function End If End If Dim resp As String resp NET_GET(url) mCache(url) resp mCacheTime(url) Timer NET_GET_CACHE resp End Function逻辑说明模块级私有变量mCache和mCacheTime在 Excel 运行期间一直驻留同一个url第一次请求后结果被记录第二次起只要没超过cacheSec就直接返回缓存值不再发网络请求。这对“同一批单号反复查状态”的场景特别有效因为大部分查询短时间内不会变刷新一次表格只需要请求几十个新单号而不是全部 500 个。参数说明cacheSec默认 300 秒也就是 5 分钟。物流类接口可以设 60 秒汇率类可以设 3600 秒。这里有两个细节要注意一是Timer会在午夜归零跨零点之后新旧时间戳会算出差值异常如果表格要跨天运行用Now和DateDiff代替二是 URL 如果带随机时间戳参数比如_t487123缓存永远不可能命中拼接 URL 时要把这类参数去掉。5. 网络函数库避坑与排查从天而降的卡死、乱码与 #NAME?5.1 大批量 GET 导致 Excel 假死现象500 行公式下拉后Excel 开始转圈标题栏出现“未响应”CPU 占用持续高位严重时只能强制结束进程。原因每个单元格的同步请求都在主线程执行500 个请求是串行等待的每个 2 秒就是 1000 秒界面当然卡死。另一个隐藏原因是同一接口短时间内收到大量请求会触发服务端限流返回 429 后 Excel 继续重试进一步拖慢。解决第一请求前用IF(A2,,...)把空行挡掉第二把公式从NET_GET换成带缓存的NET_GET_CACHE第三把计算模式改为手动下拉公式时不重算拉完再统一按 F9避免每填一行就发一批请求第四把timeoutSec从 10 秒调低到 3 秒失败请求快速退出。5.2 加载项被禁用函数变成 #NAME?现象别人打开你发过去的工作簿所有NET_开头的公式显示#NAME?对话框提示加载项被禁用或者“宏已被禁用”的黄色条一直不消失。这个问题在网上检索“excel加载项被禁用”能见到大量同类求助。原因自定义函数不在当前工作簿里而是放在加载宏里目标机器的宏安全设置禁用了这个加载项或者加载项路径变了Excel 开机找不到WPS 环境则可能是没装 VBA 兼容组件函数根本不被识别。解决最简单的兜底是直接把函数模块复制到目标工作簿里保存为.xlsm不依赖加载项要用加载项就固定加载项安装路径并确认在“加载项”列表里勾选同时让对端去信任中心启用宏。WPS 里确认 VBA 组件正常安装后再看“设置 → 安全和隐私 → 宏安全”把级别调到允许运行。5.3 中文乱码UTF-8 与 responseBody 转码现象英文字段正常中文字段显示成我的或锟斤拷这类乱码。原因MSXML2.XMLHTTP的responseText会按响应头里的字符集声明解码很多接口不声明或声明不一致Excel 本地按 ANSI 解析两边对不上就乱码。解决不要用responseText改读responseBody字节流并用ADODB.Stream指定字符集解码Function NET_GET_UTF8(ByVal url As String) As String Dim http As Object, stream As Object Set http CreateObject(MSXML2.XMLHTTP) http.Open GET, url, False http.send If http.Status 200 Then NET_GET_UTF8 ERROR: http.Status Exit Function End If Set stream CreateObject(ADODB.Stream) stream.Type 1 二进制模式先写入原始字节 stream.Open stream.Write http.responseBody stream.Position 0 stream.Type 2 文本模式再按指定字符集读出 stream.Charset utf-8 NET_GET_UTF8 stream.ReadText stream.Close End Function逻辑说明先用二进制模式把字节原样写入ADODB.Stream再把流切到文本模式并指定utf-8字符集读取绕开responseText的自动解码。如果接口返回的是 GBK把Charset改成gb2312或GBK即可。乱码类问题都是字符集错位确定接口实际返回哪种编码后再填这个参数。5.4 HTTPS 证书与 ERROR: 0现象接口在 A 电脑上正常在 B 电脑上返回ERROR:0或者ERROR: 证书错误有时同一个文件今天能用明天报错。原因MSXML2.XMLHTTP对 HTTPS 证书和 TLS 协商的兼容性不如系统级的WinHttp组件部分服务器配置了较新的 TLS 版本或证书链不完整XMLHTTP 直接握手失败返回 0拿不到 HTTP 状态码。这个现象在不同机器上表现不一致排查时很容易让人觉得是玄学其实是组件层面的差异。解决把CreateObject(MSXML2.XMLHTTP)换成CreateObject(WinHttp.WinHttpRequest.5.1)其余代码几乎不用改。WinHttp 是更干净的 HTTP 客户端不自动带浏览器 UA 和 Cookie更适合接口调用。对于超时类问题还可以用SetTimeouts单独控制连接、发送、接收的时限比统一timeout更精确。证书问题如果发生在企业内网需要由网络管理员确认证书签发策略表格这边没有后悔药可吃只能从组件选择上规避。5.5 返回内容被截断单元格 32767 字符上限现象接口返回一大段文本单元格里只显示前面一小段导出成 CSV 后数据也是不全的。原因Excel 单元格的存储上限是 32767 个字符超过部分直接丢弃编辑栏显示上限更小只有 1024 字符。这不是表格显示问题是数据真的没存进去。解决不要把整段大 JSON 直接放进单元格。用NET_PICK或 JS 宏里的JSON.parse只提取你需要的字段把大文本拆小再落格。确实需要保存完整返回内容的场景用FileSystemObject把文本写到本地文件单元格里只保留文件路径既规避了长度限制也给后续对账留了原始凭据。6. 进阶给网络函数库加缓存开关和出错可见性函数库能跑通只是第一步真正好用还要解决两个问题什么时候走缓存、出错时能不能一眼看见。我的做法是在模块顶部加一个全局开关联调时走真实请求跑生产时开缓存。Public NET_DEBUG As Boolean True 不走缓存返回前置调试信息 Function NET_GET_EX(ByVal url As String, Optional ByVal cacheSec As Long 300) As String Dim resp As String If NET_DEBUG Then resp NET_GET(url) 联调时把状态和时间戳放在返回值前面 NET_GET_EX Now() | resp Else resp NET_GET_CACHE(url, cacheSec) NET_GET_EX resp End If End Function逻辑说明NET_DEBUG是公开变量在宏里或者另一个单元格函数中切换。联调阶段输出时间戳和原始返回让你能确认“这次拿到的是不是最新数据”生产阶段自动走缓存。这个开关的价值在于不用改公式、不用删缓存就能随时切到调试视角。出错可见性的标准做法是条件格式配合错误前缀。对结果列设置一个规则LEFT(D2,5)ERROR错误行自动标红。再配合一行统计公式COUNTIF(D2:D501,ERROR:*)一眼看清这次刷新失败了几条而不是被淹没在 500 行数据里。数据落库之后把结果列“选择性粘贴为值”这份快照就不依赖网络和公式了。我习惯保留两张表一张“活表”带网络函数用于每天定时刷新一张“死表”装纯数值用于正式汇报和存档。这样即使第二天接口挂了汇报数据也还是昨天的真实值不会跟着一起报错。最后说一个我自己的教训。第一次给业务部门做自动报价表时我没做缓存也没留着“死表”周一早上大家同时打开文件200 个公式一起请求接口直接触发限流整张表刷满了ERROR:429全组人等了一上午。后来我把缓存、重算模式、粘贴为值这三件事全部做进了交付文档再没出过类似问题。网络函数库的价值不在函数本身在于它让表格里的数据有了“可刷新、可追溯、可控出错”的边界。先把边界立住再去追求接口数量希望帮到你。本文还有配套的精品资源点击获取
返回列表