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

我已经查看了这个论坛上关于类似问题的大多数主题,但没有找到我正在寻找的内容.

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

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

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

我发现的一切都需要使用DataTables并循环遍历行和单元格(通过OpenXML)来输出一个更具人类可读性的特定XML表示,但这不是我想要的.

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

任何帮助将不胜感激.

最佳答案 好的,想出来就不用解压缩文件了.

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