网上搜索了一下导出功能,有好些不能使用或者缺少引用文件,浪费本人时间。所以记录一个能用的例子,(代码转载)
开发工具vs2015,首先点击 (工具—>NuGet包管理器—>管理解决方案的 NuGet 程序包—>搜索: Microsoft.Office.Interop.Excel 安装)
代码如下:
1 //导出Excel 2 private void ExportExcel(DataTable dt) 3 { 4 DataSet ds = new DataSet();//数据源 5 ds.Tables.Add(dt); 6 if (ds == null) return; 7 string saveFileName = ""; 8 bool fileSaved = false; 9 SaveFileDialog saveDialog = new SaveFileDialog(); 10 saveDialog.DefaultExt = "xls"; 11 saveDialog.Filter = "Excel文件|*.xls"; 12 saveDialog.FileName = "Sheet1"; 13 saveDialog.ShowDialog(); 14 saveFileName = saveDialog.FileName; 15 if (saveFileName.IndexOf(":") < 0) return; //被点了取消 16 17 Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 18 19 if (xlApp == null) 20 { 21 MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel"); 22 return; 23 } 24 Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; 25 Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); 26 Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 27 //写入字段 28 for (int i = 0; i < ds.Tables[0].Columns.Count; i++) 29 { 30 worksheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName; 31 } 32 //写入数值 33 34 for (int r = 0; r < ds.Tables[0].Rows.Count; r++) 35 { 36 for (int i = 0; i < ds.Tables[0].Columns.Count; i++) 37 { 38 worksheet.Cells[r + 2, i + 1] = ds.Tables[0].Rows[r][i]; 39 } 40 System.Windows.Forms.Application.DoEvents(); 41 } 42 worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。 43 //Microsoft.Office.Interop.Excel.Range rg = worksheet.get_Range(worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]); 44 Microsoft.Office.Interop.Excel.Range rg = worksheet.Range[worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]]; 45 rg.NumberFormat = "00000000"; 46 if (saveFileName != "") 47 { 48 try 49 { 50 workbook.Saved = true; 51 workbook.SaveCopyAs(saveFileName); 52 fileSaved = true; 53 } 54 catch (Exception ex) 55 { 56 fileSaved = false; 57 MessageBox.Show("导出文件时出错,文件可能正被打开! " + ex.Message); 58 } 59 } 60 else 61 { 62 fileSaved = false; 63 } 64 xlApp.Quit(); 65 GC.Collect();//强行销毁 66 if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL 67 }
调用时编辑好传入的datatable的内容就行,dt的表头就是Excel的标头。