Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2013, 20:09   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Конвертация в xml (yml)

Добрый день, уважаемые форумчане!
Второй раз в жизни сталкиваюсь с xml форматом и второй раз неудачно)))
Есть файл (во вложении). Попытался сконвертировать при помощи макроса XMLExport (в очередной раз спасибо EducatedFool, взят http://excelvba.ru/code/Array2XML). Не сработал и подсветил строку:
Код:
Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
Скачал надстройку Excel 2003 Add-in: XML Tools Add-in, установил, попробовал - ошибка, подсветил строку
Код:
Dim XmlDoc  As msxml2.DOMDocument50
Подозреваю, что чего-то у меня не хватает. Excel 2013, Win7. На всякий случай во вложении образец карты xml-файла.
Посмотрите, что я делаю не так.
Заранее спасибо!
Вложения
Тип файла: txt карта.txt (7.2 Кб, 207 просмотров)
Тип файла: rar проба.rar (19.6 Кб, 19 просмотров)
strannick вне форума Ответить с цитированием
Старый 07.03.2013, 20:33   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А вы подключите библиотеку Microsoft XML любой версии (для моего макроса),
или библиотеку Microsoft XML 5.0 (для XML Tools Add-in),
и все заработает.

PS: В случае с моим макросом - а кто будет копировать в файл функцию Array2XML?
(не зря же она в статье опубликована чуть ниже макроса-примера её использования...)
EducatedFool вне форума Ответить с цитированием
Старый 07.03.2013, 20:45   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А вы подключите библиотеку Microsoft XML любой версии (для моего макроса),
или библиотеку Microsoft XML 5.0 (для XML Tools Add-in),
и все заработает.

PS: В случае с моим макросом - а кто будет копировать в файл функцию Array2XML?
(не зря же она в статье опубликована чуть ниже макроса-примера её использования...)
Ага, так я и знал, что чего-то не хватает. А функцию я тоже вставил. Вставлял-удалял. Водно загрузил вариант без нее. Сейчас попробую с библиотекой и отпишусь.
strannick вне форума Ответить с цитированием
Старый 07.03.2013, 22:22   #4
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Да, после установки библиотеки сконвертировалось нормально. Теперь вопрос - Как увязать с шаблоном (картой во вложении) формата yml (яндекс-маркет)?
strannick вне форума Ответить с цитированием
Старый 07.03.2013, 23:03   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну а теперь смотрим карту, и формируем XML структуру при помощи подобных строк:
(в т.ч. и вложенных)

Код:
 ' создание нового узла
       Set xmlFields = xmlDoc.documentElement.appendChild(xmlDoc.createElement("Row"))
Только сначала надо придумать, где взять недостающие данные (например, номера категорий, когда в таблице есть только названия этих категорий)

PS: Готовый код писать не буду - вы же на этом деньги зарабатываете (не для себя же делаете), так что сами ищите примеры кода
(коих в интернете множество)


Вот пример кода для создания XML ветвистой структуры:

Код:
Sub ExportSettings_ПримерМакросаСохраненияXML()
    On Error Resume Next: Err.Clear
    filename$ = ThisWorkbook.Path & "\Настройки " & PROJECT_NAME$ & " " & Format(Now, "DD.MM.YYYY HH-NN-SS") & ".xml"
    Title$ = "Сохранение всех настроек программы " & PROJECT_NAME$ & " в файл - выберите имя файла и папку"

    xmlpath = Application.GetSaveAsFilename(filename$, "Настройки программы " & PROJECT_NAME$ & " (*.xml),", , Title$, "Сохранить")
    If VarType(xmlpath) = vbBoolean Then Exit Sub

    arr = GetAllSettings(PROJECT_NAME$, "Settings")

    Dim xml As New DOMDocument, rootnode As IXMLDOMElement
    Set xml = CreateObject("Microsoft.XMLDOM")
    With xml
        .appendChild .createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")

        ' ============== rootnode ===============
        Set rootnode = .appendChild(.createElement("Settings"))
        rootnode.Attributes.setNamedItem(.createAttribute("Addin")).Text = PROJECT_NAME$
        rootnode.Attributes.setNamedItem(.createAttribute("VersionName")).Text = "1.2.3"

        rootnode.appendChild(.createElement("Version")).Text = "1.2.3"
        rootnode.appendChild(.createElement("Filename")).Text = ThisWorkbook.Name
        rootnode.appendChild(.createElement("ID")).Text = "123456"
        rootnode.appendChild(.createElement("TimeStamp")).Text = Now
        With rootnode.appendChild(xml.createElement("Updates"))
            .Attributes.setNamedItem(xml.createAttribute("Install")).Text = true
            .Attributes.setNamedItem(xml.createAttribute("StableOnly")).Text = false
        End With

        txt = "These settings are stored in the registry: HKEY_CURRENT_USER\Software\VB and VBA Program Settings\" & PROJECT_NAME$ & "\Settings"

        If IsArray(arr) Then
        
            With rootnode.appendChild(xml.createElement("Options")) ' СОЗДАЕМ ГЛАВНЫЙ УЗЕЛ
                .appendChild(xml.createComment("Help")).Text = txt ' ДОБАВЛЯЕМ КОММЕНТАРИЙ

                For i = LBound(arr) To UBound(arr)

                    With .appendChild(xml.createElement("option")) ' СОЗДАЕМ ДОЧЕРНИЕ УЗЛЫ в цикле
                        .Attributes.setNamedItem(xml.createAttribute("Name")).Text = arr(i, 0)
                        .Attributes.setNamedItem(xml.createAttribute("Value")).Text = arr(i, 1)
                    End With
                    
                Next i
                
                txt = "Any questions? Contact me via Skype (ExcelVBA.ru), ICQ (5836318) or E-mail (info@ExcelVBA.ru)"
                .appendChild(xml.createComment("Help")).Text = txt ' ДОБАВЛЯЕМ КОММЕНТАРИЙ
            End With
        Else
            MsgBox "Надстройки для программы " & PROJECT_NAME$ & " ещё не были сохранены." & vbNewLine & vbNewLine & _
                   "Сохраните настройки программы, а затем уже экспортируйте их в файл.", vbExclamation, "Настройки не найдены"
            GoTo ExitLabel
        End If
        If Len(xmlpath) > 0 Then .Save xmlpath ' СОХРАНЯЕМ XML
    End With

    MsgBox "Файл настроек программы " & PROJECT_NAME$ & " успешно сохранён." & vbNewLine & vbNewLine & _
           "Теперь вы можете применить эти настройки на других компьютерах, " & vbNewLine & _
           "нажав кнопку «Импорт настроек из файла»." & vbNewLine & vbNewLine & _
           "Созданный файл настроек доступен по пути" & vbNewLine & xmlpath, vbInformation, "Экспорт настроек в файл завершен."
End Sub

Последний раз редактировалось EducatedFool; 07.03.2013 в 23:25.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа, которая должна находить в данной директории *.xml файлы и переименовывать в *.xml.dt. (Delphi) nice.name Помощь студентам 2 09.01.2013 15:40
Парсинг xml (yml) в php, получение значений. DarkHacker PHP 3 02.07.2012 11:46
Модуль YML загрузки товаров marsaleru Фриланс 2 11.01.2011 11:54
сформировать xml-файл на основе другого xml-файла NieL Общие вопросы Delphi 2 21.12.2010 15:49
парсер XML, не видит XML тэги supercelt PHP 3 02.11.2009 19:18