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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM