如何将Excel连接到Microsoft的QnA Maker(VBA)

自由职业者

我会定期收到带有问题的excel文件(我从以前的迭代中得到答案。问题总是相似的),并且我想自动答复。我已经在Microsoft QnAMaker中创建了包含所有问题/答案对的知识库。

如何致电Microsoft的QnAMaker回答来自Excel的问题。我一直在寻找vba示例,但到目前为止我还没有发现任何东西。我相信我需要使用vba从excel发出具有授权的HTTP请求,然后处理响应。有人对我如何提出请求和处理请求有想法吗?

任何帮助表示赞赏。谢谢!

这些是QnAMaker提供的进行呼叫的示例详细信息:

 POST /knowledgebases/d02d1d7e-1bc0-461a-8074-37749cae41b9/generateAnswer
 Host: https://rfp1.azurewebsites.net/qnamaker
 Authorization: EndpointKey cec4b630-9e77-474f-8df4-e6430a5678c8
 Content-Type: application/json
 {"question":"<Your question>"}
里奇森

我发现了两种方法可以做到这一点。首先是VBA。其次是关于Power Queries。

VBA

可选设置

在此处输入图片说明

  1. 通过转到文件>选项>自定义功能区>检查开发人员,将开发人员标签添加到功能区

  2. 转到“开发人员”标签,然后选择“插入”>“按钮”

  3. 将宏命名为“ GetReplies”

  4. 点击新建

笔记:

VBA设定

  1. 在“开发人员”选项卡中,单击“ Visual Basic”按钮(如果未自动打开)

  2. 转到工具>参考,然后启用以下库: 在此处输入图片说明

  3. 按照安装说明导入此JSON库

  4. 复制/粘贴:

VBA代码:

Sub GetReplies()

    'User Settings
    Dim questionWorksheetName As String, questionsColumn As String, firstQuestionRow As String, kbHost As String, kbId As String, endpointKey As String

        questionWorksheetName = "Sheet1"
        questionsColumn = "A"
        firstQuestionRow = "2"

        kbHost = "https://**********.azurewebsites.net/qnamaker"
        kbId = "*******-****-****-****-**********"
        endpointKey = "*********-****-****-****-***********"

    'Non-User Settings
    Dim questionWorksheet As Worksheet
        Set questionWorksheet = Sheets(questionWorksheetName)
    Dim startCell As String
        startCell = questionsColumn & firstQuestionRow
    Dim questionsRange As Range
        Set questionsRange = questionWorksheet.Range(startCell, questionWorksheet.Range(startCell).End(xlDown))

    'Loop through all non-blank cells
    Dim answer As String
    For Each cell In questionsRange
        If Not IsEmpty(cell) Then
            answer = GetAnswer(cell.Value, kbHost, kbId, endpointKey)
            'Add answer to cell
            cell.Offset(0, 1).Value = answer
        End If
    Next

End Sub

Function GetAnswer(question, kbHost, kbId, endpointKey) As String
    'HTTP Request Settings
    Dim qnaUrl As String
        qnaUrl = kbHost & "/knowledgebases/" & kbId & "/generateAnswer"
    Dim contentType As String
        contentType = "application/json"
    Dim data As String
        data = "{""question"":""" & question & """}"

    'Send Request
    Dim xmlhttp As New MSXML2.XMLHTTP60

    xmlhttp.Open "POST", qnaUrl, False
        xmlhttp.SetRequestHeader "Content-Type", contentType
        xmlhttp.SetRequestHeader "Authorization", "EndpointKey " & endpointKey
    xmlhttp.Send data

    'Convert response to JSON
    Dim json As Dictionary
    Set json = JsonConverter.ParseJson(xmlhttp.ResponseText)

    Dim answer As Dictionary

    For Each answer In json("answers")
    'Return response
        GetAnswer = answer("answer")
    Next

End Function
  1. 适当地编辑顶部的“用户设置”

运行后,我得到:

在此处输入图片说明

电源查询

创建HTTP连接查询

  1. 数据选项卡>获取数据>从其他来源>空白查询

  2. 单击高级编辑器并复制粘贴

码:

(Question as text) =>
let
    url = "https://***host****.azurewebsites.net/qnamaker/knowledgebases/****kbId******/generateAnswer",
    endpointKey = "****endpointKey*****",
    table = Excel.CurrentWorkbook(){[Name="Answers"]}[Content],
    row = Table.SelectRows(table, each ([Answer] = Question)),
    body = "{""question"":""" & Question & """}",
    Parsed_JSON = Json.Document(body),
    BuildQueryString = Uri.BuildQueryString(Parsed_JSON),
    headers = [#"Content-Type"="application/json", #"Authorization"="EndpointKey " & endpointKey],
    content = Text.ToBinary(body),
    Source = Json.Document(Web.Contents(url, [Headers = headers, Content = content])),
    answers = Source[answers],
    answers1 = answers{0},
    answer = answers1[answer]
in
    answer
  1. 根据需要替换变量

  2. 将查询重命名为“ GetAnswer”

  3. 退出Power Query,保存更改

创建表

  1. 用您的问题创建表格

在此处输入图片说明

  1. 选择表格。表格设计标签>将表格重命名为答案

  2. 选中整个表格后,数据标签>从表格/范围

  3. 添加列>调用自定义功能

  4. 列名=答案,函数查询= GetAnswer,问题:列名=问题

  5. 好。确定/退出/保存

然后,您可以将问题添加到表中,转到创建“问题/答案”表的工作表,然后单击“刷新”以获取新答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章