DataGridView 导出数据
虽说网上有很多 导出数据的方法,但大多只是表面上导出所有数据,并没有考虑到一些细节问题,
例如:隐藏列不该导出,复选框列不该导出。。。。。
在浏览他人写的方法后,结合自己的思想,总结出了如下方法
#region 将 Datagridview 中的数据导出
/// <summary>
/// 将 Datagridview 中的数据导出 通用
/// </summary>
/// <param name="dgv">DataGridView</param>
/// <param name="tittle">要导出的文件标题</param>
public void Export_DGV(DataGridView dgv,string tittle)
{
if (dgv == null || dgv.Rows.Count < 1 || dgv.Columns.Count < 1)
{
MessageBox.Show("没有任何有效数据!");
return;
}
int colscount = dgv.Columns.Count;
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog(); //新建保存对话框
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = "Sheet1";
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0)
{
return; //被点了取消
}
//验证以fileNameString命名的文件是否存在,如果存在删除它
FileInfo file = new FileInfo(saveFileName);
if (file.Exists)
{
try
{
file.Delete();
}
catch (Exception error)
{
MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
Microsoft.Office.Interop.Excel.Application objExcel = null;
Workbook objWorkbook = null;
Microsoft.Office.Interop.Excel.Worksheet objsheet = null;
try
{
//申明对象
objExcel = new Microsoft.Office.Interop.Excel.Application();
if (objExcel == null)
{
MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
return;
}
objWorkbook = objExcel.Workbooks.Add(Missing.Value);
objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;
//设置EXCEL不可见
objExcel.Visible = false;
//判断哪些列是不用显示的
List<int> colArry = new List<int>();
for (int i = 0; i < colscount; i++)
{
if (dgv.Rows[0].Cells[i] is DataGridViewCheckBoxCell || (dgv.Columns[i].Visible == false)) //判断是否是复选框或者是隐藏的列
{
colArry.Add(i);
}
}
//向Excel中写入表格的表头
int displayColumnsCount = 1;
for (int i = 0; i <= dgv.ColumnCount - 1; i++)
{
if (!colArry.Contains(i))
{
objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
displayColumnsCount++;
}
}
//向Excel中逐行逐列写入表格中的数据
for (int row = 0; row <= dgv.RowCount - 1; row++)
{
displayColumnsCount = 1;
for (int col = 0; col < colscount; col++)
{
if (!colArry.Contains(col))
{
try
{
objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
displayColumnsCount++;
}
catch (Exception)
{
}
}
}
}
//保存文件
objWorkbook.SaveAs(saveFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
}
catch (Exception ex)
{
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
return;
}
finally
{
objExcel.Quit();
GC.Collect();//强行销毁
}
MessageBox.Show(saveFileName + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#endregion
在这里直接调用此方法就行,就可以轻松将数据比较完美的导出了。。。