找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1043|回复: 8

[分享] 关于WPS中的VBA嵌入deepseek的代码问题

[复制链接]
miosinwei 发表于 2025-2-10 14:28:32 | 显示全部楼层 |阅读模式

注册后推荐绑定QQ,之后方才可以使用下方的“用QQ帐号登录”。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如何将这串代码转换成VBA语言,从而代入到WPS中运行?
1.jpg
2.jpg
epiman 发表于 2025-2-10 18:03:44 | 显示全部楼层
这个很简单啊,既然都申请 api 了,肯定在 deepseek 有账号啊直接问 deepseek 即可,以下是 deepseek的回复:
; B, P" G5 o' R' \6 ]$ p8 ~6 e5 u. G0 B" N
要在 WPS 中接入 DeepSeek 的 API,您可以按照以下步骤操作:
$ s2 h3 r* S0 W2 i: q6 ~0 M- |+ l  v+ B9 C% s
### 1. 获取 API 密钥
+ T4 b4 Q  o2 L% I* B首先,您需要在 DeepSeek 官网注册账号并获取 API 密钥。6 t) g1 l( ]* m

' o+ A2 c# ?  g/ H9 x" X2 H### 2. 安装 WPS Office
( v5 j5 P4 m! C; N* l确保已安装 WPS Office,并具备 VBA(Visual Basic for Applications)支持。
8 g6 n$ q1 @. p+ U+ q' |2 _3 J& U- X& E; W' a3 n. s+ U" h. h" }
### 3. 打开 VBA 编辑器
$ i+ f- J6 s; Y在 WPS 中,按 `Alt + F11` 打开 VBA 编辑器。
1 W0 ?, i: P% O: u% {" f
% O2 Q6 h" y- P, ]/ }7 l2 U/ _### 4. 创建新模块
; R9 K) m% w$ I' v8 P在 VBA 编辑器中,选择 `Insert > Module` 创建一个新模块。0 D2 y9 }5 Y. t: j
0 d( J0 e+ r& u5 r
### 5. 编写 VBA 代码+ B' Y6 a) b; l- G# ~3 r
在新模块中编写代码,调用 DeepSeek 的 API。以下是一个示例代码:5 m8 a8 y7 f) j4 p' \% m

* m3 P9 s6 |" S* ~* A3 @
  1. ```vba
    / |$ ?% Z# ]( {. O' S. ^, a
  2. Sub CallDeepSeekAPI()
      I5 n2 w3 Q5 M( x. S
  3.     Dim http As Object
    # @5 R5 k  K' B+ t8 b5 t
  4.     Dim url As String
    5 i5 Q5 }2 s& J, c# S2 P1 q8 L
  5.     Dim apiKey As String# I# n5 M1 y1 u. T- R8 }4 s
  6.     Dim requestBody As String$ h- y( ~" ]% p9 `: ]* ^0 T! T( a
  7.     Dim response As String
    7 c2 E* i% X  T( ^# \6 t/ Q, Q
  8.    
    8 w% M! n$ k+ Q8 B1 H. U( d! I
  9.     ' 设置 API 地址和密钥
    " U2 V/ G  a3 S( C
  10.     url = "https://api.deepseek.com/v1/your_endpoint"& g4 o! b6 h9 `6 p+ M) P0 x
  11.     apiKey = "your_api_key_here"
    1 j% L9 w9 `8 L& f1 x
  12.     ' e  t3 A2 y) g- o5 R
  13.     ' 创建 HTTP 请求对象
    2 r) Z- G' r9 m$ Q" f3 k
  14.     Set http = CreateObject("MSXML2.XMLHTTP")! a+ k. _0 ^. Q8 f. ?2 [2 B
  15.    
    % ~6 Y# b3 f$ d' {
  16.     ' 设置请求参数* i, K/ |6 a8 z6 S  S
  17.     requestBody = "{""key1"":""value1"",""key2"":""value2""}"
    ' e7 C9 x5 X: f2 p4 w: s) w
  18.    
    $ i! Q3 f3 |) O, x
  19.     ' 发送请求, t8 P/ m) _* P5 H( Z- Q
  20.     http.Open "POST", url, False
    . K; }: O8 v4 d0 I0 f
  21.     http.setRequestHeader "Content-Type", "application/json"
    4 y& T/ X: \- m+ o! @# k
  22.     http.setRequestHeader "Authorization", "Bearer " & apiKey
    ( I4 K0 A# d) l4 F
  23.     http.send requestBody
    * G; C, J3 d" }2 N
  24.    
    0 m2 M0 s2 d; j8 Y
  25.     ' 获取响应' [3 i/ V5 B3 d5 B# K; Z5 w
  26.     response = http.responseText
    8 x( j* W6 V* e9 N8 R) Z, N3 N7 ?
  27.     ! K) u$ }! {1 H% h2 d4 R  w4 a
  28.     ' 输出响应
    0 N7 z% g  R8 L6 L1 i% ~
  29.     MsgBox response; ?8 ~8 Z1 x8 p$ O
  30. End Sub/ I  C* j+ R' Z2 i
  31. ```
复制代码

7 ^6 W, z/ l7 o: ^, C$ |9 [3 h( g5 h3 ]3 c' u" E/ E) X( ~/ z
### 6. 运行代码
% J" F; }$ i. t按 `F5` 运行代码,调用 DeepSeek API 并显示响应。
0 h8 [( G  |- W, ?
' G0 [) V6 e+ _% w: Y4 k2 c# G  ?7 }### 7. 处理响应+ k5 A% Z- I+ ~9 S, d; a% Z
根据 API 返回的数据,您可以在 WPS 中进行进一步处理,如将数据写入单元格或生成报告。, q( N* `+ l5 }' N7 i
+ f& h4 X+ `& u
### 注意事项5 A9 x' u; x- Q* p+ W0 g5 u+ }' R
- 确保 API 地址和密钥正确。
8 V! g/ C9 r$ `6 V- 根据 API 文档调整请求参数和数据处理逻辑。( H* s. [. V; f0 c" J! D
- 如果 API 需要其他认证方式,请相应调整代码。7 T# ?2 y- R9 I  s" _) B
+ l; b  F' u1 D* h6 d/ Z9 Q, _
通过这些步骤,您可以在 WPS 中成功接入 DeepSeek 的 API。
回复

使用道具 举报

epiman 发表于 2025-2-10 18:08:42 | 显示全部楼层
你可以讲图 2 的代码喂给 deepseek,问它这是 curl 调用 deepseek 的 api 的代码, 在 WPS 里怎么来实现?
回复

使用道具 举报

PH_Pr 发表于 2025-2-12 08:51:42 | 显示全部楼层
本帖最后由 电子葵花 于 2025-2-12 09:09 编辑 - V9 a* t/ {: z& g

6 e- \0 Z  E+ r. U) v总掉线不太好用。& g, J3 U$ J+ G3 k! Z5 n; G
1.png - J! t# X: p! p# B
$ c0 X, X; _- ^# k7 @$ v1 T
  1. async function deepSeek(){  2 P" |/ T3 b  y2 R' I0 v
  2.         const isKeepThink = InputBox("回答结果是否保留DeepSeek的思考过程?", "温馨提示:","否");
    0 a/ V" @6 R: r& A* G
  3.     let originalSelection = Selection.Range.Duplicate;  // 保存原始选中的文本          2 t5 T5 e. K) R, k' B7 `, h5 ~
  4.     let inputText = Selection.Text.replace(/\s/g,"");//替换非法字符( e+ ?  z% |: L3 E
  5.     if(!(inputText && inputText.length > 1)) return alert("请选中文字!");
    + w" ?9 j: p& E9 ^; D
  6.     alert("在没有出现任务完成窗口之前,请耐心等待..............\n\n请点击确定!");
    0 G1 Q  m% k. [( B/ C
  7.     let pro = await fetch("http://localhost:11434/api/chat", {. d9 B% C! h  o3 X: w
  8.             "headers" : {4 i* `+ }0 w  i" G
  9.                     "content-type" : "application/json; charset = UTF-8",' r" m. l+ b* ]4 N9 b. R% ~
  10.                     "authorization": "Bearer " + "apikey") c; A9 ^0 M0 K* Y5 }
  11.             },# [! {6 Q* R' {/ s. H( g/ b
  12.             "body":`{"model": "deepseek-r1:1.5b", "messages": [{"role":"user", "content":"${inputText}"}], "stream": false}`,7 W: C" u& y: b" ^
  13.             "method" : "POST"- H6 O) b  a4 V$ s8 E- ]# v3 f/ @
  14.     }).then(response => {
    : {+ Z9 N" B( n' {5 g, W
  15.                 if (!response.ok) throw new Error('与大模型通讯出现错误');9 j# M. a$ I' t
  16.                 return response.json();
    8 U4 d1 E* J" S$ m
  17.         }).catch(error => alert("出现错误\n" + error));3 B5 X/ n7 j( S9 l0 _, N0 M0 ]
  18.     let response = isKeepThink == "否" ? keepThink(pro.message.content) : pro.message.content;1 c* i" F. C2 {6 i5 G& j! j
  19.         Selection.Collapse(wdCollapseEnd)// 取消选中原始文本! n% t; J8 ?. |: [. u& T
  20.         Selection.TypeParagraph() // 插入新行5 C5 K4 K$ E8 U, d6 H- w: |
  21.         Selection.TypeText(response)// 将内容插入到选中文字的下一行        . Q# Z& Y0 I; u$ _
  22.         originalSelection.Select()// 将光标移回原来选中文本的末尾5 B' g- k  R5 _$ X( ]/ b; ]1 L5 B+ O
  23.         alert("任务完成!")8 }* Z% h8 C* N& x. H
  24. }
    * V) V% t: y5 }1 ~  t. ~5 Y1 z% t

  25. 2 A# Z( Y9 J7 H% \4 M3 `
  26. function Callback(control){$ j+ [+ G5 W1 |; ?$ K
  27.         deepSeek()
      o9 X4 G! O7 a# ]. G" A& I
  28. }
    6 U% J+ {( U5 O# a6 v" I
  29. + a: M/ g: n" ]3 c
  30. function keepThink(str){+ P" i7 U: [/ ?; e
  31.         const index = str.indexOf(`</think>`);, H. F  u  l' k; j
  32.         return index == -1 ? str : str.slice(index + 10);3 y5 t3 Q+ Z8 [- p
  33. }
复制代码

- Z0 V3 _8 }* U$ n9 k  B/ y+ S% \
# @7 y6 Y7 c9 a0 ~2 f
- X1 O: o& \" P. C' ~# f前提是先安装好ollama,并拉取好模型,假设密下载的是deepseek r1 1.5b。然后运行-cmd,输入命令:ollama run deepseek - r1:1.5b ,之后等待出现send message出现,再打开附件,按图操作即可。

JSA本地调用DeepSeek.rar

11.89 KB, 下载次数: 3

评分

参与人数 1钢镚 +20 收起 理由
epiman + 20 热心回复坛友问题:-)

查看全部评分

回复

使用道具 举报

 楼主| miosinwei 发表于 2025-2-17 09:02:35 | 显示全部楼层
本帖最后由 miosinwei 于 2025-2-17 09:04 编辑
0 {3 {5 R  }' u9 X4 Z
epiman 发表于 2025-2-10 18:03
- A% D5 D$ \* B: _- D这个很简单啊,既然都申请 api 了,肯定在 deepseek 有账号啊直接问 deepseek 即可,以下是 deepseek的回复 ...

* m" s, M3 Z& A, D4 _
" P; L) U+ B$ ~8 }3 a4 ^  N老大,已经尝试过了,总掉线不太好用
回复

使用道具 举报

 楼主| miosinwei 发表于 2025-2-17 09:04:12 | 显示全部楼层
电子葵花 发表于 2025-2-12 08:51& I9 i' n. P6 @8 W- B, w. D2 f, d
总掉线不太好用。

$ t% p0 \1 @& L总掉线不太好用. H- L* P" Y0 F( _9 r% P% F
确实是这样,DEEPSEEK的API停止收费了
回复

使用道具 举报

epiman 发表于 2025-2-17 13:12:31 | 显示全部楼层
miosinwei 发表于 2025-2-17 09:02
7 a1 c8 Z. u" E! U* T* n+ Y老大,已经尝试过了,总掉线不太好用
. I% I* p' |) y% k1 p
用第三方部署的API,腾讯、阿里、百度、字节好像都有。或者用硅基流动,我用的硅基流动,除了全规格的deepseek,还有蒸馏的32b和14b,及免费的7b和8b,见链接& e  ]0 C/ V; |" O8 y
https://www.epiman.cn/home/index.html
回复

使用道具 举报

 楼主| miosinwei 发表于 2025-2-19 08:45:08 | 显示全部楼层
epiman 发表于 2025-2-17 13:12+ X/ o" ^0 B! z/ B
用第三方部署的API,腾讯、阿里、百度、字节好像都有。或者用硅基流动,我用的硅基流动,除了全规格的dee ...
- P+ }2 J8 A( |. q1 N
硅基流动注册了,送了14个小时,而且回复很慢
回复

使用道具 举报

epiman 发表于 2025-2-19 09:38:17 | 显示全部楼层
miosinwei 发表于 2025-2-19 08:45% A. v* l$ O% L/ k. X8 k; v& w3 O
硅基流动注册了,送了14个小时,而且回复很慢

7 e( L+ v; r3 q1 ~$ f( m这个很快
+ K% B/ x! N+ m! J( x! nhttps://www.wenxiaobai.com/chat/200006
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

今日推荐上一条 /2 下一条

×
CHARLS指标专栏

中国健康与养老追踪调查

CHARLS分析指标一应俱全,不断完善

指标按照特性多重分类,立刻存到收藏夹

改名|钢镚|会员|联系我们|公卫人 ( 沪ICP备06060850号-3|沪公网安备31010402334125号 )

GMT+8, 2026-3-4 04:02 , Processed in 0.113747 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表