Excel 集成 DeepSeek api,实现工作总结与周报自动生成

2025年 12月 13日 82点热度 0人点赞 0条评论

在日常工作中,周报往往重复、耗时,却又不可或缺。随着 AI 能力的成熟,把 ExcelDeepSeek 这类大模型结合起来,正在成为一种高效、可落地的自动化方案。通过在 Excel 中整理结构化数据,再将内容按规则交给 DeepSeek 进行分析与生成,我们可以把原本需要几十分钟甚至更久的周报撰写过程,压缩到“一键生成”的程度。

本文将围绕 “Excel 接入 DeepSeek api,实现总结总结/周报自动生成” 展开,介绍整体操作步骤,帮助你在不改变现有工作习惯的前提下,快速搭建一套稳定、可复用的 AI 周报生成流程,让周报从“负担”变成真正服务工作的工具。

第一步获取deepseek api key

访问deepseek 开放平台:platform.deepseek.com,创建api key

deepseek-api-key-创建复制API key


复制deepseek-api-key

第二步创建配置表

为了灵活管理一些使用中的配置项,建议新建一个配置sheet来集中管理,这里把配置sheet命名为“配置”,后面的函数需要用到。提示词(Prompt),可以根据自己需要增加和修改。

excel-配置表

  1. API Key:把刚刚复制的api key 填入
  2. API URL:https://api.deepseek.com
  3. Prompt:工作总结提示词如下:

你是一名负责撰写工作汇报的业务助理,请严格基于输入信息进行总结,不得引入未提供的背景或结论。

输入为一条工作记录:

- 任务:{任务}

- 负责人:{负责人}

- 进度状态:{进度状态}

- 风险问题:{风险问题}

请按以下结构输出内容,各部分之间需换行:

【一句话总结】

用不超过 30 字概括当前任务的整体情况,必须同时体现“任务内容 + 当前进度状态”。

【当前进展】

根据进度状态,客观描述当前已经完成或正在推进的工作内容,列出 2–3 条要点,每条以“- ”开头。

【下一步行动】

结合当前进度与风险情况,给出 2–3 条明确、可执行的下一步行动建议,每条以“- ”开头。

【风险提示】

规则如下(必须遵守):

- 如果 {风险问题} 非空:直接以“风险:{风险问题}”开头,并补充一句该风险可能带来的影响或需要关注的点。

- 如果 {风险问题} 为空:仅输出“无明显风险”。

写作要求:

- 语气客观、偏工作汇报

- 不使用“作为AI”“建议您”等 AI 风格表述

- 不夸大成果,不提前下结论

- 不解释生成逻辑


第三步创建宏函数

按ATL+F11进入VBA窗口,创建一个模块函数

VBA-创建模块

并将以下代码复制粘贴进模块中


' ========= 自定义参数版:在提示词中用 {参数名} 占位 =========

Public Function DS_PARAM(promptCell As Range, userText As String, ParamArray args() As Variant) As String

On Error GoTo ErrHandler

 

Dim wsCfg As Worksheet

Set wsCfg = ThisWorkbook.Worksheets("配置")

 

Dim apiKey As String, apiBase As String, modelName As String, apiUrl As String

apiKey = CStr(wsCfg.Range("B1").Value)      ' API Key

apiBase = CStr(wsCfg.Range("B2").Value)     ' API Base URL

modelName = CStr(wsCfg.Range("B3").Value)   ' 模型名

 

If apiKey = "" Or apiBase = "" Or modelName = "" Then

DS_PARAM = "请先在 配置!B1~B3 填写 API Key / API URL / 模型名"

Exit Function

End If

 

If Right$(apiBase, 1) = "/" Then

apiBase = Left$(apiBase, Len(apiBase) - 1)

End If

apiUrl = apiBase & "/chat/completions"

 

' ---- 读取提示词模版 ----

Dim systemPrompt As String

systemPrompt = CStr(promptCell.Value)

 

' ---- 处理自定义参数:成对传入 "name", value ----

Dim i As Long

Dim name As String, val As String

 

If (UBound(args) - LBound(args) + 1) Mod 2 <> 0 Then

DS_PARAM = "参数数量必须为偶数(成对:名称 + 值)"

Exit Function

End If

 

For i = LBound(args) To UBound(args) Step 2

name = CStr(args(i))

If i + 1 <= UBound(args) Then

val = CStr(args(i + 1))

Else

val = ""

End If

 

If name <> "" Then

systemPrompt = Replace(systemPrompt, "{" & name & "}", EscapeJson(val))

End If

Next i

 

' ---- 组装请求体 ----

Dim reqBody As String

reqBody = "{""model"":""" & modelName & """,""messages"":[" & _

"{""role"":""system"",""content"":""" & EscapeJson(systemPrompt) & """}," & _

"{""role"":""user"",""content"":""" & EscapeJson(userText) & """}" & _

"],""temperature"":0.7}"

 

' ---- 发送请求 ----

Dim responseText As String

responseText = HttpPostJson(apiUrl, apiKey, reqBody)

 

' 自动设置换行显示

Application.Caller.Cells.WrapText = True

' ---- 解析返回 ----

DS_PARAM = ParseContentFromJson(responseText)

Exit Function

 

ErrHandler:

DS_PARAM = "错误: " & Err.Description

End Function

' ================== HTTP POST 工具函数 ==================

Private Function HttpPostJson(ByVal url As String, ByVal apiKey As String, ByVal body As String) As String

Dim http As Object

Set http = CreateObject("MSXML2.XMLHTTP")

 

http.Open "POST", url, False

http.setRequestHeader "Content-Type", "application/json"

http.setRequestHeader "Authorization", "Bearer " & apiKey

 

http.send body

 

If http.Status = 200 Or http.Status = 201 Then

HttpPostJson = http.responseText

Else

HttpPostJson = "HTTP Error " & http.Status & ": " & http.responseText

End If

End Function

' ================== JSON 转义 ==================

Private Function EscapeJson(ByVal s As String) As String

s = Replace(s, "\", "\\")

s = Replace(s, """", "\""")

s = Replace(s, vbCrLf, "\n")

s = Replace(s, vbCr, "\n")

s = Replace(s, vbLf, "\n")

EscapeJson = s

End Function

 

' ================== 从 JSON 中取 content,并自动换行 ==================

Private Function ParseContentFromJson(ByVal json As String) As String

On Error GoTo ErrHandler

 

Dim key As String

Dim startPos As Long, endPos As Long

Dim content As String

 

key = """message"":{""role"":""assistant"",""content"":"""

startPos = InStr(1, json, key, vbTextCompare)

 

If startPos = 0 Then

key = """content"":"""

startPos = InStr(1, json, key, vbTextCompare)

If startPos = 0 Then

ParseContentFromJson = json

Exit Function

End If

End If

 

startPos = startPos + Len(key)

endPos = InStr(startPos, json, """", vbTextCompare)

 

content = Mid$(json, startPos, endPos - startPos)

 

' ?? JSON 转换 Excel 换行

content = Replace(content, "\n", vbCrLf)

 

' ?? 转义还原

content = Replace(content, "\\", "\")

content = Replace(content, "\""", """")

 

ParseContentFromJson = Trim(content)

Exit Function

 

ErrHandler:

ParseContentFromJson = json

End Function


第四步在项目跟进表中引用宏函数

调用ds函数

在总结报告栏输入

=DS_PARAM(配置!$B$4,"","任务",A2,"负责人",B2,"进度状态",C2,"风险问题",D2)


粘贴VBA代码

这是一个 带自定义参数的调用公式,参数由提示词模板的占位符确定,使用起来比较灵活,下面是使用说明:

传入内容 含义
配置!$B$4 提示词模板:AI 的工作说明书,里面包含 {任务}、{负责人} 等占位符;如果你配置表里的提示词写在B5,要改成配置!$B$5
"" 用户补充内容:这里为空,表示所有信息都通过参数传入,如果你以后想额外给 AI 一段描述,也可以在这里补充
"任务", A2 A2 的值 填充到提示词里的 {任务}
"负责人", B2 B2 的值 填充到提示词里的 {负责人}
"进度状态", C2 C2 的值 填充到提示词里的 {进度状态}
"风险问题", D2 D2 的值 填充到提示词里的 {风险问题}

 

生成效果

在项目跟进表中的总结报告列,调用AI总结函数,并下拉拖动,就可以实现批量生成的效果

最后,因为excel的普通格式是禁用宏的,需要把文件另存为.xlsm格式的文件,方便后面打开就能使用。

itchen

这个人很懒,什么都没留下