Страницы: 1
RSS
VBA - как импортировать XML программно с подключенной внешне схемой, проблемы с программным импортом XML
 
Всем доброе время суток!  Проблема следующая. Есть энное количество XML файлов, которые надо импортировать в Excel и далее их там обрабатывать.
Но есть проблема - встроенная схема предполагает, что одно поле имеет тип "integer", в результате чего 18-значное число округляет последние 3 цифры.
Но мы ж не идиоты, мы ж читаем, что в документации Мелкософтов. Так как все файлы XML однотипные, выгружаем из одного из них макросом схему:
Код
Sub save_XML_scheme()
Dim fPath As String
Dim s As String
fPath = "C:\TEMP\sc1.xsd"
s = ActiveWorkbook.XmlMaps(1).Schemas(1).XML
Open fPath For Output As #1
    Print #1, s
    Close #1
MsgBox "Схема сохранена в файл C:\TEMP\sc1.xsd "
End Sub

потом Блокнотом меняем нужный параметр на "string"
Загружаю ручками файл, выбираю "Use the XML Source task pane".  
После чего импортирую сохраненную схему и переношу поля на лист.
После чего лезу в панель разработчика и импортирую
Все получается, ОК.
Но простому пользователю (а их несколько десятков у меня) такую фигню не объяснишь и ручками делать не заставишь, даже если не выгружать схему и не править в блокноте, а сразу дать готовенькую. "Нужна кнопка, Урри!"  (с)
Вычитываем документацию еще и пишем макрос:
Код
Sub xmlImportScheme()
Dim src()
Dim schm As String
src = Application.GetOpenFilename(, , "Выберите файл .xml", , True)
schm = Application.GetOpenFilename(, , "Выберите схему", , False)
Dim a As XmlMap

For Each x In src
Workbooks.Add
ActiveWorkbook.XmlMaps.Add(schm, "DESSCC").Name = "DESSCC_Map1"
With ActiveWorkbook.XmlMaps("DESSCC_Map1")
        .ShowImportExportValidationErrors = True
        .AdjustColumnWidth = True
        .PreserveColumnFilter = True
        .PreserveNumberFormatting = True
        .AppendOnImport = True
    End With
For Each y In ActiveWorkbook.XmlMaps
If y.Name = "DESSCC_Map1" Then Set a = y
Next y
ActiveWorkbook.XmlImport Url:=x, ImportMap:=a, Overwrite:=True, Destination:=Range("$A$1")
Next x
End Sub

И тут получается фейл, потому что мало того, что файл импортируется по дефолтной схеме, на по прописанной карте DESSCC_Map1, но и значение переменной "a" меняется на текущую дефолтную схему.  На Stackoverflow вопрос про эту неведому зверушку висит третий день, его даже не смотрят.
Поиском и макрорекордером удалось найти еще способ импортировать схему - через XMLMAps
Код
ActiveWorkbook.XmlMaps("DESSCC_Map1").Import Url:=x
Но выдает ошибку, связанную c XPath. То есть, надо к ячейкам привязать как-то поля XML, а как и что делать -  понятия не имею.
PS. На Stackoverflow excel - VBA - Doesn't import XML with the customs XML scheme - Stack Overflow
Изменено: kohet - 13.10.2022 09:31:40
Страницы: 1
Наверх