跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言SaaSAI

基于 Excel VBA 与大模型 API 实现用户反馈情感分析自动化

综述由AI生成通过 Excel VBA 调用大模型 API,可实现批量用户反馈的情感分析。演示了从数据准备、环境配置到代码实现的完整流程,解决了传统人工分析效率低、主观性强及滞后等问题。结合可视化图表,业务人员可快速生成分析报告,降低 AI 应用门槛。

全栈工匠发布于 2026/2/12更新于 2026/6/516 浏览
基于 Excel VBA 与大模型 API 实现用户反馈情感分析自动化

引言:当情感分析遇上行业痛点

在数字化时代,企业每天都会收到大量用户反馈——从电商商品评价、社交媒体提及到客服对话记录。这些非结构化文本中蕴含着用户对产品的真实态度,但传统人工分析存在明显痛点:效率低下(千条评论需数人天)、主观偏差(不同分析员判定标准不一)以及无法实时化(周报级分析滞后于业务需求)。

随着大模型技术的成熟,MaaS(Model as a Service)为这一场景提供了新解法。通过调用预训练模型的 API,企业可以快速实现文本情感分类等 NLP 任务。本文将结合 Excel VBA 与通用 MaaS 平台,演示如何高效完成批量用户反馈的情感分析,并生成可视化结果。

技术准备:工具链与核心逻辑

1. 数据源准备

我们需要一份包含用户评论的数据集。可以使用公开的 UCI 数据集作为测试样本,搜索 "sentiment analysis" 或 "product reviews" 即可找到相关脱敏数据。下载后保存为 TXT 或 CSV 格式,直接导入 Excel 即可使用。

2. 环境配置

Excel 作为企业最熟悉的数据处理工具,通过 VBA(Visual Basic for Applications)可以实现与 MaaS API 的无缝对接。核心逻辑是:读取 Excel 中的用户反馈列表 → 调用 MaaS API 获取情感标签 → 将结果写回 Excel 指定列。

步骤一:启用 VBA 编辑器

打开 Excel,按 Alt + F11 进入 VBA 编辑器。依次执行【工具】→【引用】,勾选以下两项以确保 HTTP 请求和 JSON 解析功能可用:

  • Microsoft XML, v6.0
  • Microsoft Scripting Runtime
步骤二:插入模块

右键工程资源管理器 → 【插入】→【模块】。在此处粘贴后续提供的代码。

实操:从 0 到 1 实现自动化分析

1. 连接测试

在编写完整逻辑前,建议先测试 API 连通性。以下是一个最小化的测试宏,用于验证密钥有效性及网络状态。

' ================================================================ 
' 宏名称:TestOneRequest
' 功能:向 MaaS 平台发送最简请求,测试 API 连通性和密钥有效性
' 使用方法:
' 1. 在 Excel 按 Alt+F11 进入 VBA 编辑器
' 2. 插入模块,粘贴此代码
' 3. 按 Alt+F8 运行 TestOneRequest
' ================================================================ 
Sub TestOneRequest()
    Dim http As Object
    Dim url As String, apiKey As String
    Dim requestBody As String, resp As String
    
    ' ==================== 配置区(请确认)====================
    ' 1. API 地址(请替换为实际使用的 MaaS 平台端点)
    url = "https://api.example.com/v1/chat/completions"
    ' 2. 你的 API Key(确保是 sk- 开头的一整串,不要有多余空格)
    apiKey = "YOUR_API_KEY"
    ' ==========================================================
    
    ' 3. 构造最简请求体
    requestBody = "{\"model\":\"/maas/deepseek-ai/DeepSeek-V3.2\"," & _
                  "\"messages\":[{\"role\":\"user\",\"content\":\"你好\"}]," & _
                  "\"max_tokens\":5}"
    
    ' 4. 创建 HTTP 对象并发送请求
    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "POST", url, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & apiKey
        .send requestBody
    End With
    
    ' 5. 根据 HTTP 状态码判断结果
    If http.Status = 200 Then
        MsgBox "✅ API 连接成功!" & vbCrLf & _
               "状态码:200" & vbCrLf & _
               "返回内容:" & http.responseText, vbInformation, "测试结果"
    Else
        MsgBox "❌ API 请求失败!" & vbCrLf & _
               "状态码:" & http.Status & vbCrLf & _
               "返回内容:" & http.responseText, vbCritical, "测试结果"
    End If
    
    ' 6. 清理对象
    Set http = Nothing
End Sub

常见错误排查:

  • 状态码 401:API Key 无效。请检查控制台重新复制密钥,确保无多余空格。
  • 状态码 404:API 地址错误。请核对文档中的最新端点 URL 及模型 ID。
  • 状态码 429:请求过于频繁。请增加请求间隔或升级配额。
  • 状态码 0:网络连接问题。尝试切换网络环境(如关闭代理/VPN),或将 Excel 加入防火墙白名单。

2. 批量分析代码

连接测试通过后,可使用以下宏进行批量处理。该脚本会逐行读取评论,调用 API 并写入情感结果。

' 蓝耘 MaaS 情感分析 VBA 宏 (已通用化)
' 功能:批量分析 Excel 中的用户评论情感倾向
Sub BatchSentimentAnalysis()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Dim http As Object
    Dim comment As String, prompt As String
    Dim requestBody As String, resp As String
    Dim sentiment As String, note As String
    
    ' ================== 配置区域 ==================
    Const API_KEY As String = "YOUR_API_KEY"
    Const ENDPOINT_URL As String = "https://api.example.com/v1/chat/completions"
    Const INPUT_COL As String = "B"   ' 评论所在列
    Const OUTPUT_COL1 As String = "C" ' 情感结果列
    Const OUTPUT_COL2 As String = "D" ' 备注列
    Const START_ROW As Long = 2       ' 从第 2 行开始(第 1 行为标题)
    ' ===============================================
    
    ' 性能优化设置
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    Set ws = ThisWorkbook.ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, INPUT_COL).End(xlUp).Row
    
    ' 数据验证
    If lastRow < START_ROW Then
        MsgBox "没有找到需要分析的评论数据。请检查 B 列是否有数据。", vbExclamation
        GoTo CleanExit
    End If
    
    ' 创建 HTTP 对象
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    ' 主循环:逐行处理评论
    For i = START_ROW To lastRow
        comment = Trim(ws.Cells(i, ColumnLetterToNumber(INPUT_COL)).Value)
        
        ' 跳过空行
        If Len(comment) = 0 Then
            ws.Cells(i, ColumnLetterToNumber(OUTPUT_COL1)).Value = "无内容"
            ws.Cells(i, ColumnLetterToNumber(OUTPUT_COL2)).Value = ""
            GoTo ContinueNext
        End If
        
        ' 更新状态栏
        Application.StatusBar = "正在分析第 " & i - START_ROW + 1 & " / " & lastRow - START_ROW + 1 & " 条评论..."
        
        ' 构造分析请求
        prompt = "请判断下面这句话的情感倾向,只回答'积极'、'消极'或'中性'中的一个词,不要解释理由,不要加标点符号:" & vbCrLf & comment
        requestBody = "{\"model\": \"gpt-3.5-turbo\", " & _
                      "\"messages\": [" & _
                      "{\"role\": \"system\", \"content\": \"你是一个专业的情感分析助手,擅长分析用户评论的情感倾向。\"}, " & _
                      "{\"role\": \"user\", \"content\": \"" & EscapeJsonString(prompt) & "\"}" & _
                      "], " & _
                      "\"temperature\": 0.1, " & _
                      "\"max_tokens\": 10" & _
                      "}"
        
        ' 发送 API 请求
        With http
            .Open "POST", ENDPOINT_URL, False
            .setRequestHeader "Content-Type", "application/json"
            .setRequestHeader "Authorization", "Bearer " & API_KEY
            .send requestBody
        End With
        
        ' 处理响应
        If http.Status = 200 Then
            resp = http.responseText
            sentiment = ParseSentimentResponse(resp)
            note = "成功"
        Else
            sentiment = "请求失败"
            note = "错误 " & http.Status & ": " & GetHttpErrorMessage(http.Status)
        End If
        
        ' 写入结果
        ws.Cells(i, ColumnLetterToNumber(OUTPUT_COL1)).Value = sentiment
        ws.Cells(i, ColumnLetterToNumber(OUTPUT_COL2)).Value = note
        
        ' 每处理 10 条保存一次,防止数据丢失
        If (i - START_ROW) Mod 10 = 0 Then
            ThisWorkbook.Save
        End If
        
ContinueNext:
    Next i
    
    ' 最终保存
    ThisWorkbook.Save
    
    ' 完成提示
    Application.StatusBar = "分析完成!"
    MsgBox "情感分析完成!" & vbCrLf & _
           "共处理 " & lastRow - START_ROW + 1 & " 条评论。" & vbCrLf & _
           "结果已保存到 C 列(情感)和 D 列(状态)。", vbInformation
    
CleanExit:
    ' 恢复 Excel 设置
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.StatusBar = False
    
    ' 清理对象
    If Not http Is Nothing Then Set http = Nothing
End Sub

' 辅助函数:将列字母转换为列号
Function ColumnLetterToNumber(columnLetter As String) As Integer
    ColumnLetterToNumber = Range(columnLetter & "1").Column
End Function

' 辅助函数:转义 JSON 字符串中的特殊字符
Function EscapeJsonString(str As String) As String
    Dim result As String
    result = Replace(str, "\", "\\")
    result = Replace(result, "\"", "\"\"")
    result = Replace(result, vbCr, "\r")
    result = Replace(result, vbLf, "\n")
    result = Replace(result, vbTab, "\t")
    EscapeJsonString = result
End Function

' 辅助函数:解析 API 响应中的情感结果
Function ParseSentimentResponse(responseText As String) As String
    Dim sentiment As String
    ' 尝试从不同格式的响应中提取情感
    If InStr(responseText, "\"content\":\"\"") > 0 Then
        Dim contentStart As Integer
        contentStart = InStr(responseText, "\"content\":\"\"") + 11
        Dim contentEnd As Integer
        contentEnd = InStr(contentStart, responseText, "\"")
        If contentEnd > contentStart Then
            sentiment = Mid(responseText, contentStart, contentEnd - contentStart)
        End If
    ElseIf InStr(responseText, "积极") > 0 Then
        sentiment = "积极"
    ElseIf InStr(responseText, "消极") > 0 Then
        sentiment = "消极"
    ElseIf InStr(responseText, "中性") > 0 Then
        sentiment = "中性"
    Else
        sentiment = "解析失败"
    End If
    
    ' 清理结果
    sentiment = Trim(sentiment)
    sentiment = Replace(sentiment, "\"", "")
    sentiment = Replace(sentiment, ",", "")
    sentiment = Replace(sentiment, ".", "")
    sentiment = Replace(sentiment, "!", "")
    sentiment = Replace(sentiment, "?", "")
    ParseSentimentResponse = sentiment
End Function

' 辅助函数:获取 HTTP 错误消息
Function GetHttpErrorMessage(statusCode As Integer) As String
    Select Case statusCode
        Case 400: GetHttpErrorMessage = "请求格式错误"
        Case 401: GetHttpErrorMessage = "API 密钥无效"
        Case 403: GetHttpErrorMessage = "权限不足"
        Case 404: GetHttpErrorMessage = "API 端点不存在"
        Case 429: GetHttpErrorMessage = "请求过于频繁"
        Case 500: GetHttpErrorMessage = "服务器内部错误"
        Case 502: GetHttpErrorMessage = "网关错误"
        Case 503: GetHttpErrorMessage = "服务不可用"
        Case Else: GetHttpErrorMessage = "未知错误"
    End Select
End Function

注意: 请将代码中的 YOUR_API_KEY 和 ENDPOINT_URL 替换为您实际申请的凭证和接口地址。模型 ID 也请根据最新文档调整。

3. 运行分析与结果验证

在 Excel 界面,按 Alt + F8 跳出宏界面,选择 BatchSentimentAnalysis,点击【执行】。Excel 将逐步分析每一条评论的情感倾向。

处理完成后,C 列会显示情感标签(积极/消极/中性),D 列显示处理状态。若遇到报错,可参考上方的错误排查部分。

结果可视化:从数据到洞察

完成情感分类后,我们可以通过 Excel 自带的图表功能生成直观的分析报告。

情感分布饼图

选中 C 列(情感标签)数据,插入【饼图】,设置颜色(积极 - 绿色,消极 - 红色,中性 - 灰色),添加数据标签显示百分比。通过图表可快速发现产品满意度趋势,例如若消极占比过高,则说明产品质量或口碑存在问题,需及时改进。

方案优势与适用场景

1. 核心优势

  • 效率提升:数千条数据人工分析需数天,本方案仅需几分钟,且客观一致。
  • 成本可控:按实际调用量计费,远低于人力成本。
  • 灵活扩展:支持调整模型参数、增加分析维度(如五级情感分类、槽位提取)。

2. 适用场景

  • 电商行业:商品评价分析、竞品对比;
  • 金融行业:客户投诉分类、风险预警;
  • 教育行业:课程评价分析、教学改进;
  • 政务领域:民意调查、政策反馈。

总结与展望

通过 Excel VBA 与大模型 API 的组合,我们将用户反馈情感分析的门槛从'专业数据团队'降低至'业务人员自助操作'。这种'低代码 + 大模型'的模式,不仅解决了传统分析的效率问题,更让企业能够快速从非结构化文本中提取业务洞察,实现'数据驱动决策'。未来,随着多模态大模型的发展,我们还可以扩展分析维度(比如结合图片/视频进行情感判断),进一步提升分析的深度与广度。对于希望快速落地 AI 应用的企业而言,这或许是最具性价比的切入点。

目录

  1. 引言:当情感分析遇上行业痛点
  2. 技术准备:工具链与核心逻辑
  3. 1. 数据源准备
  4. 2. 环境配置
  5. 步骤一:启用 VBA 编辑器
  6. 步骤二:插入模块
  7. 实操:从 0 到 1 实现自动化分析
  8. 1. 连接测试
  9. 2. 批量分析代码
  10. 3. 运行分析与结果验证
  11. 结果可视化:从数据到洞察
  12. 情感分布饼图
  13. 方案优势与适用场景
  14. 1. 核心优势
  15. 2. 适用场景
  16. 总结与展望
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 类与对象进阶:初始化列表、静态成员与编译器优化实战
  • 基于 Bright Data MCP Server 构建实时数据驱动的 AI 情报系统实战
  • 前后端分离架构深度解析:选型、优缺点与实战对比
  • Vue3 + TypeScript:Promise<string> 转 string 类型错误解析与异步处理
  • 机器人脑部药物递送三大技术路径的可转化性分析研究
  • EpicDesigner 快速上手指南:Vue3 拖拽式低代码设计器
  • Python 处理中文文件:解决 UTF-8 解码错误的 4 种实战方法
  • Python 数据类转换为 JSON 的三种方法
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署、推理与微调实践
  • Visual C++ Redistributable 运行时组件问题修复指南
  • C++ 字符序列处理详解
  • Git 本地核心操作:Commit 规范、Reset 回退与 Restore 撤销
  • Android Framework 源码解析与核心原理详解
  • 2024 年大模型行业应用十大典范案例解析
  • 如何挖掘大模型应用场景及驱动技术发展
  • CS336 从零构建语言模型:Transformer LM 架构实现
  • 低空经济新实践:无人机如何革新光伏电站巡检
  • Floweb 超轻量浮动浏览器功能介绍
  • GitHub 文件夹精准下载指南:三步获取所需文件
  • 医疗 AI 可信革命全栈实现(下)

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online