作為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 編輯過