1. [DllImport("User32.dll", CharSet = CharSet.Auto)]
  2. public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
  3. private void ExportToExcel(string fielName)
  4. {
  5. //实例化一个Excel.Application对象
  6. Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
  7.  
  8. try
  9. {
  10. if (dgv_Result.DataSource == null)
  11. return;
  12. if (dgv_Result.Rows.Count == )
  13. return;
  14.  
  15. //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错
  16. Microsoft.Office.Interop.Excel.Workbook xlBook = excel.Workbooks.Add(true);
  17.  
  18. //1.添加表头
  19. excel.Cells[, ] = tyclass;
  20. for (int i = ; i < dgv_Result.Columns.Count; i++)
  21. {
  22.  
  23. excel.Cells[, i + ] = dgv_Result.Columns[i].Name;
  24. }
  25.  
  26. #region 2.实现Excel多维表头 采用合并单元格的方式
  27. Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.ActiveSheet;
  28. Microsoft.Office.Interop.Excel.Range excelRange = sheet.get_Range(sheet.Cells[, ], sheet.Cells[, ]);
  29. Microsoft.Office.Interop.Excel.Range excelRange1 = sheet.get_Range(sheet.Cells[, ], sheet.Cells[, ]);
  30. Microsoft.Office.Interop.Excel.Range excelRange2 = sheet.get_Range(sheet.Cells[,], sheet.Cells[, ]);
  31. Microsoft.Office.Interop.Excel.Range excelRange3 = sheet.get_Range(sheet.Cells[,], sheet.Cells[, ]);
  32. Microsoft.Office.Interop.Excel.Range excelRange4 = sheet.get_Range(sheet.Cells[, ], sheet.Cells[, ]);
  33. Microsoft.Office.Interop.Excel.Range excelRange5 = sheet.get_Range(sheet.Cells[, ], sheet.Cells[, ]);
  34. Microsoft.Office.Interop.Excel.Range excelRange6 = sheet.get_Range(sheet.Cells[, ], sheet.Cells[,]);
  35. excelRange.Merge(excelRange.MergeCells);
  36. excelRange1.Merge(excelRange1.MergeCells);
  37. excelRange4.Merge(excelRange4.MergeCells);
  38. excelRange2.Merge(excelRange2.MergeCells);
  39. excelRange3.Merge(excelRange3.MergeCells);
  40. excelRange5.Merge(excelRange5.MergeCells);
  41. excelRange6.Merge(excelRange6.MergeCells);
  42. Microsoft.Office.Interop.Excel.Range columnRange = sheet.get_Range("A1", "H2"); //得到 Range 范围 A-H 表示1-8列,1-2表示跨几行
  43. columnRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
  44. columnRange.Font.Size = ;
  45. columnRange.Font.Bold = true;
  46.  
  47. #endregion
  48.  
  49. #region 3.添加行数据,直接给Range赋值可提高效率
  50.  
  51. Microsoft.Office.Interop.Excel.Range range = sheet.get_Range("A3", "H" + (dgv_Result.Rows.Count + ).ToString()); //得到 Range 范围
  52. string[,] AryData = new string[dgv_Result.Rows.Count-, dgv_Result.Columns.Count];
  53. for (int i = ; i < dgv_Result.Rows.Count - ; i++)
  54. {
  55. for (int j = ; j < dgv_Result.Columns.Count; j++)
  56. {
  57.  
  58. AryData[i,j] = dgv_Result.Rows[i].Cells[j].Value.ToString();
  59. }
  60. }
  61. range.Value2 = AryData;
  62. range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
  63. #endregion
  64.  
  65. sheet.Cells.Columns.AutoFit();//设置Excel表格的 列宽
  66. excel.SheetsInNewWorkbook = ;//设置Excel单元格对齐方式
  67. excel.DisplayAlerts = false; //设置禁止弹出保存和覆盖的询问提示框
  68. excel.AlertBeforeOverwriting = false;
  69. //保存excel文件
  70. xlBook.SaveAs(fielName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
  71. MessageBox.Show("导出成功!", "提示");
  72. }
  73. catch (Exception ex)
  74. {
  75. MessageBox.Show(ex.Message, "错误提示");
  76. }
  77. finally
  78. {
  79. IntPtr pt = new IntPtr(excel.Hwnd);
  80. int k = ;
  81. GetWindowThreadProcessId(pt, out k);
  82. System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
  83. p.Kill();
  84.  
  85. }
  86.  
  87. }

c# 高效率导出多维表头excel的更多相关文章

  1. 从DataTable高效率导出数据到Excel

    首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: using Microsoft.Office.I ...

  2. easypoi导出动态表头excel

    easypoi导出动态表头excel 1: springBoot项目maven依赖: <dependency> <groupId>cn.afterturn</groupI ...

  3. (转)DataGridView多维表头及其扩展功能

    dataGridView1.RowHeadersVisible = false;把整行选中那一列去掉.如果需要整行选中,新增一按钮列模拟实现.上源码:多维DataGridView 有个简易的方法: 1 ...

  4. js导出table中的EXCEL总结

    导出EXCEL通常是用PHP做,可是项目中,有时候PHP后端project师返回的数据不是我们想要的,作为前端开发project师,把相应的数据编号转换为文字后,展示给用户.可是.需求要把数据同一时候 ...

  5. SILVERLIGHT 多维表头、复杂表头 MULTIPLE HEADER

    先上图, 众所周知,利用silverlight datagrid展示数据相当方便,但是想要弄出一个漂亮的表头却要费尽周折.此文的目的就是简要介绍一下利用第三方控件 C1.Silverlight.Fle ...

  6. Datagridview 实现二维表头和行合并【转载】

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  7. PHP导出MySQL数据到Excel文件

    PHP导出MySQL数据到Excel文件 转载 常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存 ...

  8. 如何通过DataGridView 实现单元格合并和二维表头

    先看下实现出来的效果(这里随便写了几组数据,用来测试) 先初始一个DataGridView 设置哪几列 DataGridView 里男女这两列的 AutoSizeMode 可以设置Fill. publ ...

  9. 在ASP.NET中将GridView数据导出到Word、Excel

    在ASP.NET中将GridView数据导出到Word.Excel asp.net,导出gridview数据到Word,Excel,PDF   #region Export to Word, Exce ...

随机推荐

  1. MYSQL 5.6中禁用INNODB引擎

    并不是所有人都需要INNODB引擎,虽然它弥补了MYSQL缺乏事务支持的毛病,但是它的磁盘性能一直是让人比较担忧的.另外比较老的PHP系统,大多是采用MYISAM引擎在MYSQL建表,似乎INNODB ...

  2. FBI是如何破获“美国少女”裸照勒索案的

     9月30日消息,据外国媒体报道,美国FBI昨日披露,“美国少女”(Miss Teen USA )卡西迪·伍尔芙(Cassidy Wolf )遭遇黑客通过电脑摄像头偷拍裸照兼敲诈勒索一案的嫌疑人已经被 ...

  3. DataTable的筛选,过滤后绑定数据源的两种方法(DataTable的select和使用linq返回List集合)

    一般数据处理使用DataTable的情况会很多,而我们很多时候会对得到的DataTable的数据进行筛选后绑定到Combobox.GridView.Repeat等控件中,现在分享一下两种DataTab ...

  4. iOS 动画 旋转 移动简单代码

    #import "ViewController.h" @interface ViewController () { UIImageView *imgView; BOOL flag; ...

  5. Unity3D之实现背景的无限重复生成

    在制作flappyBird这个小游戏中(摄像机为Orthographic),为了无限重复生成背景,可以先做好三个背景(我做的有点小),在Gamecontroller上挂一个脚本,如下:      pu ...

  6. javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    原因很简单:因为在js中{}表示一个语句块(代码段),所有加上"()"表示表达式

  7. CSS缩放函数, 旋转函数与倾斜函数

       1 :缩放        scale(x,y)函数让元素根据中心原点对对象进行缩放,大于1进行放大,小于1则缩小,如果为负值,则先进行翻转再进行缩放操作. 实例: HTML: <div c ...

  8. Qt资源下载、安装、配置

    (一)资源下载: 硕士毕业论文要做一个仿真平台,在linux环境下利用Qt开发. 自己有一定的c/c++基础,Qt是零基础接触.所以,经过一番查找,发现youtube一个外国友人Bryan从零开始教Q ...

  9. [Mac]关闭所有打开finder

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Light'} span.Apple-tab-span {white-sp ...

  10. web安全之sql注入原理

    sql注入的原理:        将(恶意)的SQL命令注入到后台数据库引擎执行的能力,把信息返回到页面 sql注入产生的原因:      过滤不严谨,导致产生的sql注入. sql注入产生的地方:  ...