Я боролся со следующим; может быть немного сложным.

У меня есть файл Excel, который был экспортирован из приложения XML.

Лист 1 содержит ряды строк, подобные приведенным ниже. Каждая строка с нечетным номером содержит около 10 таких строк, но это может варьироваться. (Я ищу решение для заполнения строк с четными номерами; см. Ниже.)

Лист 2, столбец A, содержит диапазон строк, таких как Measurement_1 , Ref_No и Maximum_Velocity , которые называются атрибутами.

Мне нужно найти каждый из этих атрибутов в каждой ячейке каждой строки с нечетным номером на листе 1 и вставить каждый уникальный атрибут, который появляется в виде подстроки в этих строках, в новую строку ниже, каждый в своей отдельной ячейке.

Обратите внимание, что каждое значение в сгенерированных строках должно быть уникальным.

Есть ли какая-нибудь функция, регулярное выражение или сценарий VBA, которые могут это сделать? Я много искал на форумах и в других местах и не смог сделать это сам.

Я надеюсь, что все это имеет смысл, но я с удовольствием объясню все что угодно!


1 ряд

Cell A1:
<ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" - "></ref></ref>

Cell B1:
"<ref attrid="Ref_No" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Unit" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" "><ref attrid="Vector" equalsign="=" includeattrname="false" resolveto="value" separator=" (Dia)"><ref attrid="Object_Diameter" equalsign="=" includeattrname="false" resolveto="unit" separator=""><ref attrid="Thread_Size" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=","><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" "><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" of ">"

Cell C1:
CONCATENATE("This ", LOWER(VAL("Device_Type")),F(AND(EXACT(VAL("Max_Temperature_Range"),("")),EXACT(VAL("Min_Temperature_Range"),"")),".",CONCATENATE("appeared to operate safely from a minimum temperature of ", VAL("Min_Temperature_Range"),UNIT("Min_Temperature_Range")," to a maximum temperature of ", VAL("Max_Temperature_Range"),UNIT("Max_Temperature_Range"),".")))

Желаемый результат в строке 2 будет выглядеть так:

Cell A2:Measurement_1
Cell B2:Ref_No
Cell C2:Object_Diameter
Cell D2:Object_Length
Cell E2:Device_Type
Cell F2:Max_Temperature_Range
Cell G2:Min_Temperature_Range

1 ответ1

0

Ваши строки XML выглядят странно - много неполных тегов?

В любом случае я бы начал с XML-файла и загрузил его с помощью Power Query Add-In. У этого есть специальный обработчик "From XML", и вы можете легко формировать данные по пути, используя команды Power Query.

Вот пример, который я построил с использованием отредактированной версии вашего содержимого XML (я добавил корневой элемент и закрывающие теги, чтобы сделать его действительным файлом XML).

Power Query - из примера файла XML

Единственное действие, которое казалось необходимым для достижения желаемого, - это выбрать столбец Атрибут:attrid и выбрать Удалить столбцы / Удалить другие столбцы.

Вы можете увидеть результат на заднем плане - таблицу Excel. Каждый раз, когда файл XML изменяется, вы просто нажимаете Обновить, чтобы повторно запустить Power Query.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .