zoukankan      html  css  js  c++  java
  • C# 使用Epplus导出Excel [3]:合并列连续相同数据

    C# 使用Epplus导出Excel [1]:导出固定列数据

    C# 使用Epplus导出Excel [2]:导出动态列数据

    C# 使用Epplus导出Excel [3]:合并列连续相同数据

    C# 使用Epplus导出Excel [4]:合并指定行

    C# 使用Epplus导出Excel [5]:样式

    导出的Excel数据,列连续相同的则合并并水平垂直居中

    原始数据

    合并后的数据

    代码如下:

     /// <summary>
            /// 合并列
            /// </summary>
            /// <param name="sheet"></param>
            /// <param name="startRowIndex"></param>
            /// <param name="items"></param>
            /// <param name="propertySelectors"></param>
            /// <param name="compareColIndex">比较的列</param>
            /// <param name="mergeColIndex">合并的列集合</param>
            public static void MergeColCells(ExcelWorksheet sheet, int startRowIndex, IList<Student> items, Func<Student, object>[] propertySelectors, int compareColIndex,List<int> mergeColIndexs)
            {
                Dictionary<int, int> dicMerge = new Dictionary<int, int>();
                var preData = string.Empty;
                int index = 0;
                for (var i = 0; i < items.Count; i++)
                {
                    var currData = propertySelectors[compareColIndex](items[i]);
                    if (string.IsNullOrEmpty(preData) || currData.ToString() != preData)
                    {
                        preData = currData.ToString();
                        dicMerge.Add(i, i);
                        index = i;
                    }
                    else
                    {
                        dicMerge[index] = i;
                    }
    
                    for (var j = 0; j < propertySelectors.Length; j++)
                    {
                        var colData = propertySelectors[j](items[i]);
                        sheet.Cells[i + startRowIndex, j + 1].Value = colData;
                    }
                }
    
                foreach (var item in dicMerge)
                {
                    if (item.Value - item.Key > 0)
                    {
                        for (int i = 0; i < mergeColIndexs.Count; i++)
                        {
                            sheet.Cells[item.Key + startRowIndex, mergeColIndexs[i] + 1, item.Value + startRowIndex, mergeColIndexs[i] + 1].Merge = true;
                            sheet.Cells[item.Key + startRowIndex, mergeColIndexs[i] + 1, item.Value + startRowIndex, mergeColIndexs[i] + 1].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
                            sheet.Cells[item.Key + startRowIndex, mergeColIndexs[i] + 1, item.Value + startRowIndex, mergeColIndexs[i] + 1].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
                        }
                    }
                }
            }
     List<int> mergeColIndexs = new List<int>();
                    mergeColIndexs.Add(0);
                    mergeColIndexs.Add(2);
                    EpplusHelper.MergeColCells(worksheet,2,studentList,columnsValueList.ToArray(),0, mergeColIndexs);
  • 相关阅读:
    Hadoop源代码点滴-自然常数e
    Hadoop点滴-Hadoop的IO
    Hadoop点滴-HDFS文件系统
    Hadoop点滴-HDFS命令行接口
    EasyUI
    EasyUI
    EasyUI
    EasyUI
    EasyUI
    EasyUI
  • 原文地址:https://www.cnblogs.com/jishugaochao/p/10346045.html
Copyright © 2011-2022 走看看