C#.xml到.xlsx怎么样?

我想将一个完整的XML文件转换为XLSX,但我不知道如何做到这一点。 我在谷歌搜索了一个解决方案,但是大部分时间我只找到了进入另一个方向的方法,例如XLSX到XML。 在Microsoft页面上,我找到了一个xmlconvertclass,但我不确定如何使用该类。

过去有人做过这样的事情可以帮助我吗?

尝试下面的代码,我将XML转换为DataSet,然后将DataSet导出到Excel中

DataSet ds = new DataSet(); //Convert the XML into Dataset ds.ReadXml(@"E:\movie.xml"); //Retrieve the table fron Dataset DataTable dt = ds.Tables[0]; // Create an Excel object Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //Create workbook object string str = @"E:\test.xlsx"; Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(Filename: str); //Create worksheet object Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.ActiveSheet; // Column Headings int iColumn = 0; foreach (DataColumn c in dt.Columns) { iColumn++; excel.Cells[1, iColumn] = c.ColumnName; } // Row Data int iRow = worksheet.UsedRange.Rows.Count - 1; foreach (DataRow dr in dt.Rows) { iRow++; // Row's Cell Data iColumn = 0; foreach (DataColumn c in dt.Columns) { iColumn++; excel.Cells[iRow + 1, iColumn] = dr[c.ColumnName]; } } ((Microsoft.Office.Interop.Excel._Worksheet)worksheet).Activate(); //Save the workbook workbook.Save(); //Close the Workbook workbook.Close(); // Finally Quit the Application ((Microsoft.Office.Interop.Excel._Application)excel).Quit(); 

一个更简单的解决方案:在Excel中使用数据源。

  1. 创建符合您需求的“模板”Xslx。
  2. 对于每个xml数据文件,请将数据连接添加到xml文件。
  3. 如果需要,设置每次打开文件时刷新的数据连接。

这是开箱即用的,根本没有代码(当然不包括xml代)。

或者,您可以通过ASP.Net应用程序(动态或不动态)发布Xml,并设置数据连接以从此asp.net应用程序收集数据。

您需要读取XLSX文件格式的架构并编写XSLT文件以转换自定义XML文件。

.NET具有非常好的XML支持,所以这样的事情应该是相当简单的,它将是从XML格式到需要真正努力的XSLT的实际映射。

如果从数据集中获取多个表,请使用以下代码,您应该注意将数据表插入Excel的逻辑。

  static void Main(string[] args) { DataSet ds = new DataSet(); //Convert the XML into Dataset ds.ReadXml(@"E:\movies.xml"); //Retrieve the table fron Dataset //DataTable dt = ds.Tables[0]; // Create an Excel object Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //Create workbook object string str = @"E:\test.xlsx"; Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(Filename: str); foreach (DataTable tab in ds.Tables) { FromDataTableToExcel(tab,excel,workbook); } //Save the workbook workbook.Save(); //Close the Workbook workbook.Close(); // Finally Quit the Application ((Microsoft.Office.Interop.Excel._Application)excel).Quit(); } static void FromDataTableToExcel(DataTable dt, Microsoft.Office.Interop.Excel.Application excel, Microsoft.Office.Interop.Excel.Workbook workbook) { //Create worksheet object Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.ActiveSheet; // Column Headings int iColumn = worksheet.UsedRange.Columns.Count-1; int iColumn1 = iColumn; int iColumn2 = iColumn; foreach (DataColumn c in dt.Columns) { iColumn++; excel.Cells[1, iColumn] = c.ColumnName; } // Row Data int iRow = 0; foreach (DataRow dr in dt.Rows) { iRow++; // Row's Cell Data foreach (DataColumn c in dt.Columns) { iColumn1++; excel.Cells[iRow + 1, iColumn1] = dr[c.ColumnName]; } iColumn1 = iColumn2; } ((Microsoft.Office.Interop.Excel._Worksheet)worksheet).Activate(); }