Импортировать JSON данные в шаблон Microsoft Word? - PullRequest
0 голосов
/ 17 января 2020

В настоящее время я работаю над приложением, которое получает информацию из API и возвращает ее как JSON. Целью всех данных является заполнение документа Microsoft Word, который остается неизменным каждый раз, но информация меняется. Я обнаружил продукт «Winward Stud ios», который позволяет вам создавать шаблон документа в Word и в основном подключать места, где информация будет извлекаться из JSON, и указывать ключи. Однако это очень дорого (261 доллар в месяц). В настоящее время пользователи загружают JSON с веб-страницы и перезаписывают существующий файл, связанный с шаблоном Word. Есть ли какие-либо альтернативные продукты / способы достижения sh этого?

1 Ответ

0 голосов
/ 17 января 2020

1) Слово (и превосходство, возможно, и другие) - это форма XML. Поэтому моей первой попыткой было создание текстового документа. Таким образом, мы сможем просто объединить данные JSON. Это было слишком сложно для меня.

2) Второй попыткой был документ Excel, встроенный в текстовый документ. В Excel есть вкладка Data, которая позволяет импортировать from JSON в современных версиях. В более старых версиях, которые не поддерживают импорт JSON напрямую, я просто импортировал from web и предоставил строку JSON в качестве тела HTML документа. Я полагаю, вы сейчас делаете что-то подобное. Это сработало, но выглядело очень плохо.

3) В конце я просто написал функцию ajax и метод доступа в VBA, чтобы мы могли использовать их в старых версиях excel и word с макросами.

' Provide URL to a resource, get parsed JSON version back.
' XMLHttpRequest() is native as MSXML2.XMLHTTP
' JScript was the MS implementation of javascript.
' Since JSON is valid javascript, the JScript parser can eval our JSON string
' Caveat: we can't directly access the values yet, so use getJSVal() to get the values.
' Caveat: no authentication on the request.
Public Function ajax(endpoint As String) As Object
    Dim HTTP As Object
    Dim parser As Object
    Dim json As Object
    Set HTTP = CreateObject("MSXML2.XMLHTTP")
    Set parser = CreateObject("MSScriptControl.ScriptControl")
    HTTP.Open "GET", endpoint, False
    'extra headers the service expects
    'HTTP.setRequestHeader "x-header-name", "header-value"
    HTTP.send
    parser.Language = "JScript"
    Set json = parser.Eval("(" + HTTP.responseText + ")")
    HTTP.abort
    Set ajax = json
End Function

И

' Grab an object by key name from the JS object we loaded and parsed.
' We can't access this directly without installing a parser that converts the JSON to actual variables.
' See the Microsoft Office App Store for the official free JSON-To-Excel converter
Public Function getJSVal(json As Object, key As String) As Variant
    Dim result As Variant
    result = VBA.CallByName(json, key, VbGet)
    If IsNull(result) Then
        getJSVal = 0#
    Else
        getJSVal = result
    End If
End Function

Как только мы обновим наши старые версии Office, мы начнем использовать один из официальных JSON анализаторов для Office.

...