Страницы: 1
RSS
Перевести код.gs на VBA excel
 
Добрый день!

Имеется решение на базе GOOGLE SHEETS (GS).
Требуется переписать функцию (написанную под GS) для excel.

Основная идея в том, что есть ячейка с XML информацией.
Нужно выдернуть нужную переменную в требуемом формате (текст, десятичная, дата....).

Пример с кодом в GS
https://docs.google.com/spreadsheets/d/1R_oa26WGyKnyQLy4OyOKydb7HPu4fwPiwsTxmM3-e14/edit?usp=sharing

Шаблон excel (для переноса)
https://cloud.mail.ru/public/Sm8U/P7LncnJga  
 
Пишу в личку
Заказ свободен (бюджет 500р)
Изменено: Jack Famous - 14.03.2022 11:20:52
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
вопрос по-прежнему актуален!

Дополнительная информация:
Нужно написать/переписать функцию (на vba) по типу:  GetXmlElement( {xml_txt} , {параметр 1}  ,  {параметр 2} , {параметр 3})

на основании этих параметров вытаскивается искомая переменная.


Как вариант можно добавить еще {параметр 4} чтобы искомая переменная преобразовалась в нужный формат данных (текст / число / дата /.....)
 
Задача решена (своими силами).

Решение:

Код
'вытаскиваем значение переменной из XML
Function GetXmlElement(xmlCell, iData, sID, NM, PARAM)

Set xmlParser = CreateObject("Msxml2.DOMDocument")
xmlParser.async = False
'xmlParser.Load "D:\my.xml" 'вариант для загрузки из файла
'xmlParser.LoadXML Range("B7").Value  'вариант загрузки из ячейки
xmlParser.LoadXML xmlCell.Value  'загрузка XML введенной переменной xmlCell

'Выбираем нужный нам элемент, который отвечает заданным условиям
Set colNodes = _
    xmlParser.SelectNodes("//data[@id='" & iData & "']//row[@" & sID & "='" & NM & "']/@" & PARAM) 'путь
'Перебираем полученную выборку
For Each nodeNode In colNodes

' проверка типа данных и сохранение в нужно типе
If nodeNode.Value Like "####-##-##" = True Then
        GetXmlElement = nodeNode.Value            'дата
    ElseIf nodeNode.Value Like "*##*" Then
        GetXmlElement = Val(nodeNode.Value)       'число
    Else
        GetXmlElement = CStr(nodeNode.Value)      'строка
    End If  
Next
End Function
Изменено: RTM - 20.03.2022 13:15:02
Страницы: 1
Наверх