Преобразование Excel (xlsx) в XML с помощью C# и BizTalk

Я просмотрел большинство тем на этом форуме по подобным вопросам, но не нашел именно то, что ищу.

Я пытаюсь написать компонент конвейера для BizTalk 2013 R2 с помощью С#, чтобы просто преобразовать входящий файл Excel 2010 .xlsx в его простое/базовое XML-представление.

Я не хочу запускать против него какие-либо шаблоны или преобразовывать его XLST или что-то в этом роде. Я просто хочу вернуть базовое XML-представление указанной электронной таблицы как есть.

Кажется, что это должно быть очень простой задачей, но я не могу понять, как это сделать вообще.

Все, что я нашел, требует работы с DataTables и перебора строк и ячеек (через OpenXML) для вывода определенного XML-представления, которое более удобочитаемо для человека, но это не то, что мне нужно.

Мне нужно фактическое представление Microsoft XML этой электронной таблицы.

Любая помощь будет принята с благодарностью.


person Ritley572    schedule 01.02.2015    source источник
comment
Разархивируйте и возьмите XML-контент   -  person ErikEJ    schedule 01.02.2015
comment
Нет никакого программного способа сделать это, кроме как разархивировать?   -  person Ritley572    schedule 02.02.2015
comment
Используйте библиотеку .zip для распаковки!   -  person ErikEJ    schedule 02.02.2015
comment
Да, я понимаю, что могу это сделать, но я надеялся, что смогу просто вернуть xml без необходимости распаковывать файлы... Я могу получить рабочие листы и рабочие книги программно без распаковки с помощью OpenXML SDK, но не вижу никаких способ использовать что-то вроде worksheet.OuterXml, чтобы вернуть xml рабочего листа, который я загрузил. Неужели нет другого способа сделать это, кроме как разархивировать и вернуть фактический xml-файл?   -  person Ritley572    schedule 02.02.2015
comment
@Ritley572 Ritley572 Вы понимаете, что любая библиотека, которую вы в конечном итоге будете использовать, должна будет разархивировать файл? Если ваша единственная цель — получить XML-файлы внутри, то использование библиотеки для чтения файла — это просто добавление дополнительных шагов.   -  person mason    schedule 02.02.2015
comment
@mason да, я не осознавал, что файлы xlsx на самом деле были просто zip-файлами под прикрытием, пока я действительно не изучил, как получить неизмененный XML. Я исходил из предположения, что это всего лишь один большой файл XML, к которому библиотека OpenXML может получить доступ. Как только я понял, что на самом деле это набор связанных XML-файлов, все стало проще. Хотя я считаю, что приведенный ниже код лучше подходит для моих нужд, чем использование zip-библиотеки для распаковки файла, а затем использование OpenXML, чтобы получить то, что мне нужно в любом случае. Возможно, мне следует отредактировать исходный вопрос, хотя я не хочу никого смущать.   -  person Ritley572    schedule 03.02.2015


Ответы (1)


Хорошо, разобрался без распаковки файла.

Если вы используете подход SAX для загрузки рабочего листа в OpenXmlReader, найденный здесь:

https://msdn.microsoft.com/en-us/library/office/gg575571(v=office.15).aspx

Затем вы можете использовать читатель, чтобы получить OuterXml следующим образом:

using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(filepath, false))
{
    WorkbookPart wbPart = spreadSheetDocument.WorkbookPart;

    OpenXmlReader reader = OpenXmlReader.Create(wbPart);

    while (reader.Read())
    {
        if (reader.ElementType == typeof(Sheet))
        {
            Sheet sheet = (Sheet)reader.LoadCurrentElement();

            WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(sheet.Id));

            OpenXmlReader wsReader = OpenXmlReader.Create(wsPart);
            while (wsReader.Read())
            {
                if(wsReader.ElementType == typeof(Worksheet))
                {
                    Worksheet wsPartXml = (Worksheet)wsReader.LoadCurrentElement();
                    Console.WriteLine(wsPartXml.OuterXml + "\n");
                }
            }
        }
    }
    Console.ReadKey();
}
person Ritley572    schedule 02.02.2015