WPF 利用NPOI DataGrid直接导出Excel
废话不多,刚入门不久,亲测无bug
// 依赖NuGet包 NPOI.Excel
// button事件
private void SaveList_Click(object sender, RoutedEventArgs e)
{
if (Data.Items.Count < 1)//DataGrid为空不作为
{
return;
}
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Excel(2007-2016)|*.xlsx";
saveFileDialog.ShowDialog();
if (saveFileDialog.FileName == "")
{
return;//文件名为空或取消不作为
}
var extension = System.IO.Path.GetExtension(saveFileDialog.FileName);
if (extension.Equals(".xlsx"))
{
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
IRow rowHead = sheet.CreateRow(0);
for (int i = 0; i < Data.Columns.Count; i++)
{
rowHead.CreateCell(i, CellType.String).SetCellValue(Data.Columns[i].Header.ToString());//建立表头
}
for (int i = 0; i < Data.Items.Count; i++)
{
DataGridRow row = (DataGridRow)Data.ItemContainerGenerator.ContainerFromIndex(i);//DataGrid元素索引转换
IRow row1 = sheet.CreateRow(i + 1);
for (int j = 0; j < Data.Columns.Count; j++)
{
TextBlock cellContent = Data.Columns[j].GetCellContent(row) as TextBlock;//输出内容
if (cellContent != null)
{
row1.CreateCell(j, CellType.String).SetCellValue(cellContent.Text);//填入表格
}
else
{
row1.CreateCell(j, CellType.String).SetCellValue("-");
}
}
}
for (int i = 0; i < Data.Columns.Count; i++)
{
sheet.AutoSizeColumn(i);//表格格式默认自动
}
using (FileStream stream = File.OpenWrite(saveFileDialog.FileName))
{
workbook.Write(stream);
stream.Close();
}
System.Windows.MessageBox.Show("导出数据成功!");
GC.Collect();//废品回收站
return;
}
}