使用C#将XML数据导出到Excel

时间:2016-04-05 09:24:57

标签: c# xml excel linq

XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<IMPORT ExportDate="2016-03-02" Exercise="1" User="asa" Version="8.73" BusinessUnit="abc(1236)">

   <BusinessUnitAdmin>
    ...
    ...
    </BusinessUnitAdmin>
   <BusinessUnit>
    ..
    ..
    </BusinessUnit>
    <Exercise>
    ..
    ..
     </Exercise>
     <Exercise>
     ..
     ..
     </Exercise>
     <Contact>
     ..
     </Contact>
 </IMPORT>

我正在尝试将此XML导出到Excel,同时还要维护XML的架构。 为此,我尝试将XML转换为Dataset,然后将其导出到Excel。 如果我从XML中删除根元素 - IMPORT,它可以正常工作。但是,由于它具有&lt; BusinessUnit 作为属性,因此无法读取&#34; BusinessUnit&#34;作为元素。 为此,我试图从第二个元素- <BusinessUnitAdmin>读取XML;但无法做到。

C#代码:

DataSet ds = new DataSet();
string path = "C:\\abc\\xyz.xml";
ds.ReadXml(path);                         //throws error
ExportDataSetToExcel(ds);

错误:&#34;名为&#39; BusinessUnit&#39;已经属于此DataTable:无法将嵌套表名设置为相同的名称。&#34;

我尝试过使用LINQ:

XDocument xdoc = XDocument.Load(path);
XElement import = xdoc.Element("IMPORT");
XElement contact = import.Element("Contact");
StringReader theReader = new StringReader(contact.ToString());
ds.ReadXml(theReader);

它工作正常,但这样,我必须手动读取所有元素。

我也尝试使用 - var allElements = xdoc.Descendants()阅读元素;  但无法在数据集中存储特定元素。

1 个答案:

答案 0 :(得分:0)

对我来说,问题不是,您无法将XML数据导出到Excel中。

问题实际上是您无法将XML(基于树的分层格式)转换为2D数组值,可以导出到Excel。

我的意思是,如果您的XML包含三个层次结构,您希望Excel如何显示它?!

无论如何,让我回答你问题的第二个部分。

如果您可以使用常规二维格式(DataTablesort by type)获取数据,那么您可以使用我的免费C#类将其写入.xlsx文件代码行。

Export to Excel

现在,您只需要将数据转换为可用的格式。

告诉你......!