Как Перевести Файл Excel в Xml Формат • Файл xlworksheets_relssheet1xml

Как Перевести Файл Excel в Xml Формат

Получение xlsx- файла по данным из xml+xsd .

Чтобы самим не придумывать данные для Excel- таблицы, воспользуемся тем, что можно загрузить из интернета по ссылке: Сопоставление XML-элементов и отмена их сопоставления. Продублирую прямо сюда текст файлов, позаимствованных из этого источника. Итак, там взяты два файла: Расходы.xml — пример данных, на основе которых, нами будет построена Excel- таблица и Расходы.xsd — схема для него.

В файле Расходы.xml имеем следующее:

а в файле Расходы. xsd :

Далее, создадим на основе данных этих двух файлов таблицу в Excel из MS Office 2007. Ниже шаг за шагом и т.с. в картинках показано, как это можно сделать. Но прежде всего, если у Вас на «Панели быстрого доступа» отсутствует вкладка «Разработчик», то проделайте действия, изображённые на Рис.1:

xlsx1.jpg

Рис.1

т.е. отметьте пункт «Показывать вкладку «Разработчик» на ленте» в диалоге «Параметры Excel » и подтвердите изменения, нажав кнопку » Ok » в правой нижней части окна этого диалога.

Следующим действием загрузим файл-схему Расходы. xsd в Excel , для чего выполните пункты, отмеченные красными кружками на Рис.2:

xlsx2.jpg

Рис.2

Если всё предшествующее не вызвало никаких ошибок, то в результате Вы должны получить то, что изображено на Рис.3:

xlsx3.jpg

Рис.3

т.е. в правой панели «Источник XML » у Вас должна появиться древовидная структура полей, описанных в фале-схеме Расходы.xsd.

Следующим действием, мы должны сопоставить данные в области листа книги с полями загруженной xsd- схемы. Для чего следует мышкой выделить корневой элемент в правой панели «Источник XML » ( Root в нашем случае) и не отпуская мышки, перетащить его в ячейку A1 на Лист 1. После чего отпустить кнопку мыши. Проделав это, мы получим ситуацию, подобную изображённой на Рис.4:

xlsx4.jpg

Рис.4

Наконец, попробуем выполнить загрузку/импорт собственно самих данных из файла Расходы. xml , для чего выделив область данных нашей таблицы на Лист 1 (область ячеек: A2:F2 ), воспользуемся кнопкой «Импорт» на закладке «Разработчик» так, как показано на Рис.5:

xlsx5.jpg

Рис.5

Если никаких ошибок при загрузке xml- данных из файла Расходы. xml не возникло, то вы должны получить ситуацию, изображённую на Рис.6:

xlsx6.jpg

Рис.6

Наконец-то мы достигли конечной цели данного этапа, и можем сохранить полученное в виде файла Книга1 .xlsx. Только перед сохранением желательно удалить пустые лишние листы: Лист 2, Лист 3.

xlsx7.jpg

Рис.7

Обратите внимание, что в столбцах B и C тип данных будет соответственно: «Дата» и «Общий» в отличии от «Текст», которые мы имели выше, т.е. при использовании файла-схемы Расходы. xsd перед загрузкой xml -данных.

Описание структуры полученных после разархивации подкаталогов/файлов можно найти в ссылках, приведённых мной в разделе Внешние ссылки по теме, для дальнейшего нас будут интересовать только полученные после распаковки xml- файлы, содержащие как собственно данные, так и описания их типов. К ним относятся:

  • ..\Книга1\xl\sharedStrings.xml — общие данные, имеющие тип строка
  • ..\Книга1\xl\xmlMaps.xml — файл, содержащий схемы данных
  • ..\Книга1\xl\tables\table1.xml — описание столбцов таблицы, включая и типы данных столбцов
  • ..\Книга1\xl\worksheets\sheet1.xml — данные листа, не являющиеся строками, а также ссылки на общие строковые данные из файла sharedStrings.xml

xlsx11.jpg

Извлечение xml- таблицы данных из xlsx- файла.

Прежде всего, попытка выполнить экспорт данных, содержащихся в полученном нами файле Книга1 .xlsx , завершается неудачей, изображённой на рисунке ниже:

xlsx8.jpg

Рис.8

Что же, попробуем разобраться во внутреннем представлении xml- данных, а точнее файлов: sharedStrings.xml, table1.xml и sheet1.xml из предыдущего раздела, с тем чтобы попытаться всё же выполнить экспорт таблицы данных.

В полученном нами Книга .zip -файле, начальный фрагмент файла sharedStrings.xml имеет вид:

Забегая слегка вперёд, XPATH- выражение фильтра для выбора элемента . , содержащего текст у n- го элемента . , могло бы выглядеть так: select=»/sst/si[$n]/t» , где переменная n — имела бы в качестве значения число, означающее порядковый номер выбираемого si- элемента, начиная с 1.

В представленном ниже файле table1.xml, нас будет интересовать только информация о типах данных столбцов таблицы:

Ну хорошо, а как же теперь всем этим воспользоваться, чтобы «собирать» разбросанные таким образом значения в один xml- файл, представляющий собой результат экспорта таблицы данных из xlsx -файла? На мой взгляд, проще всего воспользоваться технологиями XSLT , чтобы осуществить это «меньшей кровью». Ниже показывается как это можно сделать.

В качестве первого шага, попробуем написать XSLT- преобразование, в котором оставаясь в рамках структуры элемента sheetData из файла sheet1.xml в результате преобразований, заменим все ссылки на строки из файла sharedStrings.xml (т.е. элементы . с числовыми значениями, у которых родительский c- элемент будет иметь атрибут t=»s» ). XSLT- код такого преобразования мог бы быть следующим:

Для выполнения XSLT- преобразований можно пробовать использовать и другие средства. Например, в MS .NET Framework 2.0, 3.0, C#- код консольного приложения мог бы быть таким:

Если будете экспериментировать именно с extractXlsxData.xslt , здесь константе IS_DOCFUNC следует присвоить именно true , т.к. в его коде выполняется загрузка файла sharedStrings.xml , используя XSLT- функцию document() .

# DEFINE XML_FILE «sheet1.xml»
# DEFINE XSL_FILE «extractXlsxData.xslt»
# DEFINE OUT_FILE «tr.xml»

# DEFINE XSL_PRM_NAME «prmPathToSharedStringsFile»
# DEFINE XSL_PRM_VALUE «»

Ну хорошо, удачно осуществив «подгруздку» строк-значений в таблицу xml- данных, давайте сделаем с этим результатом чего-нибудь действительно полезное. Например, вторым шагом попробуем написать код XSLT- преобразования такой, чтобы на выходе у нас получалось html- представление наших xml- данных.

В попытке учесть всё вышеперечисленное, мной написан код вот такого XSLT- преобразования:

xlsx9.jpg

Рис.9

что в общем-то и соответствует тому, к чему мы стремились.

using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.IO.Packaging;

и далее в тексте extractXlsxData.xslt все вхождения varDocSharedStrings необходимо поменять на prmDocSharedStrings

и далее в тексте getHtml.xslt все вхождения varDocTable следует изменить на prmDocTable

1) Имеется возможность через небольшую прослойку C++кода (Unmanaged API) в виде Win32API-dll (ClrHost.dll)

2) Rick также написал небольшой C#-код в виде класса в .NET Framework-сборке (wwDotNetBridge.dll), позволяющего:

  • создать экземпляр класса из указанной .NET Framework-сборки и передать его клиенту
  • далее, клиент может используя эту ссылку обратиться к методам/свойствам экземпляра класса, через некоторый «обобщённый интерфейс» (серию Invoke-методов, реализованных в

Знайка, самый умный эксперт в Цветочном городе
Мнение эксперта
Знайка, самый умный эксперт в Цветочном городе
Если у вас есть вопросы, задавайте их мне!
Задать вопрос эксперту
Если этот флажок установлен, существующие данные могут использоваться как заголовки столбцов при сопоставлении повторяющихся элементов листу. Если же вы хотите что-то уточнить, я с радостью помогу!
Вот как можно сопоставить XML-элементы в книге, которой вы хотите поделиться с другими пользователями: сначала сопоставьте XML-элементы с нужными ячейками, импортируйте данные XML, удалите все карты XML, а затем предоставьте общий доступ к книге.
Рис. 8.6. Область задач Источник XML

Сопоставление xml в excel

  • ..\Книга1\xl\sharedStrings.xml — общие данные, имеющие тип строка
  • ..\Книга1\xl\xmlMaps.xml — файл, содержащий схемы данных
  • ..\Книга1\xl\tables\table1.xml — описание столбцов таблицы, включая и типы данных столбцов
  • ..\Книга1\xl\worksheets\sheet1.xml — данные листа, не являющиеся строками, а также ссылки на общие строковые данные из файла sharedStrings.xml

Налогоплательщики, которые получили доход от продажи недвижимого имущества в 2019 году, обязаны сдать налоговую декларацию не позднее конца апреля 2024 года. На каждом листе есть такой индекс и для всех листов он разный.

Оставить отзыв

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