ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

DeepSeek 与 Excel 结合:公式生成、VBA 宏与 Python 脚本实战

DeepSeek 与 Excel 结合:公式生成、VBA 宏与 Python 脚本实战 简介这份资源围绕DeepSeek与Excel结合提升办公效率展开面向具备一定Excel基础、日常数据处理与分析任务较重的职场人士。内容涵盖DeepSeek的技术架构解析包括自注意力机制、多头注意力机制、前馈神经网络与混合专家架构并给出获取API Key、配置Excel环境的具体路径如安装OfficeAI助手插件或使用VBA脚本。实战部分聚焦数据清洗、统计分析、数据透视表制作、智能公式生成与图表推荐等场景帮助读者用自然语言降低复杂操作门槛。资源包为1个docx文档约38KB结构紧凑便于按章节查阅与对照实践。目前已有209人学习适合希望借助大模型优化表格处理流程、提升数据可视化效果的办公人员参考。1. DeepSeek 与 Excel 结合从手工拉表到对话式数据处理每天下午四点财务群里准时弹出「谁把上个月的销售明细再汇总一下」你打开那个 12 万行的 Excel筛选、透视、写 VLOOKUP半小时过去公式还报着#N/A。这不是你一个人的困境。DeepSeek 与 Excel 的结合解决的正是这类「数据在表里、逻辑在人脑里、操作靠手速」的低效循环。它把大模型的语言理解能力接到表格处理链路上你用自然语言描述需求模型生成公式、VBA 脚本或 Python 代码再回写到 Excel 里执行。适合每天跟表格打交道的运营、财务、数据分析师也适合想用 API Key 把重复劳动自动化掉的工程师。核心不是让 AI 替你点鼠标而是让它替你写那串你懒得查文档的公式。2. 三条落地路线公式生成、VBA 宏与 Python 脚本怎么选2.1 先搞清楚 DeepSeek 在表格场景里到底能做什么把 DeepSeek 接进 Excel 工作流本质是让它承担「意图翻译」的角色。你输入的是业务语言比如「把 A 列订单号重复的标红保留金额最大的那条」它输出的是可执行的 Excel 公式、VBA 代码或 Python 脚本。这里有个关键分界DeepSeek 不直接操作你的 Excel 文件它生成的是操作指令执行环节仍然在 Excel 或本地脚本里完成。理解这一点后面选路线才不会翻车。目前常见的接入方式有三种。第一种是对话式生成你在 DeepSeek 网页端或客户端描述需求复制生成的公式回 Excel 粘贴。第二种是 API 调用用 Python 或 VBA 发 HTTP 请求把模型返回的代码自动写入单元格或立即执行。第三种是本地脚本编排Python 读取 Excel 后用openpyxl或pandas处理DeepSeek 负责生成处理逻辑。三种方式的门槛和自动化程度递增选哪种取决于你的数据量、更新频率和对稳定性的要求。提示DeepSeek 生成的公式和代码需要你人工验证一遍再批量执行尤其是涉及删除、覆盖的操作。模型偶尔会编造不存在的函数名这是当前阶段的正常现象。2.2 公式生成路线适合 80% 日常场景的最低成本方案如果你只是偶尔处理几千行数据不需要自动化公式生成路线最省事。打开 DeepSeek 对话窗口把表头结构和需求描述清楚让它输出公式。描述时给的信息越具体公式越准。比如不要只说「帮我算提成」要说「B 列是销售额C 列是提成比例提成 B 列 × C 列但销售额低于 5000 时提成按 0 算」。IF(B25000, 0, B2*C2)这个公式的逻辑很直白先判断销售额是否低于 5000是则返回 0否则返回销售额乘以提成比例。参数说明B2是销售额单元格C2是提成比例单元格5000是阈值这三个都可以根据实际列位调整。DeepSeek 生成后你把它粘贴到 D2双击填充柄往下拉即可。更复杂的场景比如多条件查找DeepSeek 能帮你写出XLOOKUP或INDEXMATCH组合。我一般会要求它同时给出两种写法因为XLOOKUP在旧版 Excel 里可能不存在INDEXMATCH兼容性更好。拿到公式后先在一行数据上测试确认结果正确再整列填充。这一步花 30 秒能省掉后面排查#REF!的半小时。2.3 VBA 宏路线把重复操作录制成一键执行的按钮当你要做的操作无法用公式表达比如「遍历所有工作表把每个表的 A 列格式刷成统一样式」VBA 是更合适的选择。DeepSeek 生成 VBA 代码的能力相当可用前提是你把对象模型描述清楚。常见做法是先手动录一段宏把生成的骨架代码贴给 DeepSeek让它在此基础上修改这样比从零生成准确率高得多。Sub FormatAllSheets() Dim ws As Worksheet Dim lastRow As Long For Each ws In ThisWorkbook.Worksheets lastRow ws.Cells(ws.Rows.Count, A).End(xlUp).Row With ws.Range(A1:A lastRow) .Font.Name 微软雅黑 .Font.Size 10 .Interior.Color RGB(242, 242, 242) End With Next ws MsgBox 所有工作表 A 列格式已统一 End Sub这段代码的逻辑遍历当前工作簿的每个工作表找到 A 列最后一行然后把 A 列区域字体设为微软雅黑、字号 10、背景色浅灰。参数说明A是目标列RGB(242,242,242)是背景色值lastRow动态确定范围避免处理空行。运行方式AltF11 打开 VBA 编辑器插入模块粘贴代码F5 执行。注意VBA 宏在 WPS 和 Excel 里的兼容性有差异部分对象模型方法在 WPS 中不可用。如果团队混用两种软件生成代码后要在两个环境各跑一遍。2.4 Python 脚本路线处理十万行以上数据的正确姿势Excel 公式和 VBA 在数据量超过十万行时开始力不从心这时候 Python 是更稳的选择。DeepSeek 生成pandas代码的质量很高你只需要描述清楚输入文件路径、目标列名和输出要求。典型流程是Python 读取 ExcelDeepSeek 生成的数据处理逻辑执行清洗和计算结果写回新文件。import pandas as pd # 读取源文件指定工作表 df pd.read_excel(销售明细.xlsx, sheet_name订单) # 按订单号分组保留金额最大的记录 df_sorted df.sort_values(金额, ascendingFalse) df_dedup df_sorted.drop_duplicates(subset订单号, keepfirst) # 计算提成列 df_dedup[提成] df_dedup.apply( lambda row: 0 if row[金额] 5000 else row[金额] * row[提成比例], axis1 ) # 写出结果 df_dedup.to_excel(销售明细_清洗后.xlsx, indexFalse) print(f处理完成输出 {len(df_dedup)} 条记录)逻辑说明先按金额降序排列再用drop_duplicates按订单号去重并保留第一条即金额最大的然后逐行计算提成最后写出新文件。参数说明subset订单号指定去重依据列keepfirst保留排序后的第一条axis1表示按行应用函数。这段代码在 50 万行数据上跑完大约 8 到 12 秒比 VBA 快一个数量级。选路线的判断标准很简单数据量万行以内且操作可公式化走公式路线操作涉及多表遍历或格式调整走 VBA数据量十万行以上或需要复杂清洗逻辑走 Python。三条路线可以混用比如用 Python 做清洗用 VBA 做最终报表的格式美化。3. 用 API Key 把 DeepSeek 接进 Excel从手动复制到自动回写3.1 API Key 获取与环境准备手动复制公式适合偶尔用但如果你每天都要处理类似的表格把 DeepSeek 通过 API Key 接进 Excel 能省掉大量重复操作。先到 DeepSeek 开放平台注册账号在控制台创建 API Key。这个 Key 是一串以sk-开头的字符只显示一次复制后存在安全的地方。常见做法是把它写进环境变量不要硬编码在脚本里。# Linux/macOS 设置环境变量 export DEEPSEEK_API_KEYsk-你的密钥 # Windows PowerShell $env:DEEPSEEK_API_KEYsk-你的密钥设置好之后Python 脚本里用os.environ读取VBA 里用Environ函数读取。这样做的目的是避免密钥泄露尤其是脚本要分享给同事时。如果你用 OpenRouter 这类聚合平台API Key 的获取方式类似但请求地址和模型名称要相应调整。提示API Key 有调用频率和额度限制免费额度和付费额度的限制不同。批量处理前先在控制台确认当前额度避免跑到一半报 401 错误。3.2 Python 调用 DeepSeek API 生成公式并写入 Excel下面这段代码演示完整链路读取 Excel 里的需求描述列调用 DeepSeek API 生成公式把公式写回下一列。这样你只需要在表格里写自然语言需求运行脚本就能批量生成公式。import os import openai import pandas as pd client openai.OpenAI( api_keyos.environ[DEEPSEEK_API_KEY], base_urlhttps://api.deepseek.com ) df pd.read_excel(需求表.xlsx) for idx, row in df.iterrows(): prompt f根据以下需求生成 Excel 公式只返回公式本身{row[需求描述]} response client.chat.completions.create( modeldeepseek-chat, messages[{role: user, content: prompt}], temperature0.1 ) df.at[idx, 生成公式] response.choices[0].message.content.strip() df.to_excel(需求表_已生成.xlsx, indexFalse)逻辑说明遍历需求表的每一行把需求描述拼成 prompt 发给 DeepSeek要求只返回公式然后把结果写入「生成公式」列。参数说明base_url指向 DeepSeek 的 API 地址modeldeepseek-chat是对话模型temperature0.1降低随机性让输出更稳定。这段代码的瓶颈在 API 调用速度每行大约 1 到 2 秒几百行的话建议加并发或分批处理。3.3 VBA 调用 API 实现表内一键生成如果你不想装 PythonVBA 也能直接调 API。下面这段代码在 Excel 里按 AltF11 插入模块后运行会把当前选中单元格的自然语言描述发给 DeepSeek生成的公式写入右侧单元格。Function GetFormulaFromDeepSeek(requirement As String) As String Dim http As Object Dim url As String Dim payload As String Dim apiKey As String apiKey Environ(DEEPSEEK_API_KEY) url https://api.deepseek.com/chat/completions payload {model:deepseek-chat,messages:[{role:user,content:只返回Excel公式 payload payload requirement }],temperature:0.1} Set http CreateObject(MSXML2.XMLHTTP) http.Open POST, url, False http.setRequestHeader Content-Type, application/json http.setRequestHeader Authorization, Bearer apiKey http.send payload GetFormulaFromDeepSeek http.responseText End Function逻辑说明用MSXML2.XMLHTTP发 POST 请求把需求描述拼进 JSON payload返回原始响应文本。参数说明url是 DeepSeek 的对话接口地址apiKey从环境变量读取temperature同样设为 0.1。实际使用时还需要解析返回的 JSON 提取content字段这里为了代码简洁省略了解析部分你可以用Split函数或引入 JSON 解析库处理。注意VBA 的MSXML2.XMLHTTP在部分 Office 版本中需要额外引用如果报「用户定义类型未定义」在 VBA 编辑器里点工具→引用勾选 Microsoft XML, v6.0。3.4 批量处理时的并发与限流策略当你需要处理几百上千行需求时串行调用 API 会非常慢。常见做法是用 Python 的concurrent.futures开线程池把并发数控制在 5 到 10 之间。并发太高会触发 API 的限流返回 429 错误并发太低则浪费时间。我一般设 8 个线程每批处理 100 行批间加 1 秒延迟。from concurrent.futures import ThreadPoolExecutor, as_completed def process_row(row): prompt f只返回Excel公式{row[需求描述]} response client.chat.completions.create( modeldeepseek-chat, messages[{role: user, content: prompt}], temperature0.1 ) return row.name, response.choices[0].message.content.strip() with ThreadPoolExecutor(max_workers8) as executor: futures {executor.submit(process_row, row): row for _, row in df.iterrows()} for future in as_completed(futures): idx, formula future.result() df.at[idx, 生成公式] formula逻辑说明用线程池并发提交任务max_workers8控制并发数as_completed按完成顺序收集结果。参数说明max_workers根据你的 API 额度调整额度低就降到 3 到 5。这段代码比串行快 6 到 8 倍但要注意 DeepSeek API 的 RPM每分钟请求数限制超了会返回 429需要在代码里加try-except捕获并重试。4. 避坑与排查DeepSeek 生成 Excel 代码时最容易翻车的五个地方4.1 公式引用错位相对引用和绝对引用搞混现象DeepSeek 生成的公式在第一个单元格正确往下填充后结果全错。原因模型默认生成相对引用但你的场景可能需要锁定某列或某行。解决在 prompt 里明确说「B 列需要绝对引用」或者在生成后手动把B2改成$B2。我一般会要求 DeepSeek 同时给出相对引用和绝对引用两个版本自己根据场景选。4.2 函数不存在模型编造了 Excel 里没有的函数现象公式粘贴后报#NAME?错误。原因DeepSeek 的训练数据里混入了其他表格软件或编程语言的函数名比如把 Python 的len()当成 Excel 函数输出。解决拿到公式后先在 Excel 里输入然后打字看函数自动补全列表里有没有这个名字。没有就说明是编造的让 DeepSeek 换一个写法或者自己查文档替换。4.3 API 返回 401Key 没传对或额度耗尽现象Python 脚本报unexpected status 401 unauthorized: incorrect api key provided。原因环境变量没设置成功或者 Key 复制时带了空格或者免费额度用完了。解决先在终端echo $DEEPSEEK_API_KEY确认变量存在且值正确然后到 DeepSeek 控制台看额度余额。如果额度没了充值或换 Key。VBA 里同样用Environ检查。4.4 VBA 代码在 WPS 里跑不通现象同样的 VBA 代码在 Excel 里正常在 WPS 里报错或没反应。原因WPS 的 VBA 兼容层不完整部分对象模型方法缺失比如ThisWorkbook.Worksheets的某些遍历方式在 WPS 里行为不一致。解决如果团队用 WPS让 DeepSeek 生成代码时加一句「兼容 WPS VBA」或者改用 Python 脚本方案绕开 VBA 兼容性问题。4.5 大数据量下 Python 内存溢出现象处理 50 万行以上的 Excel 时Python 脚本报MemoryError。原因pandas.read_excel默认把整个文件加载到内存xlsx 格式本身压缩率不高50 万行可能占几个 GB。解决改用read_excel的chunksize参数分块读取或者先把 xlsx 转成 csv 再用read_csv处理。如果必须处理 xlsx用openpyxl的只读模式逐行读牺牲速度换内存。5. 进阶技巧用 DeepSeek 生成 VBA 字典实现跨表高速匹配跨工作表匹配是 Excel 里最耗时的操作之一VLOOKUP 在几万行数据上跑一次要几十秒。用 VBA 字典可以把匹配速度提升到毫秒级。DeepSeek 生成字典代码的能力不错但你需要把数据结构描述清楚。下面是一个典型场景Sheet1 有 10 万行订单Sheet2 有 5000 行产品信息需要把产品名称匹配到订单表。Sub MatchWithDictionary() Dim dict As Object Dim wsOrder As Worksheet, wsProduct As Worksheet Dim lastRow As Long, i As Long Dim key As String Set dict CreateObject(Scripting.Dictionary) Set wsProduct ThisWorkbook.Sheets(产品信息) Set wsOrder ThisWorkbook.Sheets(订单) 把产品信息装入字典 lastRow wsProduct.Cells(wsProduct.Rows.Count, A).End(xlUp).Row For i 2 To lastRow key CStr(wsProduct.Cells(i, 1).Value) If Not dict.Exists(key) Then dict.Add key, wsProduct.Cells(i, 2).Value End If Next i 遍历订单表匹配 lastRow wsOrder.Cells(wsOrder.Rows.Count, A).End(xlUp).Row For i 2 To lastRow key CStr(wsOrder.Cells(i, 1).Value) If dict.Exists(key) Then wsOrder.Cells(i, 3).Value dict(key) Else wsOrder.Cells(i, 3).Value 未匹配 End If Next i MsgBox 匹配完成共处理 lastRow - 1 条订单 End Sub这段代码的逻辑分两步先把产品信息表的 A 列作为 Key、B 列作为 Value 装入字典然后遍历订单表用订单表的 A 列去字典里查查到就写入 C 列。参数说明wsProduct和wsOrder是工作表对象key是匹配依据列dict(key)返回匹配到的值。10 万行订单匹配 5000 个产品这段代码跑完大约 1 到 2 秒比 VLOOKUP 快 20 倍以上。生成这类代码时prompt 要写清楚两张表的名称、匹配列的位置、目标列的位置、数据起始行。DeepSeek 偶尔会把dict.Exists写成dict.Exists()带括号VBA 里方法调用不加括号这个细节需要手动改。另外如果匹配列有数字和文本混存的情况CStr转换能避免类型不匹配导致的漏匹配。验证方法很简单先拿 100 行数据跑一遍人工核对几条结果确认无误再换全量数据。我习惯在代码里加一个计数器统计匹配成功和失败的数量跑完弹窗显示这样一眼就能看出有没有异常。字典方案唯一的限制是内存50 万行以上的数据字典会占用较大内存但现代办公电脑基本扛得住。这套组合拳打下来日常表格处理里 80% 的重复劳动都能自动化掉。公式生成解决单点计算VBA 字典解决跨表匹配Python 脚本解决大数据量清洗。三条路线按需选用不用追求全上。我自己最常用的还是公式生成加 VBA 字典因为不用装 Python 环境在客户现场也能直接跑。希望帮到你。本文还有配套的精品资源点击获取
返回列表