Заменить в файле xml значения по справочнику
Вложений: 1
Здравствуйте
Возможно ли скриптом проделать следующее: заменить значения в файле xml по справочнику. Справочник в файле Лист Microsoft Excel.xlsm в таблице SNMPDiscovery. Желательно чтобы данные справочника брались из умной таблицы
|
Serguei Kouzmine |
03-05-2022 02:11 2984300 |
скрипт на повершел можно написать чтобы это сделать
|
Паувэр шелл тоже подходит.
Только я сам не смогу написать, т.к. не умею
Прошу помочь.
Сейчас эту задачу выполняю вручную в Нотепадд++. Двадцать-тридцать замен не очень напрягает. Но есть вероятность что замен будет более пятидесяти раз. Благо это нужно всего два-три раза в месяц
|
v79italya, .vbs
Код:
Option Explicit
Dim FileXLS: FileXLS = "Z:\Box_In\папка\Лист Microsoft Excel.xlsm"
Dim BeginXLS: BeginXLS = "A2"
Dim FileXMLin: FileXMLin = "Z:\Box_In\папка\SNMPDiscovery.xml"
Dim FileXMLout: FileXMLout = "Z:\Box_In\папка\SNMPDiscoveryOut.xml"
Dim Mass, i, i1, i2, j2
Dim AllTxt
MsgBox "Begin"
With CreateObject("Excel.Application")
.Visible = False 'True
.Workbooks.Open FileXLS
Mass = .Range(.Range(BeginXLS), .Range(BeginXLS).Offset(0, 1).End(-4121))
.Quit
End With
i1 = LBound(Mass, 1)
i2 = UBound(Mass, 1)
j2 = UBound(Mass, 2)
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile(FileXMLin, 1, False)
AllTxt = .ReadAll
.Close
End With
For i = i1 To i2
AllTxt = Replace(AllTxt, Mass(i, i1), Mass(i, j2))
Next
With .OpenTextFile(FileXMLout, 2, True)
.Write AllTxt
.Close
End With
End With
MsgBox "Done"
|
Вложений: 1
megaloman, спасибо за скрипт!
С кириллицей в пути или в имени файла не захотел работать. Но это не беда
А вот с этим справочником почему не хочет работать? 12 замен сделало и все
ps предупрежу что в последней строке справочника Номер 1 заменяется на vv. Это я проверял будет ли происходить замена если в одном искомом значении есть часть другого искомого значения. Будет
|
Вложений: 1
v79italya,
Цитата:
Цитата v79italya
С кириллицей в пути или в имени файла не захотел работать. »
|
- не надо ляля. Сохраняйте скрипт в 1251 кодировке, у меня же работает. На всякий случай прилагаю свой файл.
Цитата:
Цитата v79italya
А вот с этим справочником почему не хочет работать? 12 замен сделало и все »
|
Цитата:
Цитата Кто-то из патриархов
Всегда можно подобрать данные, способные одурачить программу
|
Проблема - в столбце справочника пустые ячейки. Уточняю: в столбце A не должно быть пустых ячеек среди данных. В столбце B - эту ситуацию учел.
Цитата:
Цитата v79italya
если в одном искомом значении есть часть другого искомого значения. »
|
Больше не будет, если в обрабатываемом файле эти значения в кавычках.
Код:
Option Explicit
Dim FileXLS: FileXLS = "D:\Мой контент\Загрузки\Microsoft Excel.xlsx"
Dim BeginXLS: BeginXLS = "A2"
Dim FileXMLin: FileXMLin = "Z:\Box_In\папка\SNMPDiscovery.xml"
Dim FileXMLout: FileXMLout = "Z:\Box_In\папка\SNMPDiscoveryOut.xml"
Dim Mass, i, i1, i2, j2
Dim AllTxt
MsgBox "Begin"
With CreateObject("Excel.Application")
.Visible = False 'True
.Workbooks.Open FileXLS
Mass = .Range(BeginXLS + ":" + .Range(BeginXLS).End(-4121).Offset(0, 1).Address)
.Quit
End With
i1 = LBound(Mass, 1)
i2 = UBound(Mass, 1)
j2 = UBound(Mass, 2)
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile(FileXMLin, 1, False)
AllTxt = .ReadAll
.Close
End With
For i = i1 To i2
AllTxt = Replace(AllTxt, """" + Mass(i, i1) + """", """" + Mass(i, j2) + """")
Next
With .OpenTextFile(FileXMLout, 2, True)
.Write AllTxt
.Close
End With
End With
MsgBox "Done"
Переименуйте мой файл из txt. Пропишите свои пути.
|
megaloman, спасибо еще раз
Цитата:
Цитата megaloman
сли в обрабатываемом файле эти значения в кавычках »
|
вот этот момент я не до конца понял. Если надо заменить Магазин Продуктов на Продуктовый Магазин, а также заменить Магазин на Ларек и Продукт на Товар, то как следует их в кавычки брать?
|
v79italya, Я в тупике, что Вам надо.
Если в справочнике
Магазин Продуктов и Продуктовый Магазин
скрипт в файле будет искать "Магазин Продуктов" и менять на "Продуктовый Магазин"
"Магазин продуктов №5" уже не поменяется на "Продуктовый магазин" если это в справочнике не прописано.
А иначе как определить, где полное название а где его часть?
Цитата:
будет ли происходить замена если в одном искомом значении есть часть другого искомого значения. Будет
|
- мы это проходили. Сформулируйте, как определить, как подставить строку. Будем думать.
|
Вложений: 1
megaloman, меня уже все устраивает. Даже первый Ваш скрипт мне подходит(Учитывать отсутствие кириллицы в пути и имени файла не проблема).
А так вот например с чем приходится работать
|
Цитата:
Цитата v79italya
А так вот например с чем приходится работать »
|
Что это? И что с этого надо поиметь? Не пойму проблему кириллицы в пути и имени файла - нет её. Формулируйте, чтобы можно было решить.
|
megaloman, я же говорю проблема решена.
И даже если б Вы не сказали как лечить(Сохраняйте скрипт в 1251 кодировке) проблему с кириллицей то меня бы устроил и такой вариант.
А текстовый файл я просто показал с чем работать мне приходится. Ничего решать не надо. Уже решено все что нужно было в начале темы
|
megaloman, здравствуйте
Не знаете почему не работает замена?
Все заменяемые значения обернуты в <Description>
|
v79italya, Ваш файл при скачивании блокируется как вредоносный. Не могу его посмотреть
|
В архиве выгрузка справочника из 1с и файл Excel плюс vbs.
По отдельности большой размер выходит, не пропускает.
Я с гугглХром скачиваю свой файл. Ошибка: обнаружен вирус. Там справочник в 2,4 мб
|
Ругается на xlsm. Файл xlsx сделаю по новой
|
xlsx загружаю в архиве т.к. размер тоже большой
|
Как я понял, проблема в кодировке. Теперь справочник в кодировке - UTF-8-BOM и это сильно, раз нет ответа, усложняет обработку подобных файлов
|
v79italya,
Цитата:
Цитата v79italya
заменить значения в файле xml по справочнику. ......значения обернуты в <Description> »
|
Вы не предоставили xml.
|
Файл xml в архиве Товары.rar.
В файле Excel.rar экселевский файл с таблицей(что менять и на что менять).
Сейчас проверил - эти файлы скачиваются
|
Вложений: 1
v79italya, Вот вариант с UTF-8. Единственное, не понимаю как работает справочник в xlsx, там стоят формула с генерацией случайного соответствия.
Код:
Option Explicit
Dim FileXLS: FileXLS = "Z:\Box_In\Excel.xlsx"
Dim BeginXLS: BeginXLS = "A2"
Dim FileXMLin: FileXMLin = "Z:\Box_In\Товары.xml"
Dim FileXMLout: FileXMLout = "Z:\Box_In\ТоварыOutADO.xml"
Dim Mass, i, i1, i2, j2
Dim AllTxt
MsgBox "Begin"
With CreateObject("Excel.Application")
.Visible = False 'True
.Workbooks.Open FileXLS
Mass = .Range(BeginXLS + ":" + .Range(BeginXLS).End(-4121).Offset(0, 1).Address)
.DisplayAlerts = False
.Quit
End With
i1 = LBound(Mass, 1)
i2 = UBound(Mass, 1)
j2 = UBound(Mass, 2)
With CreateObject("ADODB.Stream")
.Charset = "utf-8"
.Open
.LoadFromFile (FileXMLin)
AllTxt = .ReadText()
.Close
For i = i1 To i2
AllTxt = Replace(AllTxt, ">" + Mass(i, i1) + "<", ">" + Mass(i, j2) + "<")
Next
.Open
.WriteText AllTxt
.SaveToFile FileXMLout, 2
.Close
End With
MsgBox "Done"
|
Цитата:
Цитата megaloman
как работает справочник в xlsx, там стоят формула с генерацией случайного соответствия »
|
Данные в первой колонке справочника - реальные данные, выгруженные с 1с. Мне эти данные надо заменить на другие, без разницы какие. Вот формула и меняет на случайное значение. Далее я этот справочник загоняю обратно в 1с, повторяю эти же действия с другими справочниками. И все! У меня есть база данных, по значениям которой я могу построить отчеты и дашборды и показывать их при поиске работы на собеседованиях.
За скрипт спасибо! Опробовал - работает
Удалил конфинфу
|
Время: 23:48.
© OSzone.net 2001-