Я боролся со следующим; может быть немного сложным.
У меня есть файл Excel, который был экспортирован из приложения XML.
Лист 1 содержит ряды строк, подобные приведенным ниже. Каждая строка с нечетным номером содержит около 10 таких строк, но это может варьироваться. (Я ищу решение для заполнения строк с четными номерами; см. Ниже.)
Лист 2, колонка А, содержит ряд строк, как 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 будет выглядеть так:
(0) +1 за занижение месяца: «может быть немного сложным». (1) Кажется, что структура ячеек нечетных строк - красная сельдь. Если A17 содержит «как», «C17» содержит «сейчас», «E17» содержит «коричневый», а «Q17» содержит «корову», вы хотите, чтобы «A18` =« как »,` B18` = «сейчас» ”,` C18` = “коричневый” и `D18` =“ корова ”- точно так же, как если бы` F17` содержал слова “как”, “сейчас”, “коричневые”, *** и *** “корова” ». Правильно? … (Продолжение)
Scott 9 лет назад
0
(Продолжение)… (2) Почему вы не хотите, чтобы ваш вывод содержал «Unit» и «Vector», как в ответе Майка? Это потому, что их нет в «Листе 2! Колонка А»? Если это так, вы должны были предоставить нам этот (полный) столбец как часть примера. (3) Требуется ли, чтобы результаты в строке 42 были в порядке первого появления в строке 41, или это нормально, если они в порядке «Лист 2! Столбец А»? (4) Какое дело в том, что `B1` начинается и заканчивается кавычками, а` A1` нет? Должны ли мы просто игнорировать это? … (Продолжение)
Scott 9 лет назад
0
(Продолжение)… (5) Если строка с нечетным номером содержит только «Ref_No», это «считается» или должно быть `attrid =" Ref_No "`? - или `` attrid = "Ref_No" ``, с пробелами до и после? Как насчет `attrid = Ref_No` (без кавычек)? (6) Просто из любопытства, это "attrid" или "attrib"? (7) Какое дело с `C1`? Это еще одна красная сельдь - шумовая запись, которую нужно игнорировать - или есть вероятность, что подобная строка может содержать подстроку, которую нужно найти? … (Продолжение)
Scott 9 лет назад
0
(Продолжение)… (8) Вы показали, что `A1` содержит два экземпляра` attrid = "Measurement_1" `. Я предполагаю, что, даже если `A1` содержал один, а` D1` содержал другой, вы бы хотели, чтобы `Measurement_1` сообщалось только один раз в строке 2. Но что произойдет, если строка 83 также содержит` attrid = "Measurement_1" `? Вы хотите, чтобы `Measurement_1` сообщалось в строке 84 тогда? (00) Пожалуйста, не отвечайте в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным.
Scott 9 лет назад
0
1 ответ на вопрос
0
Mike Honey
Your XML strings look odd - lots of incomplete tags?
Anway I would start from the XML file and load it using the Power Query Add-In. This has a specific "From XML" handler and you can easily shape the data along the way using the Power Query commands.
Here's an example I built using an edited version of your XML content (I added a root element and closing tags to make it a valid XML file).
The only action that seemed necessary to achieve what you want was to select the Attribute:attrid column and choose Remove Columns / Remove Other Columns.
You can see the result in the background - an Excel table. Any time the XML file changes, you just hit Refresh to re-run the Power Query.
Спасибо за ответ, к сожалению, я не могу установить надстройки в своей организации. Любые идеи, которые не требуют использования надстроек? Кроме того, я не осознавал, что Excel может действительно «понимать» XML; Я скорее думал, что это будет процесс поиска, поэтому я не обращал внимания на синтаксис при копировании и вставке.
DimitrisX 9 лет назад
0