Войти

Показать полную графическую версию : Заменить в файле xml значения по справочнику


Страниц : [1] 2

v79italya
02-05-2022, 20:17
Здравствуйте
Возможно ли скриптом проделать следующее: заменить значения в файле xml по справочнику. Справочник в файле Лист Microsoft Excel.xlsm в таблице SNMPDiscovery. Желательно чтобы данные справочника брались из умной таблицы

Serguei Kouzmine
03-05-2022, 02:11
скрипт на повершел можно написать чтобы это сделать

v79italya
03-05-2022, 08:44
Паувэр шелл тоже подходит.
Только я сам не смогу написать, т.к. не умею
Прошу помочь.
Сейчас эту задачу выполняю вручную в Нотепадд++. Двадцать-тридцать замен не очень напрягает. Но есть вероятность что замен будет более пятидесяти раз. Благо это нужно всего два-три раза в месяц

megaloman
03-05-2022, 12:01
v79italya, .vbsOption 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"

v79italya
03-05-2022, 12:57
megaloman, спасибо за скрипт!
С кириллицей в пути или в имени файла не захотел работать. Но это не беда
А вот с этим справочником почему не хочет работать? 12 замен сделало и все
ps предупрежу что в последней строке справочника Номер 1 заменяется на vv. Это я проверял будет ли происходить замена если в одном искомом значении есть часть другого искомого значения. Будет

megaloman
03-05-2022, 16:10
v79italya, С кириллицей в пути или в имени файла не захотел работать. » - не надо ляля. Сохраняйте скрипт в 1251 кодировке, у меня же работает. На всякий случай прилагаю свой файл. А вот с этим справочником почему не хочет работать? 12 замен сделало и все »Всегда можно подобрать данные, способные одурачить программуПроблема - в столбце справочника пустые ячейки. Уточняю: в столбце A не должно быть пустых ячеек среди данных. В столбце B - эту ситуацию учел.если в одном искомом значении есть часть другого искомого значения. »Больше не будет, если в обрабатываемом файле эти значения в кавычках.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. Пропишите свои пути.

v79italya
03-05-2022, 17:46
megaloman, спасибо еще раз
сли в обрабатываемом файле эти значения в кавычках »
вот этот момент я не до конца понял. Если надо заменить Магазин Продуктов на Продуктовый Магазин, а также заменить Магазин на Ларек и Продукт на Товар, то как следует их в кавычки брать?

megaloman
03-05-2022, 17:58
v79italya, Я в тупике, что Вам надо.
Если в справочнике
Магазин Продуктов и Продуктовый Магазин
скрипт в файле будет искать "Магазин Продуктов" и менять на "Продуктовый Магазин"
"Магазин продуктов №5" уже не поменяется на "Продуктовый магазин" если это в справочнике не прописано.
А иначе как определить, где полное название а где его часть?будет ли происходить замена если в одном искомом значении есть часть другого искомого значения. Будет - мы это проходили. Сформулируйте, как определить, как подставить строку. Будем думать.

v79italya
03-05-2022, 20:14
megaloman, меня уже все устраивает. Даже первый Ваш скрипт мне подходит(Учитывать отсутствие кириллицы в пути и имени файла не проблема).
А так вот например с чем приходится работать

megaloman
03-05-2022, 20:20
А так вот например с чем приходится работать »Что это? И что с этого надо поиметь? Не пойму проблему кириллицы в пути и имени файла - нет её. Формулируйте, чтобы можно было решить.

v79italya
03-05-2022, 20:33
megaloman, я же говорю проблема решена.
И даже если б Вы не сказали как лечить(Сохраняйте скрипт в 1251 кодировке) проблему с кириллицей то меня бы устроил и такой вариант.
А текстовый файл я просто показал с чем работать мне приходится. Ничего решать не надо. Уже решено все что нужно было в начале темы

v79italya
19-05-2022, 15:35
megaloman, здравствуйте
Не знаете почему не работает замена?
Все заменяемые значения обернуты в <Description>

megaloman
19-05-2022, 19:08
v79italya, Ваш файл при скачивании блокируется как вредоносный. Не могу его посмотреть

v79italya
19-05-2022, 20:00
В архиве выгрузка справочника из 1с и файл Excel плюс vbs.
По отдельности большой размер выходит, не пропускает.


Я с гугглХром скачиваю свой файл. Ошибка: обнаружен вирус. Там справочник в 2,4 мб

v79italya
19-05-2022, 20:12
Ругается на xlsm. Файл xlsx сделаю по новой

v79italya
19-05-2022, 20:19
xlsx загружаю в архиве т.к. размер тоже большой

v79italya
21-05-2022, 19:24
Как я понял, проблема в кодировке. Теперь справочник в кодировке - UTF-8-BOM и это сильно, раз нет ответа, усложняет обработку подобных файлов

megaloman
21-05-2022, 20:13
v79italya, заменить значения в файле xml по справочнику. ......значения обернуты в <Description> »Вы не предоставили xml.

v79italya
22-05-2022, 00:45
Файл xml в архиве Товары.rar.
В файле Excel.rar экселевский файл с таблицей(что менять и на что менять).
Сейчас проверил - эти файлы скачиваются

megaloman
22-05-2022, 23:04
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"




© OSzone.net 2001-2012