Bazaprogram.ru

Новости из мира ПК
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel xml

Импорт данных из xml-файла

Вложения

9070481out.rar (426 байт, 107 просмотров)
15.01.2014, 07:13

Много XML-файлов — импорт данных в один Excel
Добрый вечер! Прошу помочь в следующем вопросе. Имеется папка с несколькими тысячами xml-файлов.

Импорт данных из XML файла
Есть ХМЛ файл В нем есть таблица с записями Нужно импортировать ее в программу и затем вызывать.

Импорт данных из XML файла
Добрый день! Я новичок в Qt. Хочу спросить, каким способом можно организовать импорт данных из XML.

Импорт данных из xml-файла в mysql
Здравствуйте, подскажите пожалуйста, как можно импортировать данные из xml-файла в mysql. 815.01.2014, 11:132

Visual Basic
Visual Basic
Visual Basic
15.01.2014, 11:57 [ТС]3
15.01.2014, 12:034
15.01.2014, 12:16 [ТС]5

В вашем решении я как понимаю каждую xmlку макрос открывает и это визуально видно. Думаю это может плохо сказаться на производительности.

Вот так подсказали решение. Я потом пот себя переделал. Сделал цикл, чтобы выдергивать имя файла из ячейки, он «открывался» там искались определенные параметры. В случае их обнаружения выполнялось условие

А 10000 строк — ну хз, такой объем данных ))

Добавлено через 45 секунд
тут

Добавлено через 1 минуту
Короче домой приду, кину ссылку. С телефона не удобно ))

15.01.2014, 13:156
15.01.2014, 13:28 [ТС]7

Их Оооочень много

Добавлено через 1 минуту
В любом случае спасибо вам за помощь. Вы единственный откликнулись

15.01.2014, 15:008

вчера в этой ветке помогали человеку исправить 150 книг эксель

Добавлено через 24 минуты
если все xml в одной папке то код будет такой

Visual Basic
16.03.2016, 11:329
Вложения

DIVBK08090001_3124_0000_2_0_3124_0000.zip (612 байт, 29 просмотров)
16.03.2016, 11:32
16.03.2016, 11:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Импорт данных из XML файла в DataGridView
Как сделать импорт данных из XML файла в DataGridView? Как читать и загружать xml файл разобрался.

Импорт данных из большого файла XML в DBF
доброго времени суток! требуется перегнать XML файл в dbf, сложность в том, что XML довольно.

Импорт данных из xml файла в sdf файл
Создаю sdf пустой, хочу скопировать туда выбранную пользователем xml (допустим через диалог.

Импорт данных из XML файла в SQL Manager Lite for PostgreSQL
у меня есть файлы, которые хотел бы импортировать в БД Есть таблица Test с полем xml пытаюсь.

How to parse XML using vba

I work in VBA, and want to parse a string eg

and get the X & Y values into two separate integer variables.

I’m a newbie when it comes to XML, since I’m stuck in VB6 and VBA, because of the field I work in.

How do I do this?

8 Answers 8

This is a bit of a complicated question, but it seems like the most direct route would be to load the XML document or XML string via MSXML2.DOMDocument which will then allow you to access the XML nodes.

You can find more on MSXML2.DOMDocument at the following sites:

Thanks for the pointers.

I don’t know, whether this is the best approach to the problem or not, but here is how I got it to work. I referenced the Microsoft XML, v2.6 dll in my VBA, and then the following code snippet, gives me the required values

You can use a XPath Query:

Add reference Project->References Microsoft XML, 6.0 and you can use example code:

be careful with xml node //Root/Person is not same with //root/person, also selectSingleNode(«Name»).text is not same with selectSingleNode(«name»).text

This is an example OPML parser working with FeedDemon opml files:

This one takes multilevel trees of folders (Awasu, NewzCrawler):

but I don’t understand, why xmldoc4 should be loaded each time.

Here is a short sub to parse a MicroStation Triforma XML file that contains data for structural steel shapes.

From here you can use the values to draw the shape in MicroStation 2d or do it in 3d and extrude it to a solid.

Update

The procedure presented below gives an example of parsing XML with VBA using the XML DOM objects. Code is based on a beginners guide of the XML DOM.

Nota Bene — This initial answer shows the simplest possible thing I could imagine (at the time I was working on a very specific issue) . Naturally using the XML facilities built into the VBA XML Dom would be much better. See the updates above.

Original Response

I know this is a very old post but I wanted to share my simple solution to this complicated question. Primarily I’ve used basic string functions to access the xml data.

This assumes you have some xml data (in the temp variable) that has been returned within a VBA function. Interestingly enough one can also see how I am linking to an xml web service to retrieve the value. The function shown in the image also takes a lookup value because this Excel VBA function can be accessed from within a cell using = FunctionName(value1, value2) to return values via the web service into a spreadsheet.

Использование XML DOM в VB и MS Office/VBA

Одна из «горячих» ИТ-тем нынешнего года — проблема интеграции разнородных информационных ресурсов, решение которой требует создания простого и надежного механизма обмена данными между различными приложениями. И сегодня, кажется, все уже знают: XML — тот золотой ключик, который должен открыть дверь в новый мир, где порядок наконец заменит собой существующий ныне информационный хаос великого множества форматов данных.

Напомним, что XML и HTML базируется на одинаковых синтаксических принципах — информация записывается в виде простого текста, в котором имеются управляющие команды (тэги) и собственно данные. XML отличается от HTML тем, что позволяет передавать не только данные, но также и информацию об их структуре, то есть HTML ориентирован на описание неструктурированных данных, а XML — структурированных. С точки зрения использования информации неструктурированные данные предназначены в первую очередь для визуального восприятия человеком, струкутрированные — для автоматической обработки (в том числе вычислений). Отметим, что оба этих языка представляют собой упрощенный вариант давно известного среди компьютерных лингвистов языка SGML (Standard Generation Markup Language).

Подчеркнем, что в принципе сама идея языка XML — текстового описания структуры и содержания некоторых данных — совсем не нова. Новизна заключается лишь в том, что лидеры компьютерной индустрии вроде бы осознали необходимость перехода от внутренних, закрытых, форматов к общим, открытым. Но, честно говоря, о том, насколько серьезны эти намерения (а не маркетинговые акции, предназначенные для показа своей готовности к открытости), можно будет судить лишь спустя некоторое время. XML — это мировой отраслевой стандарт, создание и развитие которого ведется под эгидой WWW Consortium, общественной организации, представляющей интересы входящих в нее участников рынка.

Что касается прикладных программистов, то они уже очень давно оценили преимущества простых текстовых форматов данных по сравнению с двоичными при информационном взаимодействии компонентов вычислительных систем. Могу сослаться на пример из собственной программистской практики десятилетней давности. При разработке информационно-аналитических систем для обработки геологических данных мы полностью перешли на текстовые форматы данных и описаний их структуры, резко сократив время на отладку программного комплекса и его конфигурирование под задачи пользователей. Сначала мы рассматривали такое решение как временное и хотели для повышения производительности перейти на двоичные форматы. Но жизнь показала, что это пустая трата времени, так как производительность компьютеров росла быстрее, чем объем базы данных.

Здесь следует сделать одно важное замечание. Текстовое представление данных имеет свои недостатки. Один из них — сложности с использованием символов, задействованных в качестве специальных (например, » «). Вторая проблема заключается в неоднозначности преобразования данных из внутреннего двоичного формата в текст, и наоборот. В последнем случае особое внимание нужно уделять национальной специфике форматов, особенно при работе с разными региональными установками и кодовыми таблицами.

Понятно, что появление общего стандарта описания данных избавляет разработчиков от необходимости придумывать собственные форматы. Однако за любую универсальность приходится расплачиваться определенной избыточностью, хотя в данном случае она будет не так велика и не будет сколь-нибудь заметна на современных компьютерах. Например, мне бы пришлось заменить свои старые описания параметров:

Прежде чем перейти к конкретным техническим вопросам, стоит сделать еще одно важное замечание. Сам по себе XML не решает проблемы преобразования XML-документов, что необходимо для передачи данных между приложениями. Проще говоря, XML лишь связывает, например, некоторый набор чисел с понятием (тэгом) «цена», но что именно означает данный термин, язык уже не может расшифровать. Таким образом, для правильной интерпретации содержимого XML-документов необходимо знать так называемую XML-схему, которая бы описывала смысл полей данных.

Введение в XML DOM

Visual Basic 6.0 и приложения MS Office 2000 не включают в себя поддержку XML на уровне пользователя и разработчика, хотя при этом многие приложения Office используют передачу данных с помощью XML для выполнения внутренних операций. Вместе с тем уже сегодня, не дожидаясь новых версий этих систем (где что-то, связанное с XML, должно вскоре появиться), программисты могут применять XML-формат для обмена информацией с помощью написания собственных достаточно простых программных конструкций. Видятся два пути реализации этой задачи:

    Использование специального объекта XML, называемого XMLDOM, или DOMDocument (DOM, Document Object Model). Работа с этим объектом выполняется с помощью библиотеки Microsoft XML 2.0 (MSXML.DLL), на которую нужно сделать ссылку в окне Reference. (Обратите внимание: на моем компьютере в списке ссылок эта библиотека в начальный момент имеет индекс 1.0, а уже после ее подключения меняет его на 2.0.)

С точки зрения программиста в применении DOMDocument можно выделить три момента:

  • формирование структуры и содержания документа, а также выборка из него необходимой информации;
  • преобразование объекта из внутреннего формата во внешний текстовый XML-файл (в том числе вставка объекта в уже существующий файл), и наоборот;
  • возможность передачи объекта внутри приложения, а также обеспечение доступа к нему из других приложений с помощью ActiveX.
  • На практике наиболее распространенной задачей является экспорт-импорт с помощью XML-файла, что можно делать с помощью обычных средств VB/VBA. Вывод данных в формате XML является вообще достаточно тривиальной задаче. С вводом дело обстоит посложнее, так как в этом случае нужно «вручную» писать код для анализа синтаксиса и для разборки элементов документа. Как бы то ни было, в любом случае программист должен иметь в виду «ручной» метод экспорта-импорта, который иногда может быть очень полезен.
  • Передача набора записей из VB-приложения в Excel

    В наших «Советах для тех, кто программирует на VB» мы приводили два примера импорта данных из таблицы (набора записей, Recordset) в виде просто текстового файла (совет 297) и HTM-файла (совет 329). Попробуем выполнить аналогичную задачу с помощью XML-файла, который потом прочитаем в Excel.

    Импорт данных

    Для тестирования мы сделаем базу данных с таблицей такого содержания:

    VBA-Excel: Read Data from XML File

    by SJ · Published December 9, 2014 · Updated July 10, 2016

    To Read Data from XML File using in Microsoft Excel, you need to follow the steps below:

    • Create the object of “Microsoft XML Parser” ) (Microsoft.XMLDOM is the COM object of Microsoft XML Parser)
    • Load the XML from a specified path.
    • Select the tag from the XML file using SelectNodes or SelectSingleNode.

    o SelectNodes – Selects a list of nodes matches the Xpath pattern.

    o SelectSingleNode – Selects the first XMLNode that matches the pattern.

    • Iterate through all the Node by using Nodes.length and NodeValue.
    • Read the attributes by using Attribute.Length and getAttribute.
    • Read the particular index value from the XML File
    • Get all the values of particular type of nodes.

    Sample XML: (Sample File has been taken from- https://msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx )

    • Create the object of “Microsoft XML Parser” ) (Microsoft.XMLDOM is the COM object of Microsoft XML Parser)

    Set oXMLFile = CreateObject(“Microsoft.XMLDOM”)

    • Load the XML from a specified path.

    XMLFileName = “D:Sample.xml”

    oXMLFile.Load (XMLFileName)

    • Select the tag from the XML file using SelectNodes or SelectSingleNode.

    SelectNodes – Selects a list of nodes matches the Xpath pattern.

    Set TitleNodes = oXMLFile.SelectNodes(“/catalog/book/title/text()”)

    SelectSingleNode – Selects the first XMLNode that matches the pattern.

    Set Nodes_Particular = oXMLFile.SelectSingleNode(“/catalog/book[4]/title/text()”)

    • Iterate through all the Node by using Nodes.length and NodeValue.

    For i = 0 To (TitleNodes.Length – 1)

    Title = TitleNodes(i).NodeValue

    • Read the attributes by using Attribute.Length and getAttribute.

    Set Nodes_Attribute = oXMLFile.SelectNodes(“/catalog/book”)

    For i = 0 To (Nodes_Attribute.Length – 1)

    Attributes = Nodes_Attribute(i).getAttribute(“id”)

    • Read the particular index value from the XML File

    oXMLFile.SelectSingleNode(“/catalog/book[4]/title/text()”)

    • Get all the values of particular type of nodes.

    oXMLFile.SelectNodes(“/catalog/book/title[../genre = ‘Fantasy’]/text()”)

    NOTE:

    Complete Code:

    [sourcecode language=”VB”]
    ‘Get the 5th book title
    Set Nodes_Particular = oXMLFile.SelectSingleNode(«/catalog/book[4]/title/text()»)’ index starts with 0, so put 4 for 5th book
    MsgBox «5th Book Title : » & Nodes_Particular.NodeValue
    [/sourcecode]

    [sourcecode language=”VB”]
    ‘Get all the Fantasy books

    Set Nodes_Fantasy = oXMLFile.SelectNodes(«/catalog/book/title[../genre = ‘Fantasy’]/text()»)
    mainWorkBook.Sheets(«Sheet3»).Range(«A1»).Value = «Fantasy Books»

    ‘ get their titles

    For i = 0 To (Nodes_Fantasy.Length – 1)

    mainWorkBook.Sheets(«Sheet3»).Range(«A» & i + 2).Value = Title

    Share this:

    Like this:

    Excel-VBA : Prevent Changing the WorkSheet Name

    October 27, 2014

    by SJ · Published October 27, 2014 · Last modified September 4, 2015

    VBA-Excel: Perform Google Search on Internet Explorer using Microsoft Excel

    October 21, 2014

    by SJ · Published October 21, 2014 · Last modified January 30, 2015

    VBA-Excel: Get ALL The Opened Internet Explorer (IE) using Microsoft Excel

    October 21, 2014

    by SJ · Published October 21, 2014 · Last modified January 30, 2015

    32 Responses

    • Comments 32
    • Pingbacks 0

    Can you post the entire Complete Code as opposed to just a snippet?

    Its a complete working code, just that its divided into snippets, if you copy paste the enitre code it will work ( including all snippets).
    Please let me know if you still need clarifications.

    I don’t think it is – there is no End Function in any of the snippets. After running the first snippet (Complete Code), we are not able to see the same output array. All we see are the titles of each column and no data in them.

    I just tested the code , its working fine for me. ‘End Function’ was removed becoz the code was getting continued in different snippets.

    NOTE : Make sure you provide the complete XML path
    XMLFileName = “C:UsersSumit JainSample.xml” —- updated this line.

    I just ran this code —-

    Sub ReadXML()
    Call fnReadXMLByTags
    End Sub

    Function fnReadXMLByTags()
    Dim mainWorkBook As Workbook
    Set mainWorkBook = ActiveWorkbook
    mainWorkBook.Sheets(“Sheet1”).Range(“A:A”).Clear
    Set oXMLFile = CreateObject(“Microsoft.XMLDOM”)
    XMLFileName = “C:UsersSumit JainGoogle DriveExcel Blog picsXMLSample.xml”
    oXMLFile.Load (XMLFileName)
    Set TitleNodes = oXMLFile.SelectNodes(“/catalog/book/title/text()”)
    Set PriceNodes = oXMLFile.SelectNodes(“/catalog/book/price/text()”)
    mainWorkBook.Sheets(“Sheet1”).Range(“A1,B1,C1”).Interior.ColorIndex = 40
    mainWorkBook.Sheets(“Sheet1”).Range(“A1,B1,C1”).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“A” & 1).Value = “Book ID”
    mainWorkBook.Sheets(“Sheet1”).Range(“B” & 1).Value = “Book Titles”
    mainWorkBook.Sheets(“Sheet1”).Range(“C” & 1).Value = “Price”
    mainWorkBook.Sheets(“Sheet1”).Range(“D1”).Value = “Total books: ” & TitleNodes.Length

    For i = 0 To (TitleNodes.Length – 1)
    Title = TitleNodes(i).NodeValue
    Price = PriceNodes(i).NodeValue
    mainWorkBook.Sheets(“Sheet1”).Range(“B” & i + 2).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“C” & i + 2).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“B” & i + 2).Value = Title
    mainWorkBook.Sheets(“Sheet1”).Range(“C” & i + 2).Value = Price
    Next
    ‘Reading the Attributes
    Set Nodes_Attribute = oXMLFile.SelectNodes(“/catalog/book”)
    For i = 0 To (Nodes_Attribute.Length – 1)
    Attributes = Nodes_Attribute(i).getAttribute(“id”)
    mainWorkBook.Sheets(“Sheet1”).Range(“A” & i + 2).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“A” & i + 2).Value = Attributes
    Next
    End Function

    If still you are not able run it, please send me the code i will look into it

    Shouldn’t there be another For loop to write all the data into the sheet? From your code (which works as previously seen), we only see the titles of each column. There is no data in them though – nothing from the XML file.

    Here is the description –

    code below creates the titles in Excel file –

    mainWorkBook.Sheets(“Sheet1”).Range(“A1,B1,C1”).Interior.ColorIndex = 40
    mainWorkBook.Sheets(“Sheet1”).Range(“A1,B1,C1”).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“A” & 1).Value = “Book ID”
    mainWorkBook.Sheets(“Sheet1”).Range(“B” & 1).Value = “Book Titles”
    mainWorkBook.Sheets(“Sheet1”).Range(“C” & 1).Value = “Price”
    mainWorkBook.Sheets(“Sheet1”).Range(“D1”).Value = “Total books: ” & TitleNodes.Length

    Now This for loop will fetches all the book titles and price

    For i = 0 To (TitleNodes.Length – 1)
    Title = TitleNodes(i).NodeValue
    Price = PriceNodes(i).NodeValue
    mainWorkBook.Sheets(“Sheet1”).Range(“B” & i + 2).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“C” & i + 2).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“B” & i + 2).Value = Title
    mainWorkBook.Sheets(“Sheet1”).Range(“C” & i + 2).Value = Price
    Next

    Another for loop will get all the attributes names in XML
    ‘Reading the Attributes
    Set Nodes_Attribute = oXMLFile.SelectNodes(“/catalog/book”)
    For i = 0 To (Nodes_Attribute.Length – 1)
    Attributes = Nodes_Attribute(i).getAttribute(“id”)
    mainWorkBook.Sheets(“Sheet1”).Range(“A” & i + 2).Borders.Value = 1
    mainWorkBook.Sheets(“Sheet1”).Range(“A” & i + 2).Value = Attributes
    Next

    is it clarified now? Please feel free to ask if its not

    What you’re saying makes sense now. But I am trying to figure out why my output is this:

    Book ID Book Titles Price Total Books:0

    I am using a XML file that is the same as yours – I just added a total of 12 books and retyped your screenshot.

    Maybe there is a reference I need? I am using Microsoft XML v6.0 too.

    I have just mailed you the files which i have used, try those.

    It works! Thank you very much for your help – I can learn a lot from this example!

    Thanks again, I appreciate it.

    Hello Robert,
    I am glad that this was helpful for you.
    You are always welcome here. Your appreciation means a lot.

    How do you write attributes into a certain cell?

    Very helpful – but the full code would be even better

    I just tested the code , I am getting error “subscript out of range error” at
    mainWorkBook.Sheets(“Sheet1”).Range(“A:A”).Clear line.
    can you tell me why I am getting this.

    just checked, that line is working fine for me. That line is clearing the entire column A in sheet 1.
    few quick point to check – make sure Set mainWorkBook = ActiveWorkbook is working fine. Please revert back if problem still persist.

    Thanks
    Sumit Jain

    Thanks for posting this. Very useful for me to easily re-write to my needs.

    To answer the above question. It is not working if I copy paste from your code. To test your snippet I had to retype the above contents.

    I am glad that you find this post useful. I will re-check to make sure that further no one has to retype the code before using it.

    hey sumit,
    I am getting the same error ” subscipt out of range” at at
    mainWorkBook.Sheets(“Sheet1”).Range(“A:A”).Clear line.

    my Set main­Work­Book = Active­Work­book is work­ing fine in debugging.
    Can you plase help me with this

    nothing is wrong in line mainWorkBook.Sheets(“Sheet1”).Range(“A:A”).Clear, oe quick check is to check if “Sheet1” exists, else please mail me the code u r using at [email protected]

    I would like to parse an xml which has 2 levels of nodelist. For ex:

    I need to parse through each Books in each Bookshelf one by one. I am not able to get this by using

    Can you please help me out for this.

    Thanks for the above it works perfectly, however the XML file I want to read into excel has a namespace and with a namespace the code doesn’t work..

    what refference do u need? I have office 2010

    I am using these references for this code:

    “Microsoft Forms 2.0 Object Library”
    Microsoft Office 12.0 Object Library

    updated the post as well, thanks for pointing out.

    while using above code getting below error in Mac
    Run-time error 429 ActiveX component can’t create object

    Can you debug and tell which line has a problem? Did you add the necessary references?

    Could you send me above xml file. I cannot find it here. Thanks

    As mentioned in the post, the xml file is at this location ( Just checked it ) –
    https://msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx

    Hi SJ
    This is a really useful post. I got started great and I was stuck because of my source XML file
    Problem:
    I have 3 Nodes
    Step Title, Status and Comments
    I always have Step Title and Status but comments is optional. So I ended up with uneven arrays and comments are not aligned with the proper steps using Comment = CommentNodes(i).NodeValue. Could you please help?

    Читать еще:  Автофильтр в excel
    Ссылка на основную публикацию
    Adblock
    detector