作为Excel 的高级用户,我今天与大家分享如何在Excel中快速接入DeepSeek大模型的方法。
当然,只要你的模型调用是符合OpenAPI规范的,都可以用同样的方法从Excel文件中来调用。
先上一个最后的效果图。
有了这个Excel 文件后,在文件的“Settings” sheet中配置后,用户在问题格(黑色格)中输入问题,点击“发送”按钮,依据你的模型运行速度,就可以很快在大模型回答格(淡蓝色格)中看到答案。基本工作原理是Excel是支持使用VBA语言编程的。在这个Excel文件里面我用VBA写了一个程序。这个程序来读以下“settings” sheet中的模型地址和设置,然后根据地址来向大模型服务发送请求。 这个大模型服务可以是你本地部署的ollama,也可以是你注册的其它大模型云端服务。云端服务需要从服务商获得API KEY,并设置在Settings sheet中的相应格子中,本地部署的不用API KEY,你就随便写一个就好。模式一。全部程序都在本地,无需联网。模型一需要本地部署ollama,教程在前面我的微信号中。模式二。 你的Excel 去调用远程的云端大模型服务,需要去找个大模型云端服务商进行注册,并获得地址和API Key本文主要是介绍如何构建这个deepseekdemo.xlsm Excel 文件。 具体构建这个Excel文件只需要五步,就可以在文件中调用Deepseek 模型了!步骤4. 在worksheet “Settings” 中设置模型地址和模型名称参数。 完成五个步骤后,回到第一个Sheet,输入你的问题,就可以看到前面的效果了。
1.1 打开Excel,如果看不到“开发者工具”菜单 按下Alt + F11
直接打开VBA编辑器。2.1 在上图的红色圈子中右点鼠标插入Excel VBA 模块。2.2 你可以先把模块1名字改成:modLLM。 然后在右边窗口copy进下面VBA程序。Public Function CallLLM(strUserQry As String)
Dim question As String
Dim response As String
Dim p_url As String
Dim p_apiKey As String
Dim http As Object
Dim content As String
Dim startPos As Long
Dim endPos As Long
question = strUserQry
p_url = Trim(Range("pmodelurl").Cells(1, 1).Value)
p_apiKey = Trim(Range("pmodelapikey").Cells(1, 1).Value)
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", p_url, False
http.setRequestHeader "Content-Type", "application/json"
http.setRequestHeader "Authorization", "Bearer " & p_apiKey
Dim requestBody As String
requestBody = "{""model"":""" & Trim(Range("pmodelname").Cells(1, 1).Value) & """,""messages"":[{""role"":""user"",""content"":""" & question & """}]}"
http.send requestBody
Dim strContent As String
If http.Status = 200 Then
response = http.responseText
startPos = InStr(response, """content"":""") + Len("""content"":""")
endPos = InStr(startPos, response, """},")
content = Mid(response, startPos, endPos - startPos)
strContent = ConvertUnicodeToText(content)
Else
strContent = "Error: " & http.Status & " - " & http.statusText
End If
CallLLM = strContent
End Function
Function ConvertUnicodeToText(ByVal mixedText As String) As String
Dim regex As Object
Dim matches As Object
Dim match As Object
Dim unicodeCode As String
Dim convertedText As String
' 创建正则表达式对象
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "\\u([0-9A-Fa-f]{4})"
regex.Global = True
' 执行正则表达式匹配
Set matches = regex.Execute(mixedText)
convertedText = ""
Dim i As Long
For i = 0 To matches.Count - 1
Set match = matches(i)
unicodeCode = match.SubMatches(0)
' 将Unicode编码转换为字符
convertedText = convertedText & ChrW("&H" & unicodeCode)
' 保留匹配之间的原始文本
If i < matches.Count - 1 Then
Dim startPos As Long
Dim endPos As Long
startPos = match.FirstIndex + match.Length
endPos = matches(i + 1).FirstIndex
convertedText = convertedText & Mid(mixedText, startPos + 1, endPos - startPos)
Else
' 最后一个匹配之后的所有文本
convertedText = convertedText & Mid(mixedText, match.FirstIndex + match.Length)
End If
Next i
' 如果没有匹配到任何Unicode编码,则直接返回原始文本
If convertedText = "" Then
ConvertUnicodeToText = Replace(mixedText, "\n", vbCrLf)
Else
ConvertUnicodeToText = Replace(convertedText, "\n", vbCrLf)
End If
End Function
这时窗口应该是这样的:
关闭,保存VBA程序窗口。 回到Excel界面。
步骤3. 设置range 名称
因为我在程序中使用了命名的Range,需要先设置几个Range 名字。 3.1 增加一个“Settings”的sheet。 名字一定要叫“Settings"3.2. 在settings zhong,输入以下三行信息(黑色背景)。 把这三个cell分别命名成“Named Range” 名称为:pmodelurl, pmodelname,pmodelapikey不知道什么叫“Named Range", 去查Excel 文档。 3.3. 回到Sheet1, 在Sheet1中按照下面布局输入。3.4 然后将问题部分命名”Named Range“ 名字为: puserquery. 把大模型回答cell命名为:pllmanswer. 命名完成后,在下图位置下拉可以看到这几个“Named Range”步骤4. 在worksheet “Settings” 中设置模型地址和模型名称参数。 点击“Settings” sheet, 保证这三个参数是正确的。
模式一。 本地部署ollama的,这里你只需要改一个地方:模型名称改到你的ollama支持的模型名称。 模型名字一定要匹配ollama的。 那你可以输入哪些具体模型名字呢?在命令行,输入:ollama list模式二。使用云端大模型服务的, 你需要从云服务商获得模型地址和模型API key,和支持的模型名称。输入这三个。 5.1 在sheet1 中,找到”开发者工具“菜单,点击添加按钮。 鼠标变成十字星,选择在C2 cell位置画一下,就会弹出这样的宏窗口。 Range("pllmanswer").Cells(1, 1).Value = CallLLM(Trim(Range("puserquery").Cells(1, 1).Value))
5.4 关闭VBA代码编辑回到Excel Sheet1, 保存。 注意:一定要选择“xlsm” 格式保存!!。 否则VBA代码不会保存。现在大功告成了, 你可以输入问题,等待大模型回答了。
阅读原文:原文链接
该文章在 2025/2/12 9:13:13 编辑过