Страницы: 1
RSS
Изменение файла xml макросом, Поменять некоторые данные в xml-файле
 
Нужно в файле xml поменять некоторые данные. Либо в самом файле, либо создать новый.
Данные меняются по следующему правилу: количество в штуках надо изменить на кг, литры и другие. Норма каждого товара своя (есть справочник), поэтому надо вытянуть из xml данные КодТов и КолТов, пересчитать количество (норма у каждого товара своя, например, умножить на 5, 10 или 20) и записать в xml новое количество, а также поменять ОКЕИ_Тов на нужный и ЦенаТов на расчётную.
По форуму поискал, но так не смог найти рабочий вариант кода хотя бы получения данных из xml. Везде свои форматы xml и подогнать код под свои нужды не получилось.
Загрузить в Excel можно, но там КодТов получается без нулей и искать такой код потом в справочнике плохо.
Посоветуйте, как лучше сделать и в какую сторону копать?

ЗЫ. Почему-то файл xml размером 5 КБ этот форум принял как более 100 КБ. Поэтому rar.
 
Код
        strFilePath = "C:\sample1.xml"
        Set xmlDoc = CreateObject("MSXML2.DOMDocument")
        xmlDoc.Load strFilePath
        xmlDoc.setProperty "SelectionLanguage", "XPath"
        XPath = "//ДопСведТов"
        Set objListOfNodes = xmlDoc.SelectNodes(XPath)
        For i = 0 To objListOfNodes.Length - 1
            ПрТовРаб = objListOfNodes(i).Attributes.getNamedItem("ПрТовРаб")
            КодТов = objListOfNodes(i).Attributes.getNamedItem("КодТов")
            НаимЕдИзм = objListOfNodes(i).Attributes.getNamedItem("НаимЕдИзм")
        Next
 
На строке 8
Код
ПрТовРаб = objListOfNodes(i).Attributes.getNamedItem("ПрТовРаб")
выскакивает Ошибка Run-time error '438' - Object doesn't support this property or method.

На форуме есть такая же тема Ошибка Run-time error '438' - Object doesn't support this property or method, но не помогает.

Может, в References надо галку где-то в нужном месте поставить?


Excel 2010 (32bit) на Windows Server 2008R2 (64)

 
Писал на коленке, забыл, что это объект, а не значение
Код
            ПрТовРаб = objListOfNodes(i).Attributes.getNamedItem("ПрТовРаб").Text
            КодТов = objListOfNodes(i).Attributes.getNamedItem("КодТов").Text
            НаимЕдИзм = objListOfNodes(i).Attributes.getNamedItem("НаимЕдИзм").Text
Изменено: doober - 01.10.2020 08:54:56
 
Цитата
doober написал:
Надо стать на строку 8 и посмотреть, есть ли такой атрибут ПрТовРаб.
- есть, но у меня тоже выпадает на этой строке: http://prntscr.com/ur0qko
 
По ходу дела вопросов не уменьшается.
Например, как получить данные просто между тэгами, типа значение СумНал в примере файла xml.
А уж про изменение нужных значений, думаю, вообще мрак будет.
Есть ещё тут темы по изменению xml, например Экспорт из Эксель в XML, Редактирование XML с помощью Экселя. Там тоже главная мысль, что xml- штука каждый раз индивидуальная и не решаемая.
В общем, я так понял, что сам файл xml изменить нельзя,  можно на его основе создать новый. Так? Если так, то конкретно описанная изначально проблема проще, по-моему, решается через операции ввода/вывода для работы с текстовым файлом.
Пока сделал так... Хотя код от doober тоже пригодился в другом месте, спасибо.

ЗЫ. Потратил кучу времени на этот xml, но ясности не прибавилось. Можно позавидовать некоторым, кому надо было пару часов, чтоб разобраться с этой хитромудрой глючной штуковиной - xml.
Ладно, будем дальше разбираться, но только по необходимости и без фанатизма.
 
Цитата
tolikt написал:
глючной штуковиной - xml.
Microsoft создал весьма удобный и производительный парсер для обработки XML-документов (и не "глючный"). Думаю, что лучшее описание возможностей здесь (несмотря на возраст).
Владимир
 
Цитата
tolikt написал:
В общем, я так понял, что сам файл xml изменить нельзя,
Не может быть
Код
НаимЕдИзм = objListOfNodes(i).Attributes.getNamedItem("НаимЕдИзм").Text
if НаимЕдИзм="шт" then
   objListOfNodes(i).Attributes.getNamedItem("НаимЕдИзм").Text="кг"
end if
'more more code line
xmlDoc.Save strFilePath
Страницы: 1
Наверх