将 XML 文件转换为 Excel 文件






4.32/5 (9投票s)
将 XML 数据转换为 DataTable 并将 DataTable 导出到 Excel 文件
引言
在本技巧中,我将与您分享在 C# 中将 XML 转换为 Excel 的方法。
在这里,我们将学习在 C# WindowsForm 应用程序中读取 XML 文件。我们将创建一个小型单窗体应用程序,该应用程序从用户处获取 XML 文件,并将 XML 数据转换为 Excel 数据并返回 Excel 文件。
目标受众
目标受众是对 C# 有基本了解的人。
解释
要做的事情
- 创建一个 C# WinForm 应用程序
- 添加引用
- 创建 UI
- 代码
创建一个新项目,并为其指定一个合适的名称,就像我给项目命名为“ConvertXmlToXl
”一样。
创建项目后,您必须在项目中添加一个名为“Microsoft Excel 对象库”的引用。您将在“COM”部分找到此引用。
现在,创建一个 UI,其中包含两个 Button
,两个 Textbox
,一个 CheckBox
,一个 ProgressBar
和一个 OpenFileDialog
工具。 一个按钮用于浏览 XML 文件,checkbox
用于为用户提供自定义 Excel 文件名的选项。 progressbar
用于显示转换进度。 另一个按钮用于将 XML 文件转换为 Excel。
因此,我们的 UI 看起来如下
现在,编写按钮的点击事件代码来浏览计算机文件,以便用户可以选择他的 XML 文件。 在 OpenFileDialog
工具中设置过滤器“XML 文件 (*.xml)|*.xml|所有文件 (*.*)|*.*”,以便在浏览文件时首选 Excel 文件。 用户可以通过选中“Excel 文件名”复选框并相应地在 textbox
中输入 Excel 文件名来提供自定义 Excel 文件名。 之后,用户只需单击“转换”按钮即可转换 XML 文件。 因此,双击“转换”按钮以打开单击事件。
代码
using System.Data;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
文件浏览按钮点击事件的代码
private void btnBrowseFolder_Click(object sender, EventArgs e)
{
DialogResult drResult = OFD.ShowDialog();
if (drResult == System.Windows.Forms.DialogResult.OK)
txtXmlFilePath.Text = OFD.FileName;
}
“转换”按钮点击事件的代码
private void btnConvert_Click(object sender, EventArgs e)
{
// Resetting the progress bar Value
progressBar1.Value = 0;
if (chkCustomeName.Checked && txtCustomeFileName.Text != "" &&
txtXmlFilePath.Text != "") // using Custom Xml File Name
{
if (File.Exists(txtXmlFilePath.Text)) // Checking XMl File is Exist or Not
{
string CustXmlFilePath =
Path.Combine(new FileInfo(txtXmlFilePath.Text).DirectoryName,
txtCustomeFileName.Text); // Creating Path for Xml Files
System.Data.DataTable dt = CreateDataTableFromXml(txtXmlFilePath.Text);
ExportDataTableToExcel(dt, CustXmlFilePath);
MessageBox.Show("Conversion Completed!!");
}
}
else if (!chkCustomeName.Checked ||
txtXmlFilePath.Text != "") // Using Default Xml File Name
{
if (File.Exists(txtXmlFilePath.Text)) // Checking XMl File is Exist or Not
{
FileInfo fi = new FileInfo(txtXmlFilePath.Text);
string XlFile = fi.DirectoryName + "\\" + fi.Name.Replace
(fi.Extension,".xlsx"); // CReating Default File Name
System.Data.DataTable dt = CreateDataTableFromXml
(txtXmlFilePath.Text); // Getting XML Data into DataTable
ExportDataTableToExcel(dt, XlFile);
MessageBox.Show("Conversion Completed!!");
}
}
else
{
MessageBox.Show("Please Fill Required Fields!!");
}
}
在“CreateDataTableFromXml
”函数中,我们只是将 XML 数据转换为“DataTable
”。 此函数返回一个 DataTable
,我们将此 datatable
导出到 Excel 文件中。
// Creating DataTable With Xml Data
public System.Data.DataTable CreateDataTableFromXml(string XmlFile)
{
System.Data.DataTable Dt = new System.Data.DataTable();
try
{
DataSet ds = new DataSet();
ds.ReadXml(XmlFile);
Dt.Load(ds.CreateDataReader());
}
catch (Exception ex)
{
}
return Dt;
}
在“ExportDataTableToExcel
”函数中,我们通过函数的参数传递 DataTable
和 Excel 文件名。 我们正在创建新的 Excel 文件,并将 DataTable
的列名作为 Excel 文件中的标题行导出。 并且还导出 DataRow
作为 Excel 行。
private void ExportDataTableToExcel(System.Data.DataTable table, string Xlfile)
{
Microsoft.Office.Interop.Excel.Application excel =
new Microsoft.Office.Interop.Excel.Application();
Workbook book = excel.Application.Workbooks.Add(Type.Missing);
excel.Visible = false;
excel.DisplayAlerts = false;
Worksheet excelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
excelWorkSheet.Name = table.TableName;
progressBar1.Maximum = table.Columns.Count;
for (int i = 1; i < table.Columns.Count + 1; i++) // Creating Header Column In Excel
{
excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
if (progressBar1.Value < progressBar1.Maximum)
{
progressBar1.Value++;
int percent = (int)(((double)progressBar1.Value /
(double)progressBar1.Maximum) * 100);
progressBar1.CreateGraphics().DrawString(percent.ToString() +
"%", new System.Drawing.Font("Arial",
(float)8.25, FontStyle.Regular), Brushes.Black,
new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7));
System.Windows.Forms.Application.DoEvents();
}
}
progressBar1.Maximum = table.Rows.Count;
for (int j = 0; j < table.Rows.Count; j++) // Exporting Rows in Excel
{
for (int k = 0; k < table.Columns.Count; k++)
{
excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
}
if (progressBar1.Value < progressBar1.Maximum)
{
progressBar1.Value++;
int percent = (int)(((double)progressBar1.Value /
(double)progressBar1.Maximum) * 100);
progressBar1.CreateGraphics().DrawString(percent.ToString() +
"%", new System.Drawing.Font("Arial",
(float)8.25, FontStyle.Regular), Brushes.Black,
new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7));
System.Windows.Forms.Application.DoEvents();
}
}
book.SaveAs(Xlfile);
book.Close(true);
excel.Quit();
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(excel);
}
结论
通过使用这些简单的方法,我们可以将 XML 文件转换为 DataTable
。 从 DataTable
中,我们可以将数据导出到 Excel 文件中,或者我们可以创建一个新的 Excel 文件并导出 DataTable
的 Data
,我们还可以通过简单地将 DataGridView
属性“DataSource
”设置为 DataTable
,从而在“DataGridView
”中显示 DataTable
的 Data
。
希望这对您有所帮助,您会喜欢这篇文章。
请在下面的评论中提供您宝贵的反馈。