我想将一个完整的 XML 文件转换为 XLSX,但我不知道该怎么做。我在 Google 上搜索了一个解决方案,但大多数时候我只找到了另一个方向的方法,例如 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 中的数据源。
这是开箱即用的,根本没有代码(当然不包括 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();
}