C#(Winform开发)Excel导出

  网上搜索了一下导出功能,有好些不能使用或者缺少引用文件,浪费本人时间。所以记录一个能用的例子,(代码转载)

  开发工具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的标头。

原文地址:https://www.cnblogs.com/XinruiIIiiiii/p/13868085.html