C# DataGridView导出Excel,设置单元格合并,隐藏行

不得不承认,做程序需要研究。

DataGridView导出Excel的源码

using System.Windows.Forms;
using System.Collections.Generic;
using System;
using Microsoft.Office.Interop.Excel;
public class CommanPrint
{
    /// <summary>
    /// 导出Excel

    /// 版权所有 : 天山寒雪 QQ:757015000 MSN: [email protected]

    /// </summary>
    /// <param name="mydgv">控件 DataGridView </param>
    /// <param name="dic">中英文对照的标题 </param>
    public static void ExportTasks(DataGridView mydgv, Dictionary<string, string> dic)
    {
        // 定义要使用的Excel 组件接口
        // 定义Application 对象,此对象表示整个Excel 程序
        Microsoft.Office.Interop.Excel.Application excelApp = null;
        // 定义Workbook对象,此对象代表工作薄
        Microsoft.Office.Interop.Excel.Workbook workBook;
        // 定义Worksheet 对象,此对象表示Execel 中的一张工作表
        Microsoft.Office.Interop.Excel.Worksheet ws = null;
        //定义Range对象,此对象代表单元格区域
        Microsoft.Office.Interop.Excel.Range range;

       // Microsoft.Office.Interop.Excel.c

        int dcell = 1;
        int rowindex = 0; int colindex = 0;

        int rowcount = mydgv.Rows.Count;
        int colcount = mydgv.Columns.Count;
        int dispcolcount = dic.Count;
        try
        {
            //初始化 Application 对象 excelApp
            excelApp = new Microsoft.Office.Interop.Excel.Application();
            //在工作薄的第一个工作表上创建任务列表
            workBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
            ws = (Worksheet)workBook.Worksheets[1];

            // 命名工作表的名称为
            ws.Name = "Sheet1";
            //创建缓存
            Object[,] objdata = new object[rowcount + 2, colcount];
            //创建标题
            foreach (string s in dic.Keys)
            {
                objdata[rowindex, colindex++] = dic[s].ToString();
            }
                //创建缓存
            //Object[,] objdata1 = new object[rowcount + 1, colcount];
            //创建标题
            colindex = 0;
            foreach (string s in dic.Keys)
            {
                objdata[1, colindex++] = s;
            }
            //获取数据
            for (int i = 0; i < rowcount; i++)
            {
                dcell = 0;
                foreach (string ss in dic.Keys)
                {
                    for (int j = 0; j < colcount; j++)
                    {
                        if (mydgv.Columns[j].Name == ss)
                        {
                            objdata[i + 2, dcell++] = mydgv.Rows[i].Cells[j].FormattedValue.ToString(); //得到样式之后的值
                        }
                    }
                }
            }
            //设置表头
           
            range = ws.get_Range("A1", "A2");           
            range.Merge(false);
            range.Value2 = "客户名称";
            range = ws.get_Range(excelApp.Cells[1, 2], excelApp.Cells[1, 3]);
            range.Merge(true);
            range.Value2 = "合计";
            range.HorizontalAlignment = Constants.xlCenter;
            range = ws.get_Range("D1","D2");
            range.Merge(false);
            range.Value2 = "单位";
            //写入Excel       
            range = ws.get_Range(excelApp.Cells[3, 1], excelApp.Cells[rowcount+1, dispcolcount]);
            range.Value2 = objdata;        
            System.Windows.Forms.Application.DoEvents();
            //设置格式
            excelApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlLeft; //全局左对齐
            excelApp.Cells.EntireColumn.AutoFit();
            range = ws.get_Range(excelApp.Cells[1, 1], excelApp.Cells[2, colcount]);           
            range.Font.Bold = true; //标题粗体
            //excelApp.Rows[2].Hidden = true;
            range = ws.get_Range(excelApp.Cells[3, 1], excelApp.Cells[3, colcount]);
            range.EntireRow.Hidden = true;
            //range.Merge(true);
            //range.Value2 = "wwww";
            range = ws.get_Range(excelApp.Cells[1, 2], excelApp.Cells[1, 3]);
            range.HorizontalAlignment = Constants.xlCenter;
            //显示 Excel
            excelApp.Visible = true;
            //range.Hidden = true;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

这里使用的是天山寒雪的源码,保留原信息,并致以感谢。

我从他的源码的基础上加上了关于多表头的设置和行的隐藏,在多表的设置中需要用到单元格合并。

            range = ws.get_Range("A1", "A2");           
            range.Merge(false);
            range.Value2 = "客户名称";

选择A1和A2两个单位格,合并,设值。属于上下合并


            range = ws.get_Range(excelApp.Cells[1, 2], excelApp.Cells[1, 3]);
            range.Merge(true);
            range.Value2 = "合计";

选择第一行第二个和第一行第三个单元格,合并,赋值,左右合并。

隐藏row

 range = ws.get_Range(excelApp.Cells[3, 1], excelApp.Cells[3, colcount]);
            range.EntireRow.Hidden = true;
选中部分单元格,把选中的单元格所在的行的Hidden属性设为true。

完成。

猜你喜欢

转载自blog.csdn.net/fqlove/article/details/4375243
今日推荐