WPF将DataGrid内容导出到Excel
最近在维护一个项目程序的时候需要新添加一些需求,其中一个需求就是把WPF中的datagird中的内容导出为Excel。查了很多网上的资料,最后结合将DataGridView导出到Excel的方法做了一些调整之后实现了功能需求。
!首先在VS里引用,前提电脑里必须要有Excel否则不能引用
我是通过点击button控件进行保存的。直接贴代码
private void ExportParameterBtn_Click(object sender, RoutedEventArgs e)
{
string fileName = "";
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xlsx";
saveDialog.Filter = "Excel 文件|*.xlsx";
saveDialog.FileName = fileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
System.Windows.MessageBox.Show("无法创建Excel对象,您可能未安装Excel");
return;
}
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; //取得sheet1
//写入行
for (int i = 0; i < ParaGrid.Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = ParaGrid.Columns[i].Header;
}
for (int r = 0; r < ParaGrid.Items.Count; r++)
{
for (int i = 0; i < ParaGrid.Columns.Count; i++)
{
worksheet.Cells[r + 2, i + 1] = (ParaGrid.Columns[i].GetCellContent(ParaGrid.Items[r]) as TextBlock).Text; //读取DataGrid某一行某一列的信息内容,与DataGridView不同的地方
}
System.Windows.Forms.Application.DoEvents();
}
worksheet.Columns.EntireColumn.AutoFit();
MessageBox.Show(fileName + "保存成功");
if(saveFileName!="")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
}
catch(Exception ex)
{
MessageBox.Show("导出文件可能正在被打断!" + ex.Message);
}
}
xlApp.Quit();
GC.Collect();
}
修改的主要部分就是读取DataGrid行列内容,导入Excel部分没有作修改。