加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c#高效率导出多维表头excel的实例代码

发布时间:2020-12-15 05:57:40 所属栏目:百科 来源:网络整理
导读:复制代码 代码如下: [DllImport("User32.dll",CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID); private void ExportToExcel(string fielName) { //实例化一个Excel.Application对象 Microsoft.Office

复制代码 代码如下:

[DllImport("User32.dll",CharSet = CharSet.Auto)]
        public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);
        private void ExportToExcel(string fielName)
        {
            //实例化一个Excel.Application对象   
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

            try
            {
                if (dgv_Result.DataSource == null)
                    return;
                if (dgv_Result.Rows.Count == 0)
                    return;


                //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错   
                Microsoft.Office.Interop.Excel.Workbook xlBook = excel.Workbooks.Add(true);

                //1.添加表头
                excel.Cells[1,1] = tyclass;
                for (int i = 0; i < dgv_Result.Columns.Count; i++)
                {

                    excel.Cells[2,i + 1] = dgv_Result.Columns[i].Name;
                }


                #region 2.实现Excel多维表头 采用合并单元格的方式
                Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.ActiveSheet;
                Microsoft.Office.Interop.Excel.Range excelRange = sheet.get_Range(sheet.Cells[1,1],sheet.Cells[1,2]);
                Microsoft.Office.Interop.Excel.Range excelRange1 = sheet.get_Range(sheet.Cells[1,3],4]);
                Microsoft.Office.Interop.Excel.Range excelRange2 = sheet.get_Range(sheet.Cells[1,5],6]);
                Microsoft.Office.Interop.Excel.Range excelRange3 = sheet.get_Range(sheet.Cells[1,7],8]);
                Microsoft.Office.Interop.Excel.Range excelRange4 = sheet.get_Range(sheet.Cells[1,2],3]);
                Microsoft.Office.Interop.Excel.Range excelRange5 = sheet.get_Range(sheet.Cells[1,6],7]);
                Microsoft.Office.Interop.Excel.Range excelRange6 = sheet.get_Range(sheet.Cells[1,4],5]);
                excelRange.Merge(excelRange.MergeCells);
                excelRange1.Merge(excelRange1.MergeCells);
                excelRange4.Merge(excelRange4.MergeCells);
                excelRange2.Merge(excelRange2.MergeCells);
                excelRange3.Merge(excelRange3.MergeCells);
                excelRange5.Merge(excelRange5.MergeCells);
                excelRange6.Merge(excelRange6.MergeCells);
                Microsoft.Office.Interop.Excel.Range columnRange = sheet.get_Range("A1","H2");   //得到  Range 范围  A-H 表示1-8列,1-2表示跨几行
                 columnRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
                 columnRange.Font.Size = 10;
                 columnRange.Font.Bold = true;

                #endregion

               
                #region 3.添加行数据,直接给Range赋值可提高效率

                 Microsoft.Office.Interop.Excel.Range range = sheet.get_Range("A3","H" + (dgv_Result.Rows.Count + 2).ToString());   //得到  Range 范围
                string[,] AryData = new string[dgv_Result.Rows.Count-1,dgv_Result.Columns.Count];
                for (int i = 0; i < dgv_Result.Rows.Count - 1; i++)
                {
                    for (int j = 0; j < dgv_Result.Columns.Count; j++)
                    {

                        AryData[i,j] = dgv_Result.Rows[i].Cells[j].Value.ToString();
                    }
                }
                range.Value2 = AryData;
                range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
                #endregion

                sheet.Cells.Columns.AutoFit();//设置Excel表格的  列宽
                excel.SheetsInNewWorkbook = 1;//设置Excel单元格对齐方式
                excel.DisplayAlerts = false; //设置禁止弹出保存和覆盖的询问提示框   
                excel.AlertBeforeOverwriting = false;
                //保存excel文件   
                xlBook.SaveAs(fielName,Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,Type.Missing);
                MessageBox.Show("导出成功!","提示");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message,"错误提示");
            }
            finally
            {
                IntPtr pt = new IntPtr(excel.Hwnd);
                int k = 0;
                GetWindowThreadProcessId(pt,out k);
                System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
                p.Kill();


            }

        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读