C#批量导入Excel或WPS实现方法

时间:2024-03-10 07:54:35

批量导入导出Excel,WPS,TXT,可按照系统是否安装OFFICE、WPS情况选择,导出是自动选择。

上效果图

  1       /// <summary>
  2         /// //获得当前你选择的Excel Sheet的所有名字
  3         /// </summary>
  4         /// <param name="filePath">文件路径</param>
  5         /// <param name="ExcelType">1 Microsoft Excel 2 WPS Excel</param>
  6         /// <returns></returns>
  7         public static string[] GetExcelSheetNames(string filePath, int ExcelType)
  8         {
  9             try
 10             {
 11                 if (ExcelType == 1)
 12                 {
 13                     Microsoft.Office.Interop.Excel.ApplicationClass excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
 14                     Microsoft.Office.Interop.Excel.Workbooks wbs = excelApp.Workbooks;
 15                     Microsoft.Office.Interop.Excel.Workbook wb = wbs.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
 16                     Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
 17                     Type.Missing, Type.Missing, Type.Missing, Type.Missing);
 18                     int count = wb.Worksheets.Count;
 19                     string[] names = new string[count];
 20                     for (int i = 1; i <= count; i++)
 21                     {
 22                         names[i - 1] = ((Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[i]).Name;
 23                     }
 24                     return names;
 25                 }
 26                 else
 27                 {
 28                     ET.Application etApp;
 29                     ET.workbook etbook;
 30                     etApp = new ET.Application();
 31                     etbook = new ET.workbook();
 32                     etbook = (ET.workbook)etApp.Workbooks.Open(filePath, null, null, null, null, null, null, null, null, null, null, null, null);
 33                     int count = etbook.Worksheets.Count;
 34                     string[] names = new string[count];
 35                     for (int i = 1; i <= count; i++)
 36                     {
 37                         names[i - 1] = ((ET.Worksheet)etbook.Worksheets[i]).Name;
 38                     }
 39                     return names;
 40                 }
 41             }
 42             catch
 43             {
 44                 return null;
 45             }
 46         }
 47 
 48         //引用命名空间   using Microsoft.Office.Interop.Excel;WPS的ET
 49         /// <summary>
 50         /// DataGridView导出文件到Microsoft Excel WPS Excel 文本文档
 51         /// </summary>
 52         /// <param name="gridView"></param>
 53         /// <param name="excludeColumnsIndexList">排除列"0,1,2"</param>
 54         /// <param name="fileName"></param>
 55         /// <param name="sheetName"></param>
 56         public static void ExportDataGridViewAsExcel(DataGridView gridView, string excludeColumnsIndexList,string fileName, string sheetName)
 57         {
 58             //导出到execl   
 59             try
 60             {
 61                 SaveFileDialog saveFileDialog = new SaveFileDialog();
 62                 saveFileDialog.Filter = "Microsoft Excel(*.xls)|*.xls|WPS Excel(*.xls)|*.xls|文本文档(*.txt)|*.txt";
 63                 saveFileDialog.FileName = fileName; //dataGridView1.Rows[0].Cells[0].Value.ToString() + "幸运榜单_" + DateTime.Now.ToString("yyyymmddhhmmss") + "";
 64                 saveFileDialog.FilterIndex = 0;
 65                 saveFileDialog.RestoreDirectory = true;
 66                 saveFileDialog.CreatePrompt = true;
 67                 saveFileDialog.Title = "导出文件保存为";
 68                 // saveFileDialog.ShowDialog();
 69                 if (saveFileDialog.ShowDialog() == DialogResult.OK)
 70                 {
 71                     string strName = saveFileDialog.FileName;
 72                     if (strName.Length != 0)
 73                     {
 74                         int rowscount = gridView.Rows.Count;
 75                         int colscount = gridView.Columns.Count;
 76                         if (rowscount <= 0)
 77                         {
 78                             MessageBox.Show("无数据需要保存 ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
 79                             return;
 80                         }
 81                         if (colscount <= 0)
 82                         {
 83                             MessageBox.Show("无数据需要保存 ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
 84                             return;
 85                         }
 86                         if (saveFileDialog.FilterIndex == 1)
 87                         {
 88                             if (rowscount > 65536)
 89                             {
 90                                 MessageBox.Show("行太多(最大限制为 65536行),不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
 91                                 return;
 92                             }
 93                             if (colscount > 255)
 94                             {
 95                                 MessageBox.Show("列太多(最大限制为 255列), 不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
 96                                 return;
 97                             }
 98                             try
 99                             {
100                                 //this.toolStripProgressBar1.Visible = true;
101                                 System.Reflection.Missing miss = System.Reflection.Missing.Value;
102                                 Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
103                                 excel.Application.Workbooks.Add(true); ;
104                                 excel.Visible = false;//若是true,则在导出的时候会显示EXcel界面。
105                                 if (excel == null)
106                                 {
107                                     MessageBox.Show("Microsoft Excel无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
108                                     return;
109                                 }
110                                 Microsoft.Office.Interop.Excel.Workbooks books = (Microsoft.Office.Interop.Excel.Workbooks)excel.Workbooks;
111                                 Microsoft.Office.Interop.Excel.Workbook book = (Microsoft.Office.Interop.Excel.Workbook)(books.Add(miss));
112                                 Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
113                                 sheet.Name = sheetName;
114                                 string[,] datas = new string[rowscount + 1, colscount];
115                                 int m = 0, n = 0;
116                                 //生成列名称   这里i是从1开始的 因为我第0列是个隐藏列ID  没必要写进去
117                                 for (int i = 0; i < gridView.ColumnCount; i++)
118                                 {
119                                     if (("," + excludeColumnsIndexList + ",").IndexOf("," + i.ToString() + ",") == 0)
120                                     {
121                                         continue;
122                                     }
123                                     if (gridView.Columns[i].Visible)
124                                     {
125                                         datas[0, m] = gridView.Columns[i].HeaderText.ToString();
126                                         m++;
127                                     }
128                                     
129                                 }
130                                 //填充数据
131                                 for (int i = 0; i < gridView.RowCount; i++)
132                                 {
133                                     //j也是从1开始  原因如上  每个人需求不一样
134                                     n = 0;
135                                     for (int j = 0; j < gridView.ColumnCount; j++)
136                                     {
137                                         if (("," + excludeColumnsIndexList + ",").IndexOf("," + j.ToString() + ",") == 0)
138                                         {
139                                             continue;
140                                         }
141                                         if (gridView.Columns[j].Visible)
142                                         {
143                                             if (gridView[j, i].Value.GetType() == typeof(string))
144                                             {
145                                                 datas[i+1, n] = "\'" + gridView[j, i].Value.ToString();
146                                             }
147                                             else
148                                             {
149                                                 datas[i+1, n] = gridView[j, i].Value.ToString();
150                                             }
151                                             n++;
152                                         }
153                                     }
154                                     //this.toolStripProgressBar1.Value += 100 / gridView.RowCount;
155                                 }
156                                 int exportRowCount = rowscount + 1;
157                                 Microsoft.Office.Interop.Excel.Range range = sheet.get_Range("A1", IndexToColumn(colscount) + exportRowCount.ToString());
158                                 range.Value2 = datas;
159 
160                                 sheet.Columns.EntireColumn.AutoFit(); // Automatically change the column width
161 
162                                 book.SaveAs(strName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, miss, miss, miss,
163                                         miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, miss, miss, miss,
164                                         miss, miss);
165                                 //sheet.SaveAs(strName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
166                                 book.Close(false, miss, miss);
167                                 books.Close();
168                                 excel.Quit();
169                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
170                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
171                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
172                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
173 
174                                 GC.Collect();
175                             }
176                             catch (Exception ex)
177                             {
178                                 MessageBox.Show(ex.Message, "导出失败,\n1、如果未安装Microsoft Excel,请导出时尝试选择保存到WPS Excel或者文本文档!\n2、请确保导出到的目标文件未打开,否则程序占用可能导致失败。\n3、如已关闭还提示错误,请尝试在任务管理器结束Excel程序。");
179                                 return;
180                             }
181 
182                         }
183                         else if (saveFileDialog.FilterIndex == 2)
184                         {
185                             if (rowscount > 65536)
186                             {
187                                 MessageBox.Show("行太多(最大限制为 65536行),不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
188                                 return;
189                             }
190                             if (colscount > 255)
191                             {
192                                 MessageBox.Show("列太多(最大限制为 255列), 不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
193                                 return;
194                             }
195                             try
196                             {
197                                 ET.Application etApp;
198                                 //获取工作表表格
199                                 etApp = new ET.Application();
200                                 etApp.Workbooks.Add(Type.Missing);
201                                 etApp.Visible = false;
202                                 if (etApp == null)
203                                 {
204                                     MessageBox.Show("WPS Excel无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
205                                     return;
206                                 }
207                                 System.Reflection.Missing miss = System.Reflection.Missing.Value;
208                                 ET.Workbooks books = (ET.Workbooks)etApp.Workbooks;
209                                 ET.workbook book = (ET.workbook)(books.Add(miss));
210                                 ET.Worksheet sheet = (ET.Worksheet)book.ActiveSheet;
211                                 sheet.Name = sheetName;
212                                 string[,] datas = new string[rowscount + 1, colscount];
213                                 int m = 0, n = 0;
214                                 //生成列名称   这里i是从1开始的 因为我第0列是个隐藏列ID  没必要写进去
215                                 for (int i = 0; i < gridView.ColumnCount; i++)
216                                 {
217                                     if (("," + excludeColumnsIndexList + ",").IndexOf("," + i.ToString() + ",") == 0)
218                                     {
219                                         continue;
220                                     }
221                                     if (gridView.Columns[i].Visible)
222                                     {
223                                         datas[0, m] = gridView.Columns[i].HeaderText.ToString();
224                                         m++;
225                                     }
226 
227                                 }
228                                 //填充数据
229                                 for (int i = 0; i < gridView.RowCount; i++)
230                                 {
231                                     //j也是从1开始  原因如上  每个人需求不一样
232                                     n = 0;
233                                     for (int j = 0; j < gridView.ColumnCount; j++)
234                                     {
235                                         if (("," + excludeColumnsIndexList + ",").IndexOf("," + j.ToString() + ",") == 0)
236                                         {
237                                             continue;
238                                         }
239                                         if (gridView.Columns[j].Visible)
240                                         {
241                                             if (gridView[j, i].Value.GetType() == typeof(string))
242                                             {
243                                                 datas[i + 1, n] = "\'" + gridView[j, i].Value.ToString();
244                                             }
245                                             else
246                                             {
247                                                 datas[i + 1, n] = gridView[j, i].Value.ToString();
248                                             }
249                                             n++;
250                                         }
251                                     }
252                                     //this.toolStripProgressBar1.Value += 100 / gridView.RowCount;
253                                 }
254                                 int exportRowCount = rowscount + 1;
255                                 ET.Range range = sheet.get_Range("A1", IndexToColumn(colscount) + exportRowCount.ToString());
256                                 range.Value2 = datas;
257                                 sheet.Columns.EntireColumn.AutoFit(); // Automatically change the column width
258                                 book.SaveAs(strName, ET.XlFileFormat.xlWorkbookNormal, miss, miss, miss, miss, ET.ETSaveAsAccessMode.etShared, miss, miss, miss, miss);
259                                 book.Close(false, miss, miss);
260                                 books.Close();
261                                 etApp.Quit();
262                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
263                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
264                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
265                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(etApp);
266 
267                                 GC.Collect();
268                             }
269                             catch (Exception ex)
270                             {
271                                 MessageBox.Show("导出失败,\n1、如果未安装WPS Excel,请导出时尝试选择保存到Microsoft Excel或者文本文档!\n2、请确保导出到的目标文件未打开,否则程序占用可能导致失败。\n3、如已关闭还提示错误,请尝试在任务管理器结束Excel程序。\n系统消息:" + ex.Message, "错误提示");
272                                 return;
273                             }
274 
275                         }
276                         else if (saveFileDialog.FilterIndex == 3)
277                         {
278 
279 
280                             FileStream fs = new FileStream(strName, FileMode.OpenOrCreate, FileAccess.Write);
281                             StreamWriter sw = new StreamWriter(fs);
282                             sw.BaseStream.Seek(0, SeekOrigin.End);
283                             string str = "";
284                             int n = 0;
285                             for (int i = 0; i < gridView.ColumnCount; i++)
286                             {
287                                 if (gridView.Columns[i].Visible)
288                                 {
289                                     n++;
290                                     if (n == 1)
291                                     {
292                                         str += gridView.Columns[i].HeaderText.ToString();
293                                     }
294                                     else
295                                     {
296                                         str += "," + gridView.Columns[i].HeaderText.ToString();
297                                     }
298                                 }
299                             }
300                             sw.WriteLine(str);
301 
302                             //填充数据
303                             for (int i = 0; i < gridView.RowCount; i++)
304                             {
305                                 str = "";
306                                 int m = 0;
307                                 //j也是从1开始  原因如上  每个人需求不一样
308                                 for (int j = 0; j < gridView.ColumnCount; j++)
309                                 {
310                                     if (gridView.Columns[j].Visible)
311                                     {
312                                         m++;
313                                         if (m == 1)
314                                         {
315                                             str += gridView[j, i].Value.ToString();
316                                         }
317                                         else
318                                         {
319                                             str += "," + gridView[j, i].Value.ToString();
320                                         }
321                                     }
322 
323                                 }
324                                 sw.WriteLine(str);
325                                 //this.toolStripProgressBar1.Value += 100 / gridView.RowCount;
326                             }
327 
328                             sw.Flush();
329                             sw.Close();
330                             fs.Close();
331 
332 
333                         }
334                         MessageBox.Show("数据已经成功导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
335                         return;
336                         //this.toolStripProgressBar1.Value = 0;
337 
338                         //System.Diagnostics.Process.Start(strName);
339                     }
340                 }
341             }
342             catch (Exception ex)
343             {
344                 MessageBox.Show("导出失败,\n1、如果未安装Microsoft Excel或者WPS Excel,请导出时尝试选择保存到文本文档!\n2、请确保导出到的目标文件未打开,否则程序占用可能导致失败。\n3、如已关闭还提示错误,请尝试在任务管理器结束Excel程序。\n系统消息:" + ex.Message, "错误提示");
345                 return;
346             }
347         }
348         //引用命名空间   using Microsoft.Office.Interop.Excel;WPS的ET
349         /// <summary>
350         /// DataTable导出文件到Microsoft Excel WPS Excel 文本文档
351         /// </summary>
352         /// <param name="dt"></param>
353         /// <param name="fileName"></param>
354         /// <param name="sheetName"></param>
355         public static void ExportDataTableAsExcel(System.Data.DataTable dt, string fileName, string sheetName)
356         {
357             //导出到execl   
358             try
359             {
360                 SaveFileDialog saveFileDialog = new SaveFileDialog();
361                 saveFileDialog.Filter = "Microsoft Excel(*.xls)|*.xls|WPS Excel(*.xls)|*.xls|文本文档(*.txt)|*.txt";
362                 saveFileDialog.FileName = fileName; //dataGridView1.Rows[0].Cells[0].Value.ToString() + "幸运榜单_" + DateTime.Now.ToString("yyyymmddhhmmss") + "";
363                 saveFileDialog.FilterIndex = 0;
364                 saveFileDialog.RestoreDirectory = true;
365                 saveFileDialog.CreatePrompt = true;
366                 saveFileDialog.Title = "导出文件保存为";
367                 // saveFileDialog.ShowDialog();
368                 if (saveFileDialog.ShowDialog() == DialogResult.OK)
369                 {
370                     string strName = saveFileDialog.FileName;
371                     if (strName.Length != 0)
372                     {
373                         int rowscount = dt.Rows.Count;
374                         int colscount = dt.Columns.Count;
375                         if (rowscount <= 0)
376                         {
377                             MessageBox.Show("无数据需要保存 ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
378                             return;
379                         }
380 
381                         if (colscount <= 0)
382                         {
383                             MessageBox.Show("无数据需要保存 ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
384                             return;
385                         }
386                         if (saveFileDialog.FilterIndex == 1)
387                         {
388 
389                             if (rowscount > 65536)
390                             {
391                                 MessageBox.Show("行太多(最大限制为 65536行),不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
392                                 return;
393                             }
394                             if (colscount > 255)
395                             {
396                                 MessageBox.Show("列太多(最大限制为 255列), 不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
397                                 return;
398                             }
399                             try
400                             {
401 
402                                 //this.toolStripProgressBar1.Visible = true;
403                                 System.Reflection.Missing miss = System.Reflection.Missing.Value;
404                                 Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
405                                 excel.Application.Workbooks.Add(true); ;
406                                 excel.Visible = false;//若是true,则在导出的时候会显示EXcel界面。
407                                 if (excel == null)
408                                 {
409                                     MessageBox.Show("Microsoft Excel无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
410                                     return;
411                                 }
412                                 Microsoft.Office.Interop.Excel.Workbooks books = (Microsoft.Office.Interop.Excel.Workbooks)excel.Workbooks;
413                                 Microsoft.Office.Interop.Excel.Workbook book = (Microsoft.Office.Interop.Excel.Workbook)(books.Add(miss));
414                                 Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
415                                 sheet.Name = sheetName;
416 
417                                 string[,] datas = new string[rowscount + 1, colscount];
418                                 //生成列名称   这里i是从1开始的 因为我第0列是个隐藏列ID  没必要写进去
419                                 for (int i = 0; i < dt.Columns.Count; i++)
420                                 {
421                                     datas[0, i] = dt.Columns[i].ColumnName.Trim();
422                                 }
423 
424                                 //填充数据
425                                 for (int i = 0; i < dt.Rows.Count; i++)
426                                 {
427                                     //j也是从1开始  原因如上  每个人需求不一样
428                                     for (int j = 0; j < dt.Columns.Count; j++)
429                                     {
430 
431                                         if (dt.Rows[i][j].GetType() == typeof(string))
432                                         {
433                                             datas[i + 1, j] = "\'" + dt.Rows[i][j].ToString();
434                                         }
435                                         else
436                                         {
437                                             datas[i + 1, j] = dt.Rows[i][j].ToString();
438                                         }
439 
440 
441                                     }
442                                     //this.toolStripProgressBar1.Value += 100 / gridView.RowCount;
443                                 }
444                                 int exportRowCount = rowscount + 1;
445                                 Microsoft.Office.Interop.Excel.Range range = sheet.get_Range("A1", IndexToColumn(colscount) + exportRowCount.ToString());
446                                 range.Value2 = datas;
447 
448                                 sheet.Columns.EntireColumn.AutoFit(); // Automatically change the column width
449 
450                                 book.SaveAs(strName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, miss, miss, miss,
451                                         miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, miss, miss, miss,
452                                         miss, miss);
453 
454                                 //sheet.SaveAs(strName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
455                                 book.Close(false, miss, miss);
456                                 books.Close();
457                                 excel.Quit();
458                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
459                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
460                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
461                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
462 
463                                 GC.Collect();
464                             }
465                             catch (Exception ex)
466                             {
467                                 MessageBox.Show("导出失败,\n1、如果未安装Microsoft Excel,请导出时尝试选择保存到WPS Excel或者文本文档!\n2、请确保导出到的目标文件未打开,否则程序占用可能导致失败。\n3、如已关闭还提示错误,请尝试在任务管理器结束Excel程序。\n系统消息:" + ex.Message, "错误提示");
468                                 return;
469                             }
470                         }
471                         if (saveFileDialog.FilterIndex == 2)
472                         {
473 
474                             if (rowscount > 65536)
475                             {
476                                 MessageBox.Show("行太多(最大限制为 65536行),不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
477                                 return;
478                             }
479                             if (colscount > 255)
480                             {
481                                 MessageBox.Show("列太多(最大限制为 255列), 不能保存! ", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
482                                 return;
483                             }
484                             try
485                             {
486                                 ET.Application etApp;
487                                 //获取工作表表格
488                                 etApp = new ET.Application();
489                                 etApp.Workbooks.Add(Type.Missing);
490                                 etApp.Visible = false;
491                                 if (etApp == null)
492                                 {
493                                     MessageBox.Show("WPS Excel无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
494                                     return;
495                                 }
496                                 System.Reflection.Missing miss = System.Reflection.Missing.Value;
497                                 ET.Workbooks books = (ET.Workbooks)etApp.Workbooks;
498                                 ET.workbook book = (ET.workbook)(books.Add(miss));
499                                 ET.Worksheet sheet = (ET.Worksheet)book.ActiveSheet;
500                                 sheet.Name = sheetName;
501 
502                                 string[,] datas = new string[rowscount + 1, colscount];
503                                 //生成列名称   这里i是从1开始的 因为我第0列是个隐藏列ID  没必要写进去
504                                 for (int i = 0; i < dt.Columns.Count; i++)
505                                 {
506                                     datas[0, i] = dt.Columns[i].ColumnName.Trim();
507                                 }
508 
509                                 //填充数据
510                                 for (int i = 0; i < dt.Rows.Count; i++)
511                                 {
512                                     //j也是从1开始  原因如上  每个人需求不一样
513                                     for (int j = 0; j < dt.Columns.Count; j++)
514                                     {
515 
516                                         if (dt.Rows[i][j].GetType() == typeof(string))
517                                         {
518                                             datas[i + 1, j] = "\'" + dt.Rows[i][j].ToString();
519                                         }
520                                         else
521                                         {
522                                             datas[i + 1, j] = dt.Rows[i][j].ToString();
523                                         }
524                                     }
525                                     //this.toolStripProgressBar1.Value += 100 / gridView.RowCount;
526                                 }
527                                 int exportRowCount = rowscount + 1;
528                                 ET.Range range = sheet.get_Range("A1", IndexToColumn(colscount) + exportRowCount.ToString());
529                                 range.Value2 = datas;
530                                 sheet.Columns.EntireColumn.AutoFit(); // Automatically change the column width
531                                 book.SaveAs(strName, ET.XlFileFormat.xlWorkbookNormal, miss, miss, miss, miss, ET.ETSaveAsAccessMode.etShared, miss, miss, miss, miss);
532                                 book.Close(false, miss, miss);
533                                 books.Close();
534                                 etApp.Quit();
535                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
536                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
537                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
538                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(etApp);
539 
540                                 GC.Collect();
541                             }
542                             catch (Exception ex)
543                             {
544                                 MessageBox.Show("导出失败,\n1、如果未安装WPS Excel,请导出时尝试选择保存到Microsoft Excel或者文本文档!\n2、请确保导出到的目标文件未打开,否则程序占用可能导致失败。\n3、如已关闭还提示错误,请尝试在任务管理器结束Excel程序。\n系统消息:" + ex.Message, "错误提示");
545                                 return;
546                             }
547                         }
548                         else if (saveFileDialog.FilterIndex == 2)
549                         {
550 
551 
552                             FileStream fs = new FileStream(strName, FileMode.OpenOrCreate, FileAccess.Write);
553                             StreamWriter sw = new StreamWriter(fs);
554                             sw.BaseStream.Seek(0, SeekOrigin.End);
555                             string str = "";
556                             for (int i = 0; i < dt.Columns.Count; i++)
557                             {
558                                 if (i == 0)
559                                 {
560                                     str += dt.Columns[i].ColumnName.Trim();
561                                 }
562                                 else
563                                 {
564                                     str += "," + dt.Columns[i].ColumnName.Trim();
565                                 }
566                             }
567                             sw.WriteLine(str);
568 
569                             //填充数据
570                             for (int i = 0; i < dt.Rows.Count; i++)
571                             {
572                                 str = "";
573                                 //j也是从1开始  原因如上  每个人需求不一样
574                                 for (int j = 0; j < dt.Columns.Count; j++)
575                                 {
576                                     if (j == 0)
577                                     {
578                                         str += dt.Rows[i][j].ToString();
579                                     }
580                                     else
581                                     {
582                                         str += "," + dt.Rows[i][j].ToString();
583                                     }
584 
585                                 }
586                                 sw.WriteLine(str);
587                                 //this.toolStripProgressBar1.Value += 100 / gridView.RowCount;
588                             }
589 
590                             sw.Flush();
591                             sw.Close();
592                             fs.Close();
593 
594 
595                         }
596                         MessageBox.Show("数据已经成功导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
597                         //this.toolStripProgressBar1.Value = 0;
598 
599                         //System.Diagnostics.Process.Start(strName);
600                     }
601                 }
602             }
603             catch (Exception ex)
604             {
605                 MessageBox.Show(ex.Message, "导出失败,\n1、如果未安装Microsoft Excel或者WPS Excel,请导出时尝试选择保存到文本文档!\n2、请确保导出到的目标文件未打开,否则程序占用可能导致失败。\n3、如已关闭还提示错误,请尝试在任务管理器结束Excel程序。");
606             }
607         }