winfrom根据DataGridView导出Excel

 1  private void ExportExcels(string fileName, DataGridView myDGV)
 2         {
 3             string saveFileName = "";
 4             SaveFileDialog saveDialog = new SaveFileDialog();
 5             saveDialog.DefaultExt = "xls";
 6             saveDialog.Filter = "Excel文件|*.xls";
 7             saveDialog.FileName = fileName;
 8             saveDialog.ShowDialog();
 9             saveFileName = saveDialog.FileName;
10             if (saveFileName.IndexOf(":") < 0) return; //被点了取消
11             Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
12             if (xlApp == null)
13             {
14                 MessageBox.Show("无法创建Excel对象,可能您的设备未安装Excel");
15                 return;
16             }
17             Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
18             Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
19             Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
20             //写入标题
21             for (int i = 1; i < myDGV.ColumnCount; i++)
22             {
23                 worksheet.Cells[1, i] = myDGV.Columns[i].HeaderText;
24             }
25             //写入数值
26             for (int r = 0; r < myDGV.Rows.Count; r++)
27             {
28                 for (int i = 1; i < myDGV.ColumnCount; i++)
29                 {
30                     worksheet.Cells[r + 2, i] = myDGV.Rows[r].Cells[i].Value;
31                 }
32                 System.Windows.Forms.Application.DoEvents();
33             }
34             worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
35             if (saveFileName != "")
36             {
37                 try
38                 {
39                     workbook.Saved = true;
40                     workbook.SaveCopyAs(saveFileName);
41                 }
42                 catch (Exception ex)
43                 {
44                     MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
45                 }
46             }
47             xlApp.Quit();
48             GC.Collect();//强行销毁
49         }
DataGridView绑定时总是把主键作为隐藏字段放在第一列,此代码导出时已经过滤第一列隐藏列。
posted @ 2017-06-15 18:37  枫林余晖  阅读(306)  评论(0编辑  收藏  举报