Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Открытие файла xml в Excel в виде таблицы. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Открытие файла xml в Excel в виде таблицы. (Макросы Sub)
Открытие файла xml в Excel в виде таблицы.
Неопытный Дата: Четверг, 19.09.2013, 15:08 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Возможно ли как-то изменить текст макроса, открывающего файл xml в книге Excel
в виде таблицы, чтобы не пропадали лидирующие нули, например в номерах документов, ИНН.
[vba]
Код
Sub xml()
Workbooks.OpenXML Filename:="C:\1.xml", LoadOption:= _
          xlXmlLoadImportToList
End sub
[/vba]
К сообщению приложен файл: 2364067.rar (0.5 Kb)


Сообщение отредактировал Неопытный - Четверг, 19.09.2013, 15:10
 
Ответить
СообщениеВозможно ли как-то изменить текст макроса, открывающего файл xml в книге Excel
в виде таблицы, чтобы не пропадали лидирующие нули, например в номерах документов, ИНН.
[vba]
Код
Sub xml()
Workbooks.OpenXML Filename:="C:\1.xml", LoadOption:= _
          xlXmlLoadImportToList
End sub
[/vba]

Автор - Неопытный
Дата добавления - 19.09.2013 в 15:08
Неопытный Дата: Пятница, 20.09.2013, 10:58 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Если даже для этого примера перед импортом xml сделать формат столбца , в который будут импортироваться
данные из xml с лидирующим нулем, текстовым,то и после импорта он останется текстовым,
но лидирующие нули всё равно пропадут.

[vba]
Код
Sub xml()
     Columns("J:J").Select
     Selection.NumberFormat = "@"
     Range("A1").Select
     With ActiveWorkbook.XmlMaps("Файл_карта")
         .ShowImportExportValidationErrors = False
         .AdjustColumnWidth = True
         .PreserveColumnFilter = False
         .PreserveNumberFormatting = True
         .AppendOnImport = False
     End With
     ActiveWorkbook.XmlImport URL:="C:\1.xml", ImportMap:=Nothing, Overwrite:= _
         True, Destination:=Range("$A$1")
End Sub
[/vba]
 
Ответить
СообщениеЕсли даже для этого примера перед импортом xml сделать формат столбца , в который будут импортироваться
данные из xml с лидирующим нулем, текстовым,то и после импорта он останется текстовым,
но лидирующие нули всё равно пропадут.

[vba]
Код
Sub xml()
     Columns("J:J").Select
     Selection.NumberFormat = "@"
     Range("A1").Select
     With ActiveWorkbook.XmlMaps("Файл_карта")
         .ShowImportExportValidationErrors = False
         .AdjustColumnWidth = True
         .PreserveColumnFilter = False
         .PreserveNumberFormatting = True
         .AppendOnImport = False
     End With
     ActiveWorkbook.XmlImport URL:="C:\1.xml", ImportMap:=Nothing, Overwrite:= _
         True, Destination:=Range("$A$1")
End Sub
[/vba]

Автор - Неопытный
Дата добавления - 20.09.2013 в 10:58
anvg Дата: Понедельник, 23.09.2013, 04:25 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Не лучший вариант, поскольку лучше разобраться со схемой для XML и настроить для правильного импорта (как не знаю, сразу не изучишь). Можно вот таким кривоватым вариантом
[vba]
Код

Public Sub myxmlimport()
       Const xmlFile = "d:\path\filename.xml"
       Dim fso As Object, pStream As Object, pCell As Range
       Dim sText As String, sName As String
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set pStream = fso.OpenTextFile(xmlFile)
       sText = pStream.ReadAll: pStream.Close
       sText = VBA.Replace(sText, "=""0", "=""'0")
       sName = fso.GetTempName
       sName = "\" & Mid$(sName, 1, InStrRev(sName, ".") - 1) & ".xml"
       sName = Environ$("Temp") & sName
       Set pStream = fso.CreateTextFile(sName, True)
       pStream.Write sText: pStream.Close
       ActiveWorkbook.XmlImport sName, Nothing, True, Range("A1")
       ActiveSheet.UsedRange.NumberFormat = "@"
       fso.DeleteFile sName
       For Each pCell In ActiveSheet.UsedRange
           If Mid$(pCell.Value, 1, 1) = "'" Then pCell.Value = Mid$(pCell.Value, 2)
       Next
End Sub
[/vba]

Добавление
В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel.
Файл схемы прикладываю. Как пользоваться "Импорт схемы и данных XML в Excel"
Пробуйте.
К сообщению приложен файл: 7950135.xsd (3.2 Kb)


Сообщение отредактировал anvg - Понедельник, 23.09.2013, 06:23
 
Ответить
СообщениеНе лучший вариант, поскольку лучше разобраться со схемой для XML и настроить для правильного импорта (как не знаю, сразу не изучишь). Можно вот таким кривоватым вариантом
[vba]
Код

Public Sub myxmlimport()
       Const xmlFile = "d:\path\filename.xml"
       Dim fso As Object, pStream As Object, pCell As Range
       Dim sText As String, sName As String
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set pStream = fso.OpenTextFile(xmlFile)
       sText = pStream.ReadAll: pStream.Close
       sText = VBA.Replace(sText, "=""0", "=""'0")
       sName = fso.GetTempName
       sName = "\" & Mid$(sName, 1, InStrRev(sName, ".") - 1) & ".xml"
       sName = Environ$("Temp") & sName
       Set pStream = fso.CreateTextFile(sName, True)
       pStream.Write sText: pStream.Close
       ActiveWorkbook.XmlImport sName, Nothing, True, Range("A1")
       ActiveSheet.UsedRange.NumberFormat = "@"
       fso.DeleteFile sName
       For Each pCell In ActiveSheet.UsedRange
           If Mid$(pCell.Value, 1, 1) = "'" Then pCell.Value = Mid$(pCell.Value, 2)
       Next
End Sub
[/vba]

Добавление
В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel.
Файл схемы прикладываю. Как пользоваться "Импорт схемы и данных XML в Excel"
Пробуйте.

Автор - anvg
Дата добавления - 23.09.2013 в 04:25
Неопытный Дата: Понедельник, 23.09.2013, 17:23 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Цитата
anvg писал(а): Можно вот таким кривоватым вариантом

Этот вариант для файлов xml несложной структуры работает правильно. Файлы xml со сложной структурой открывает с некоторыми ошибками.


Сообщение отредактировал Неопытный - Понедельник, 23.09.2013, 17:30
 
Ответить
Сообщение
Цитата
anvg писал(а): Можно вот таким кривоватым вариантом

Этот вариант для файлов xml несложной структуры работает правильно. Файлы xml со сложной структурой открывает с некоторыми ошибками.

Автор - Неопытный
Дата добавления - 23.09.2013 в 17:23
Неопытный Дата: Понедельник, 23.09.2013, 23:25 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel.

Открыл сложный xml,excel2003 создал соответствующую ему xml-карту.Сопоставил только нужные столбцы этой карте,чтобы не выводил в таблицу разного рода ненужные "шапки",адреса. Теперь при импорте xml файла передние нули почему-то перестали обрезаться и эти номера с передними нулями выводятся в текстовом файле,т.е. то что нужно было. В то время как при неурезанной карте они выводились в формате "общий" и нули обрезались.Есть ли какая-то возможность урезанную карту сохранить отдельно, или она может храниться только вместе с данным файлом xls?
При открытии файла xls с урезанной картой выскакивает предупреждение:
"Программой проверки проверки файлов Office обнаружена проблема при открытии данного файла.Возможно его небезопасно открывать".Можно не обращать на него внимание,т.к. оно не мешает работе,но непонятно почему оно появляется.


Сообщение отредактировал Неопытный - Понедельник, 23.09.2013, 23:26
 
Ответить
Сообщение
В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel.

Открыл сложный xml,excel2003 создал соответствующую ему xml-карту.Сопоставил только нужные столбцы этой карте,чтобы не выводил в таблицу разного рода ненужные "шапки",адреса. Теперь при импорте xml файла передние нули почему-то перестали обрезаться и эти номера с передними нулями выводятся в текстовом файле,т.е. то что нужно было. В то время как при неурезанной карте они выводились в формате "общий" и нули обрезались.Есть ли какая-то возможность урезанную карту сохранить отдельно, или она может храниться только вместе с данным файлом xls?
При открытии файла xls с урезанной картой выскакивает предупреждение:
"Программой проверки проверки файлов Office обнаружена проблема при открытии данного файла.Возможно его небезопасно открывать".Можно не обращать на него внимание,т.к. оно не мешает работе,но непонятно почему оно появляется.

Автор - Неопытный
Дата добавления - 23.09.2013 в 23:25
anvg Дата: Вторник, 24.09.2013, 06:05 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Цитата
создал соответствующую ему xml-карту

Что вы под этим подразумеваете?
Я предлагал следующее по "Добавление"
1. Открываем xml файл в новой книге.
2. Excel создаёт для него схему по-умолчанию
3. В Immediate (можно и макросом в файл) получаем текст схемы ?ActiveWorkbook.XmlMaps(1).Schemas(1).XML
4. Копируем в блокнот полученный текст
5. находим строчки <xsd:attribute name="П200000000013" form="unqualified" type="xsd:integer"></xsd:attribute> и в атрибуте type меняем "xsd:integer" на "xsd:string", чтобы данные этого атрибута из файлов xml с такой же структурой брались как текстовые (или ставим требуемые типы для даты xsd:date, например).
6. Сохраняем файл, с отредактированными типам, в кодировке UTF-8 с расширением xsd (собственно, файл-схемы).
7. После чего загружаем схему и по ней создаём "умную" таблицу.
8. После чего уже без проблем импортируем xml-файлы, соответствующей схемы.

Можно, по 7 - создать файл-шаблон для импорта xml-файлов заданной схемы.
Если у вас каждый раз различная схема импортируемых xml-файлов, тогда увы... Нужно писать достаточно серьёзный макрос. В любом случае потребуется участие пользователя, который по названию атрибутов, значений определял тип требуемых данных для импорта и для правильного отображения в Excel.
 
Ответить
Сообщение
Цитата
создал соответствующую ему xml-карту

Что вы под этим подразумеваете?
Я предлагал следующее по "Добавление"
1. Открываем xml файл в новой книге.
2. Excel создаёт для него схему по-умолчанию
3. В Immediate (можно и макросом в файл) получаем текст схемы ?ActiveWorkbook.XmlMaps(1).Schemas(1).XML
4. Копируем в блокнот полученный текст
5. находим строчки <xsd:attribute name="П200000000013" form="unqualified" type="xsd:integer"></xsd:attribute> и в атрибуте type меняем "xsd:integer" на "xsd:string", чтобы данные этого атрибута из файлов xml с такой же структурой брались как текстовые (или ставим требуемые типы для даты xsd:date, например).
6. Сохраняем файл, с отредактированными типам, в кодировке UTF-8 с расширением xsd (собственно, файл-схемы).
7. После чего загружаем схему и по ней создаём "умную" таблицу.
8. После чего уже без проблем импортируем xml-файлы, соответствующей схемы.

Можно, по 7 - создать файл-шаблон для импорта xml-файлов заданной схемы.
Если у вас каждый раз различная схема импортируемых xml-файлов, тогда увы... Нужно писать достаточно серьёзный макрос. В любом случае потребуется участие пользователя, который по названию атрибутов, значений определял тип требуемых данных для импорта и для правильного отображения в Excel.

Автор - anvg
Дата добавления - 24.09.2013 в 06:05
Неопытный Дата: Вторник, 24.09.2013, 11:15 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
создал соответствующую ему xml-карту
Что вы под этим подразумеваете?

Делал так:
Открывал xml на листе книги "Данные-xml-импорт"
Открывал полученную карту "Данные-xml-источник xml"
Очищал Лист.
В окошке "Источник xml" брал мышкой нужный пункт и тащил его на столбец листа,в нужную ячейку,
при этом в этой ячейке появляется оглавление,также можно тащить не отдельный элемент,а сразу нужный блок и он распределится по столбцам
При загрузке xml файла через "Данные-xml-импорт" или макросом,заполнялись только те столбцы,которые были отмечены.

Но если эту карту сохранять через Immediate, то обратно она не импортируется, появляются разные синтаксические ошибки.
 
Ответить
Сообщение
создал соответствующую ему xml-карту
Что вы под этим подразумеваете?

Делал так:
Открывал xml на листе книги "Данные-xml-импорт"
Открывал полученную карту "Данные-xml-источник xml"
Очищал Лист.
В окошке "Источник xml" брал мышкой нужный пункт и тащил его на столбец листа,в нужную ячейку,
при этом в этой ячейке появляется оглавление,также можно тащить не отдельный элемент,а сразу нужный блок и он распределится по столбцам
При загрузке xml файла через "Данные-xml-импорт" или макросом,заполнялись только те столбцы,которые были отмечены.

Но если эту карту сохранять через Immediate, то обратно она не импортируется, появляются разные синтаксические ошибки.

Автор - Неопытный
Дата добавления - 24.09.2013 в 11:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Открытие файла xml в Excel в виде таблицы. (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!