前面博客已经写过两种方法,各有缺点,但是项目中是追求的完美,所以才有我现在这种方法,可以说这种方法接近完美。
引用:NPOI
添加引用:项目==》管理NUGet程序包
下载安装:
判断DataGridView是否有数据:
private void buttonX26_Click(object sender, EventArgs e)
{
if (dataGridViewX8.Rows.Count == 0)
{
MessageBox.Show("当前无数据可导出!");
}
else
{
ExportDataToExcel(dataGridViewX8);
}
}
public void ExportDataToExcel(DataGridViewX dgv)
{
if (dgv.Rows.Count == 0)
{
return;
}
saveFileDialog1.Title = "请选择要导出的位置";
saveFileDialog1.Filter = "Excel文件| *.xls";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if (saveFileDialog1.FileName != "")
{
//创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
//获取list数据
//List<TB_STUDENTINFOModel> listRainInfo = m_BLL.GetSchoolListAATQ(schoolname);
// DataTable listRainInfo = mymssqlConnet.DAL_SelectDT_Par("EnrollmentGroup", mySqlParameters);
//给sheet1添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue("编码");
row1.CreateCell(1).SetCellValue("名称");
row1.CreateCell(3).SetCellValue("型号");
for (int i = 0; i < dgv.Rows.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
rowtemp.CreateCell(0).SetCellValue(dgv.Rows[i].Cells["Fixed_Assets_Code"].Value.ToString());
rowtemp.CreateCell(1).SetCellValue(dgv.Rows[i].Cells["Capital_assets_Name_G"].Value.ToString());
rowtemp.CreateCell(2).SetCellValue(dgv.Rows[i].Cells["Capital_assets_Code_G"].Value.ToString());
rowtemp.CreateCell(3).SetCellValue(dgv.Rows[i].Cells["Capital_assets_Model_G"].Value.ToString());
}
FileStream ms = File.OpenWrite(saveFileDialog1.FileName.ToString());
try
{
book.Write(ms);
ms.Seek(0, SeekOrigin.Begin);
MessageBox.Show("导出成功");
}
catch
{
MessageBox.Show("导出失败!");
}
finally
{
if (ms != null)
{
ms.Close();
}
}
hidepanelEx15();
panelEx15.Text = "正在加载。。。";
}
}
}