C#winform导出数据到Excel的类

  1         /// <summary>
  2         /// 构造函数
  3         /// </summary>
  4         public ExportData()
  5         {
  6 
  7         }
  8         /// <summary>
  9         /// 保存文件名
 10         /// </summary>
 11         private string savefilename = "";
 12         /// <summary>
 13         /// 准备导出的数据容器
 14         /// </summary>
 15         private System.Windows.Forms.DataGridView datagv;
 16         /// <summary>
 17         /// 导出excel文档
 18         /// </summary>
 19         /// <param name="d">数据所在控件</param>
 20         public void OutDataToExcelByDataSource(System.Windows.Forms.DataGridView dgview)
 21         {
 22             try
 23             {
 24                 if (dgview.Columns.Count < 1)
 25                 {
 26                     MessageBox.Show("没有导出数据。");
 27                     return;
 28                 }
 29                 SaveFileDialog sfd = new SaveFileDialog();
 30                 sfd.ValidateNames = true;
 31                 sfd.Filter = "Excel2003文件(*.xls)|*.xls|Excel2007文件(*.xlsx)|*.xlsx|Access文件(*.mdb)|*.mdb|DBF文件(*.dbf)|*.dbf";
 32                 if (sfd.ShowDialog() != DialogResult.OK)
 33                 {
 34                     return;
 35                 }
 36                 this.savefilename = sfd.FileName;
 37                 //检测文件名是否合法
 38                 string tryfile = "";
 39                 tryfile = savefilename.Substring(savefilename.LastIndexOf("\") + 1);
 40                 tryfile = tryfile.Substring(0, tryfile.LastIndexOf("."));
 41                 foreach (char c in tryfile)
 42                 {
 43                     if ("<>?:[]|*".Contains(c.ToString()))
 44                     {
 45                         MessageBox.Show("文件名包含非法字符.");
 46                         return;
 47                     }
 48                 }
 49                 this.datagv = dgview;
 50                 if (sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")) == ".xlsx" || sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")) == ".xls")
 51                 {
 52                     outToExcelByDataSource();
 53                 }
 54                 else if (sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")) == ".mdb" || sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")) == ".dbf")
 55                 {
 56                     outToAccessByDataSource();
 57                 }
 58             }
 59             catch (Exception W)
 60             {
 61                 MessageBox.Show(W.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
 62             }
 63         }
 64         /// <summary>
 65         /// 导出excel文档
 66         /// </summary>
 67         /// <param name="d">数据所在控件</param>
 68         public void OutDataToExcelByDataTable(System.Windows.Forms.DataGridView dgview)
 69         {
 70             try
 71             {
 72                 if (dgview.Columns.Count < 1)
 73                 {
 74                     MessageBox.Show("没有导出数据。");
 75                     return;
 76                 }
 77                 SaveFileDialog sfd = new SaveFileDialog();
 78                 sfd.ValidateNames = true;
 79                 sfd.Filter = "Excel2003文件(*.xls)|*.xls|Excel2007文件(*.xlsx)|*.xlsx|Access文件(*.mdb)|*.mdb|DBF文件(*.dbf)|*.dbf"; ;
 80                 if (sfd.ShowDialog() != DialogResult.OK)
 81                 {
 82                     return;
 83                 }
 84                 this.savefilename = sfd.FileName;
 85                 //检测文件名是否合法
 86                 string tryfile = "";
 87                 tryfile = savefilename.Substring(savefilename.LastIndexOf("\") + 1);
 88                 tryfile = tryfile.Substring(0, tryfile.LastIndexOf("."));
 89                 foreach (char c in tryfile)
 90                 {
 91                     if ("<>?:[]|*".Contains(c.ToString()))
 92                     {
 93                         MessageBox.Show("文件名包含非法字符.");
 94                         return;
 95                     }
 96                 }
 97                 this.datagv = dgview;
 98                 if (sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".xlsx" || sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".xls")
 99                 {
100                     outToExcelByDataTable();
101                 }
102                 else if (sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".mdb" || sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".dbf")
103                 {
104                     outToAccessByDataTable();
105                 }
106             }
107             catch (Exception W)
108             {
109                 MessageBox.Show(W.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
110             }
111         }
112         /// <summary>
113         /// 导出文档
114         /// </summary>
115         public void OutDataByDataTable(DataTable tab)
116         {
117             try
118             {
119                 if (tab.Columns.Count < 1)
120                 {
121                     MessageBox.Show("没有导出数据。");
122                     return;
123                 }
124                 SaveFileDialog sfd = new SaveFileDialog();
125                 sfd.ValidateNames = true;
126                 sfd.Filter = "Excel2003文件(*.xls)|*.xls|Excel2007文件(*.xlsx)|*.xlsx|Access文件(*.mdb)|*.mdb|DBF文件(*.dbf)|*.dbf";
127                 if (sfd.ShowDialog() != DialogResult.OK)
128                 {
129                     return;
130                 }
131                 this.savefilename = sfd.FileName;
132                 //检测文件名是否合法
133                 string tryfile = "";
134                 tryfile = savefilename.Substring(savefilename.LastIndexOf("\") + 1);
135                 tryfile = tryfile.Substring(0, tryfile.LastIndexOf("."));
136                 foreach (char c in tryfile)
137                 {
138                     if ("<>?:[]|*".Contains(c.ToString()))
139                     {
140                         MessageBox.Show("文件名包含非法字符.");
141                         return;
142                     }
143                 }
144                 if (sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".xlsx" || sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".xls")
145                 {
146                     ExportExcelForm of = new ExportExcelForm();
147                     of.mytable = tab;
148                     if (of.mytable == null)
149                     {
150                         MessageBox.Show("没有导出数据。");
151                         return;
152                     }
153                     of.savefimename = this.savefilename;
154                     of.Show();
155                 }
156                 else if (sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".mdb" || sfd.FileName.Substring(sfd.FileName.LastIndexOf(".")).ToLower() == ".dbf")
157                 {
158                     ExportAccessForm of = new ExportAccessForm();
159                     of.mytable = tab;
160                     if (of.mytable == null)
161                     {
162                         MessageBox.Show("没有导出数据。");
163                         return;
164                     }
165                     of.savefimename = this.savefilename;
166                     of.Show();
167                 }
168             }
169             catch (Exception W)
170             {
171                 MessageBox.Show(W.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
172             }
173         }
174         /// <summary>
175         /// 弹出导出窗口
176         /// </summary>
177         private void outToExcelByDataSource()
178         {
179             ExportExcelForm of = new ExportExcelForm();
180             of.mytable = (DataTable)this.datagv.DataSource;
181             if (of.mytable == null)
182             {
183                 MessageBox.Show("没有导出数据。");
184                 return;
185             }
186             of.savefimename = this.savefilename;
187             of.Show();
188         }
189         /// <summary>
190         /// 弹出导出窗口
191         /// </summary>
192         private void outToExcelByDataTable()
193         {
194             ExportExcelForm of = new ExportExcelForm();
195 
196             DataTable dt = new DataTable();
197             for (int i = 0; i < this.datagv.ColumnCount; i++)
198             {
199                 dt.Columns.Add(this.datagv.Columns[i].HeaderText);
200             }
201             DataRow dr;
202             for (int i = 0; i < this.datagv.RowCount; i++)
203             {
204                 dr = dt.NewRow();
205                 for (int j = 0; j < this.datagv.ColumnCount; j++)
206                 {
207                     if (this.datagv.Columns[j].HeaderText == "sqlstring")
208                     {
209                         dr[j] = "";
210                     }
211                     else
212                     {
213                         if (this.datagv.Rows[i].Cells[j].Value == null)
214                         {
215                             dr[j] = "";
216                         }
217                         else
218                         {
219                             dr[j] = this.datagv.Rows[i].Cells[j].Value.ToString();
220                         }
221                     }
222                 }
223                 dt.Rows.Add(dr);
224             }
225             of.mytable = dt;
226             if (of.mytable == null)
227             {
228                 MessageBox.Show("没有导出数据。");
229                 return;
230             }
231             of.savefimename = this.savefilename;
232             of.Show();
233         }
234         /// <summary>
235         /// 弹出导出窗口
236         /// </summary>
237         private void outToAccessByDataSource()
238         {
239             if (this.savefilename.Substring(this.savefilename.LastIndexOf(".")).ToLower() == ".mdb")
240             {
241                 ExportAccessForm of = new ExportAccessForm();
242                 of.mytable = (DataTable)this.datagv.DataSource;
243                 if (of.mytable == null)
244                 {
245                     MessageBox.Show("没有导出数据。");
246                     return;
247                 }
248                 of.savefimename = this.savefilename;
249                 of.Show();
250             }
251             else if (this.savefilename.Substring(this.savefilename.LastIndexOf(".")).ToLower() == ".dbf")
252             {
253                 ExportDBFForm of = new ExportDBFForm();
254                 of.mytable = (DataTable)this.datagv.DataSource;
255                 if (of.mytable == null)
256                 {
257                     MessageBox.Show("没有导出数据。");
258                     return;
259                 }
260                 of.savefimename = this.savefilename;
261                 of.Show();
262             }
263         }
264         /// <summary>
265         /// 弹出导出窗口
266         /// </summary>
267         private void outToAccessByDataTable()
268         {
269             try
270             {
271                 if (this.savefilename.Substring(this.savefilename.LastIndexOf(".")).ToLower() == ".mdb")
272                 {
273                     ExportAccessForm of = new ExportAccessForm();
274                     DataTable dt = new DataTable();
275                     for (int i = 0; i < this.datagv.ColumnCount; i++)
276                     {
277                         dt.Columns.Add(this.datagv.Columns[i].HeaderText);
278                     }
279                     DataRow dr;
280                     for (int i = 0; i < this.datagv.RowCount; i++)
281                     {
282                         dr = dt.NewRow();
283                         for (int j = 0; j < this.datagv.ColumnCount; j++)
284                         {
285                             if (this.datagv.Columns[j].HeaderText == "sqlstring")
286                             {
287                                 dr[j] = "";
288                             }
289                             else
290                             {
291                                 if (this.datagv.Rows[i].Cells[j].Value == null)
292                                 {
293                                     dr[j] = "";
294                                 }
295                                 else
296                                 {
297                                     dr[j] = this.datagv.Rows[i].Cells[j].Value.ToString();
298                                 }
299                             }
300                         }
301                         dt.Rows.Add(dr);
302                     }
303                     of.mytable = dt;
304                     if (of.mytable == null)
305                     {
306                         MessageBox.Show("没有导出数据。");
307                         return;
308                     }
309                     of.savefimename = this.savefilename; 
310                     of.Show();
311                 }
312                 else if (this.savefilename.Substring(this.savefilename.LastIndexOf(".")).ToLower() == ".dbf")
313                 {
314                     ExportDBFForm of = new ExportDBFForm();
315                     DataTable dt = new DataTable();
316                     for (int i = 0; i < this.datagv.ColumnCount; i++)
317                     {
318                         dt.Columns.Add(this.datagv.Columns[i].HeaderText);
319                     }
320                     DataRow dr;
321                     for (int i = 0; i < this.datagv.RowCount; i++)
322                     {
323                         dr = dt.NewRow();
324                         for (int j = 0; j < this.datagv.ColumnCount; j++)
325                         {
326                             if (this.datagv.Columns[j].HeaderText == "sqlstring")
327                             {
328                                 dr[j] = "";
329                             }
330                             else
331                             {
332                                 if (this.datagv.Rows[i].Cells[j].Value == null)
333                                 {
334                                     dr[j] = "";
335                                 }
336                                 else
337                                 {
338                                     dr[j] = this.datagv.Rows[i].Cells[j].Value.ToString();
339                                 }
340                             }
341                         }
342                         dt.Rows.Add(dr);
343                     }
344                     of.mytable = dt;
345                     if (of.mytable == null)
346                     {
347                         MessageBox.Show("没有导出数据。");
348                         return;
349                     }
350                     of.savefimename = this.savefilename;
351                     of.Show();
352                 }
353             }
354             catch
355             {
356 
357             }
358         }
原文地址:https://www.cnblogs.com/luoxiaozhao/p/5255470.html