Как Перевести Файл Excel в Xml Формат • Файл xlworksheets_relssheet1xml
Как Перевести Файл Excel в Xml Формат
Получение xlsx- файла по данным из xml+xsd .
Чтобы самим не придумывать данные для Excel- таблицы, воспользуемся тем, что можно загрузить из интернета по ссылке: Сопоставление XML-элементов и отмена их сопоставления. Продублирую прямо сюда текст файлов, позаимствованных из этого источника. Итак, там взяты два файла: Расходы.xml — пример данных, на основе которых, нами будет построена Excel- таблица и Расходы.xsd — схема для него.
В файле Расходы.xml имеем следующее:
а в файле Расходы. xsd :
Далее, создадим на основе данных этих двух файлов таблицу в Excel из MS Office 2007. Ниже шаг за шагом и т.с. в картинках показано, как это можно сделать. Но прежде всего, если у Вас на «Панели быстрого доступа» отсутствует вкладка «Разработчик», то проделайте действия, изображённые на Рис.1:
Рис.1
т.е. отметьте пункт «Показывать вкладку «Разработчик» на ленте» в диалоге «Параметры Excel » и подтвердите изменения, нажав кнопку » Ok » в правой нижней части окна этого диалога.
Следующим действием загрузим файл-схему Расходы. xsd в Excel , для чего выполните пункты, отмеченные красными кружками на Рис.2:
Рис.2
Если всё предшествующее не вызвало никаких ошибок, то в результате Вы должны получить то, что изображено на Рис.3:
Рис.3
т.е. в правой панели «Источник XML » у Вас должна появиться древовидная структура полей, описанных в фале-схеме Расходы.xsd.
Следующим действием, мы должны сопоставить данные в области листа книги с полями загруженной xsd- схемы. Для чего следует мышкой выделить корневой элемент в правой панели «Источник XML » ( Root в нашем случае) и не отпуская мышки, перетащить его в ячейку A1 на Лист 1. После чего отпустить кнопку мыши. Проделав это, мы получим ситуацию, подобную изображённой на Рис.4:
Рис.4
Наконец, попробуем выполнить загрузку/импорт собственно самих данных из файла Расходы. xml , для чего выделив область данных нашей таблицы на Лист 1 (область ячеек: A2:F2 ), воспользуемся кнопкой «Импорт» на закладке «Разработчик» так, как показано на Рис.5:
Рис.5
Если никаких ошибок при загрузке xml- данных из файла Расходы. xml не возникло, то вы должны получить ситуацию, изображённую на Рис.6:
Рис.6
Наконец-то мы достигли конечной цели данного этапа, и можем сохранить полученное в виде файла Книга1 .xlsx. Только перед сохранением желательно удалить пустые лишние листы: Лист 2, Лист 3.
Рис.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
Извлечение xml- таблицы данных из xlsx- файла.
Прежде всего, попытка выполнить экспорт данных, содержащихся в полученном нами файле Книга1 .xlsx , завершается неудачей, изображённой на рисунке ниже:
Рис.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- преобразования:
Рис.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 в excel
- ..\Книга1\xl\sharedStrings.xml — общие данные, имеющие тип строка
- ..\Книга1\xl\xmlMaps.xml — файл, содержащий схемы данных
- ..\Книга1\xl\tables\table1.xml — описание столбцов таблицы, включая и типы данных столбцов
- ..\Книга1\xl\worksheets\sheet1.xml — данные листа, не являющиеся строками, а также ссылки на общие строковые данные из файла sharedStrings.xml
Налогоплательщики, которые получили доход от продажи недвижимого имущества в 2019 году, обязаны сдать налоговую декларацию не позднее конца апреля 2024 года. На каждом листе есть такой индекс и для всех листов он разный.
Публикуя свою персональную информацию в открытом доступе на нашем сайте вы, даете согласие на обработку персональных данных и самостоятельно несете ответственность за содержание высказываний, мнений и предоставляемых данных. Мы никак не используем, не продаем и не передаем ваши данные третьим лицам.