DeepSeek+PPT+百度云:15分钟帮你搭建超级PPT文档助手!保姆级开源代码~(上)

安少

新人报告,开年来打卡😃~

大家好,我是ChatPPT.cn创始人安少!

这个春节因DeepSeek爆火而多增几分惊喜,各种破圈式传播,口碑满满,效果确实很赞。作为一个骨灰级Office玩家,朋友圈有蛮多朋友发布了Office+DeepSeek联动,于是很多PPT朋友纷纷留言,看如何DeepSeek如何和PPT联动联动一把。

于是乎,过年遛娃之余,真真去深度去体验DeepSeek了,网页版、API全都试了下,效果着实很惊艳,输出超预期,结果稳定可控。面对好友提及的“应用联动”,骨子里的程序员DNA“动”了,哈哈。

于是得空花了15分钟,写了一个基础文档智能体工作,DeekSeek和PPT完美实现的联动,写法也比较粗暴,“VBA代码+API 模型+动态代码执行”。

经过一通测试,竟然实现了ChatPPT的mini版效果,一大堆宝藏功能被实现了...

可以实现:输入对话式内容就能让DeepSeek去控制PPT操作了。

下方查看视频(录屏效果)↓↓↓

  • 全文替换字体

  • 生成PPT

  • 全文替换字体

  • 批量操作文本样式

  • 页面设计与美化

  • 自动翻译文本

  • 内容辅助写作...

  • ...

当然还可以实现更多有趣操作,欢迎自己实现体验解锁...。

不多说,上源代码+操作(手把手)!!!

👇👇👇👇

</ 操作1

获取 DeepSeek API

因为一些众所周知原因,DeepSeek官网截止发稿前偶尔出现无法直接申请注册api权限,大家可以选择一些部署渠道进行体验(如果已经注册了DeepSeek或者其他渠道,可忽略此步骤),所以目前类似百度云、阿里云、硅基流动+华为、腾讯云等都助力部署了对应的模型,而且基本都免费大家根据自己需求选择。

百度云目前可免费2周且使用流程简单,为了方便选择了百度,本文教程以百度云为例。

  • 创建应用:创建应用,获取AppId

  • 创建API Key:生成专属应用的API Key字符串

经过以上你就获得appidapikey了,同时你也可以直接在百度进行调用和在线体验DeepSeek。

</ 操作2

大模型LLM接入PPT

启动微软office或者wps(需要支持vba的版本)进行vba代码编写,通过在线API对应给定的appId与api Key完成请求对接与输出。

点击开发工具,点击插入模块,即开始编辑代码。

  • 微软Office:开发工具 > Visual Basic > 插入 > 模块

  • WPS Offce:工具 > 开发工具 > VB编辑器 > 插入 > 模块

核心代码:连接云平台、解析json代码(可以直接复制粘贴到编辑器中)

Function GetCodeStringByRequest(inputStr As String) As String

    Dim http As Object
    Dim url As String
    Dim requestBody As String
    Dim response As String
    On Error GoTo ErrorHandler
    ' 初始化 HTTP 对象
    Set http = CreateObject("MSXML2.XMLHTTP")
    ' 设置请求的 URL
    url = "https://qianfan.baidubce.com/v2/chat/completions"
    ' 设置请求体
    requestBody = "{""model"":""deepseek-v3"",""messages"":[{""role"":""user"",""content"":""VBA powerpoint," + inputStr + "。不需要输出任何解释文本和引导内容,直接输出vba代码,且不可以有任何markedown标识,直接输出文本内容。""}]}"
    ' 发送 POST 请求
    With http
        .Open "POST", url, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "appid", "这是你的APP ID"
        .setRequestHeader "Authorization", "这是你的API Key"
        .send requestBody
    End With
    ' 获取响应内容
    response = http.responseText
    ' 输出响应内容
    Debug.Print response
    content = GetJsonParsing(response)
    ' 输出 content
    Debug.Print content
    Dim codeStr As String
    codeStr = Replace(content, "\n", vbCrLf)
    Debug.Print codeStr
    GetCodeStringByRequest = codeStr
    Exit Function
ErrorHandler:
    MsgBox "Error: " & Err.Description, vbCritical
    GetCodeStringByRequest = ""
End Function

DeekSeek官方API调用代码可参考后文提及的开源文档,也一并开源交流体验。

特别说明:因为宏有一定的设置安全限制,所以需要你默认将PPT的宏安全设置下。

  • 微软 Office:开发工具 > 宏安全性

  • WPS Offce:文件 > 选项 > 信任中心

</ 操作3

DeepSeek交互PPT

如果说实现了api接口,只能算是完成大模型的基础调用了,真正要实现完美联动,应该是DeepSeek输出的代码用于控制PPT操作。

核心操作很简单,那就是利用大模型输出的生成代码的能力了!(此处应该给DeepSeek掌声,其代码输出能力还是很惊喜!!!),然后本地vba进行执行。

不多说,还是直接上代码:

Function RunDynamicCode(incodeStr As String) As Boolean
    On Error GoTo ErrorHandler
    
    Dim codeStr As String
    codeStr = Replace(incodeStr, "\n", vbCrLf)
    ' 从代码字符串中提取过程名
    Dim procName As String
    procName = ExtractProcedureName(codeStr)

    If procName = "" Then
        MsgBox "无法从代码字符串中提取过程名!", vbCritical
        Exit Function
    End If

    ' 获取当前演示文稿的 VBProject
    Dim vbProj As VBProject
    Set vbProj = Application.VBE.ActiveVBProject

    ' 创建一个新的标准模块
    Dim vbComp As VBComponent
    Set vbComp = vbProj.VBComponents.Add(vbext_ct_StdModule)

    ' 将代码字符串添加到模块中
    vbComp.CodeModule.AddFromString codeStr

    ' 运行动态添加的子过程
    Application.Run procName

    ' 删除动态创建的模块
    vbProj.VBComponents.Remove vbComp

    RunDynamicCode = True

   Exit Function

ErrorHandler:
    MsgBox "Error: " & Err.Description, vbCritical
    ' 确保模块被删除
    If Not vbComp Is Nothing Then
        vbProj.VBComponents.Remove vbComp
    End If
     RunDynamicCode = False

End Function

Function ExtractProcedureName(codeStr As String) As String
    ' 使用正则表达式提取过程名
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")

    ' 匹配 Sub 后的过程名
    regex.IgnoreCase = True
    regex.Global = False
    regex.Pattern = "Sub\s+([a-zA-Z_][a-zA-Z0-9_]*)"

    Dim matches As Object
    Set matches = regex.Execute(codeStr)

    If matches.Count > 0 Then
        ExtractProcedureName = matches(0).SubMatches(0)
    Else
        ExtractProcedureName = ""
    End If
End Function

未完待续,因为帖子长度有限,可以参见文末下篇或者提前去公众号阅读

本文所有实现方法公开透明对外,为了致敬DeepSeek的开源精神,本文所有代码均直接开源(仓促代码仅供参考,若有勘误多交流,仅供学习),大家可以在gitee或者github直接下载。

当然,也可以关注微信公众号“YOO创作”公众号回复:deepseek。可以获得源代码地址、以及宏PPT程序文件,欢迎把玩。

下篇帖子参见:

《DeepSeek+PPT+百度云:15分钟帮你搭建超级PPT文档助手!保姆级开源代码~(下)》

广东省
浏览 5257
14
45
分享
45 +1
41
14 +1
全部评论 41
 
青椒鸡蛋面
普通用户还是弱化额外操作的好,WPSAI的公式就很不错
· 上海
回复
 
高越13943914321
WPS没有受信任加载项一栏 请问怎么解决
· 河北省
回复
 
WPS_1729472018
打卡
· 吉林省
回复
 
陌若安生
打卡
· 浙江省
回复
 
桓桓会晋级的
感谢
· 山西省
回复
 
蔺永明
谢谢分享!
· 北京
回复
 
zha7090
zha7090

创作者俱乐部成员

有点高级。围观,看热闹
· 广东省
回复
 
于子翔
感谢分享
· 河北省
回复
 
黑夜传说
感谢分享
· 河南省
回复
 
明日之后
感谢分享!
· 河南省
回复
 
every day every different
表格或者pdf版本有教学流程吗
· 山东省
回复
安少
安少

KVP

表格上应该可以有类似操作,pdf的话因为没有vba或者开放接口处理出来效果可能会比较曲折。
· 广东省
回复
 
安少
简单体验的话,也可以直接去试试ChatPPT最新版本,可以配置一个DeepSeek的api就能体验,基于WPS和DeepSeek实现操作和自由对话。
· 广东省
回复
 
user_19974388
学习一下
· 江苏省
1
回复
 
Phil
学习一下
· 北京
回复
 
自愈
学习了。
· 新疆
1
回复
 
寻残梦
666
· 广东省
回复
 
_Xstar_
学习一下
· 广西
回复
 
陈健民
好好学习,天天打卡
· 广东省
回复
 
TITAN
学习一下
· 浙江省
回复
 
小薛
好好学习,天天打卡
· 北京
回复