C35; export data to excel file

From , 5 Years ago, written in C#, viewed 213 times.
URL https://pastebin.vip/view/fdc42b6b
  1. /// <summary>
  2.     /// 导出到Excel类,项目需引用Microsodt.Office.Interop.Excel,
  3.     /// 类文件需using System.Data与System.Windows.Forms命名空间
  4.     /// </summary>
  5.     public class CToExcel
  6.     {
  7.         /// <summary>
  8.         /// 导出到Excel
  9.         /// </summary>
  10.         /// <param name="fileName">默认文件名</param>
  11.         /// <param name="listView">数据源,一个页面上的ListView控件</param>
  12.         /// <param name="titleRowCount">标题占据的行数,为0表示无标题</param>
  13.         public void ExportExcel(string fileName, System.Windows.Forms.ListView listView,int titleRowCount)
  14.         {
  15.             string saveFileName = "";
  16.             //bool fileSaved = false;
  17.             SaveFileDialog saveDialog = new SaveFileDialog();
  18.             saveDialog.DefaultExt = "xls";
  19.             saveDialog.Filter = "Excel文件|*.xls";
  20.             saveDialog.FileName = fileName;
  21.             saveDialog.ShowDialog();
  22.             saveFileName = saveDialog.FileName;
  23.             if (saveFileName.IndexOf(":") < 0) return; //被点了取消
  24.             Microsoft.Office.Interop.Excel.Application xlApp;
  25.             try
  26.             {
  27.                 xlApp = new Microsoft.Office.Interop.Excel.Application();
  28.  
  29.             }
  30.             catch (Exception)
  31.             {
  32.                 MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
  33.                 return;
  34.             }
  35.             finally
  36.             {
  37.             }
  38.  
  39.             Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
  40.             Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
  41.             Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
  42.             //写Title
  43.             if(titleRowCount!=0)
  44.                 MergeCells(worksheet, 1, 1, titleRowCount, listView.Columns.Count, listView.Tag.ToString());
  45.  
  46.             //写入列标题
  47.             for (int i = 0; i <= listView.Columns.Count - 1; i++)
  48.             {
  49.                 worksheet.Cells[titleRowCount+1, i + 1] = listView.Columns[i].Text;
  50.  
  51.             }
  52.             //写入数值
  53.             for (int r = 0; r <= listView.Items.Count - 1; r++)
  54.             {
  55.                 for (int i = 0; i <= listView.Columns.Count - 1; i++)
  56.                 {
  57.                     worksheet.Cells[r + titleRowCount+2, i + 1] = listView.Items[r].SubItems[i].Text;
  58.                 }
  59.                 System.Windows.Forms.Application.DoEvents();
  60.             }
  61.  
  62.             worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
  63.             //if (Microsoft.Office.Interop.cmbxType.Text != "Notification")
  64.             //{
  65.             //    Excel.Range rg = worksheet.get_Range(worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]);
  66.             //    rg.NumberFormat = "00000000";
  67.             //}
  68.  
  69.             if (saveFileName != "")
  70.             {
  71.                 try
  72.                 {
  73.                     workbook.Saved = true;
  74.                     workbook.SaveCopyAs(saveFileName);
  75.                     //fileSaved = true;
  76.                 }
  77.                 catch (Exception ex)
  78.                 {
  79.                     //fileSaved = false;
  80.                     MessageBox.Show("导出文件时出错,文件可能正被打开!n" + ex.Message);
  81.                 }
  82.  
  83.             }
  84.             //else
  85.             //{
  86.             //    fileSaved = false;
  87.             //}
  88.             xlApp.Quit();
  89.             GC.Collect();//强行销毁
  90.             // if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
  91.             MessageBox.Show(fileName + "导出到Excel成功", "提示", MessageBoxButtons.OK);
  92.         }
  93.         /// <summary>
  94.         /// DataTable导出到Excel
  95.         /// </summary>
  96.         /// <param name="fileName">默认的文件名</param>
  97.         /// <param name="dataTable">数据源,一个DataTable数据表</param>
  98.         /// <param name="titleRowCount">标题占据的行数,为0则表示无标题</param>
  99.         public void ExportExcel(string fileName,System.Data.DataTable dataTable,int titleRowCount)
  100.         {
  101.             string saveFileName = "";
  102.             //bool fileSaved = false;
  103.             SaveFileDialog saveDialog = new SaveFileDialog();
  104.             saveDialog.DefaultExt = "xls";
  105.             saveDialog.Filter = "Excel文件|*.xls";
  106.             saveDialog.FileName = fileName;
  107.             saveDialog.ShowDialog();
  108.             saveFileName = saveDialog.FileName;
  109.             if (saveFileName.IndexOf(":") < 0) return; //被点了取消
  110.             Microsoft.Office.Interop.Excel.Application xlApp;
  111.             try
  112.             {
  113.                 xlApp = new Microsoft.Office.Interop.Excel.Application();
  114.  
  115.             }
  116.             catch (Exception)
  117.             {
  118.                 MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
  119.                 return;
  120.             }
  121.             finally
  122.             {
  123.             }
  124.  
  125.             Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
  126.             Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
  127.             Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
  128.             //写Title
  129.             if(titleRowCount!=0)
  130.                 MergeCells(worksheet, 1, 1, titleRowCount, dataTable.Columns.Count, dataTable.TableName);
  131.  
  132.             //写入列标题
  133.             for (int i = 0; i <= dataTable.Columns.Count - 1; i++)
  134.             {
  135.                 worksheet.Cells[titleRowCount+1, i + 1] = dataTable.Columns[i].ColumnName;
  136.  
  137.             }
  138.             //写入数值
  139.             for (int r = 0; r <= dataTable.Rows.Count - 1; r++)
  140.             {
  141.                 for (int i = 0; i <= dataTable.Columns.Count - 1; i++)
  142.                 {
  143.                     worksheet.Cells[r +titleRowCount+ 2, i + 1] = dataTable.Rows[r][i].ToString();
  144.                 }
  145.                 System.Windows.Forms.Application.DoEvents();
  146.             }
  147.  
  148.             worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
  149.             //if (Microsoft.Office.Interop.cmbxType.Text != "Notification")
  150.             //{
  151.             //    Excel.Range rg = worksheet.get_Range(worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]);
  152.             //    rg.NumberFormat = "00000000";
  153.             //}
  154.  
  155.             if (saveFileName != "")
  156.             {
  157.                 try
  158.                 {
  159.                     workbook.Saved = true;
  160.                     workbook.SaveCopyAs(saveFileName);
  161.                     //fileSaved = true;
  162.                 }
  163.                 catch (Exception ex)
  164.                 {
  165.                     //fileSaved = false;
  166.                     MessageBox.Show("导出文件时出错,文件可能正被打开!n" + ex.Message);
  167.                 }
  168.  
  169.             }
  170.             //else
  171.             //{
  172.             //    fileSaved = false;
  173.             //}
  174.             xlApp.Quit();
  175.             GC.Collect();//强行销毁
  176.             // if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
  177.             MessageBox.Show(fileName + "导出到Excel成功", "提示", MessageBoxButtons.OK);
  178.         }
  179.         /// <summary>  
  180.         /// 合并单元格,并赋值,对指定WorkSheet操作  
  181.         /// </summary>  
  182.         /// <param name="sheetIndex">WorkSheet索引</param>  
  183.         /// <param name="beginRowIndex">开始行索引</param>  
  184.         /// <param name="beginColumnIndex">开始列索引</param>  
  185.         /// <param name="endRowIndex">结束行索引</param>  
  186.         /// <param name="endColumnIndex">结束列索引</param>  
  187.         /// <param name="text">合并后Range的值</param>  
  188.         public void MergeCells(Microsoft.Office.Interop.Excel.Worksheet workSheet, int beginRowIndex, int beginColumnIndex, int endRowIndex, int endColumnIndex, string text)
  189.         {
  190.             Microsoft.Office.Interop.Excel.Range range = workSheet.get_Range(workSheet.Cells[beginRowIndex, beginColumnIndex], workSheet.Cells[endRowIndex, endColumnIndex]);
  191.  
  192.             range.ClearContents();  //先把Range内容清除,合并才不会出错  
  193.             range.MergeCells = true;
  194.             range.Value2 = text;
  195.             range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
  196.             range.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
  197.         }
  198.     }
  199. //csharp/6778

Reply to "C35; export data to excel file"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website