使用C#和BizTalk将Excel(xlsx)转换为XML

时间:2015-02-01 15:15:36

标签: c# xml excel biztalk biztalk-2013r2

我已经查看了此论坛上关于类似问题的大部分主题,但我们找不到我想要的内容。

我正在尝试使用C#编写BizTalk 2013 R2的管道组件,只是将传入的Excel 2010 .xlsx文件转换为它的裸/基XML表示。

我不想对它运行任何模板或XLST转换它或类似的东西。我只是想按原样返回所述电子表格的基础XML表示。

看起来这应该是一项非常简单的任务,但我根本无法弄清楚如何去做。

我发现的所有内容都需要使用DataTables并循环遍历行和单元格(通过OpenXML)以输出更具人类可读性的特定XML表示形式但不是我想要的是什么。

我想要该电子表格的实际Microsoft XML表示。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

好的,无需对文件进行任何解压缩即可完成。

如果您使用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();
}