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 = ;
for (var i = ; 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 = ; j < propertySelectors.Length; j++)
{
var colData = propertySelectors[j](items[i]);
sheet.Cells[i + startRowIndex, j + ].Value = colData;
}
} foreach (var item in dicMerge)
{
if (item.Value - item.Key > )
{
for (int i = ; i < mergeColIndexs.Count; i++)
{
sheet.Cells[item.Key + startRowIndex, mergeColIndexs[i] + , item.Value + startRowIndex, mergeColIndexs[i] + ].Merge = true;
sheet.Cells[item.Key + startRowIndex, mergeColIndexs[i] + , item.Value + startRowIndex, mergeColIndexs[i] + ].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
sheet.Cells[item.Key + startRowIndex, mergeColIndexs[i] + , item.Value + startRowIndex, mergeColIndexs[i] + ].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
}
}
}
}
 List<int> mergeColIndexs = new List<int>();
mergeColIndexs.Add();
mergeColIndexs.Add();
EpplusHelper.MergeColCells(worksheet,,studentList,columnsValueList.ToArray(),, mergeColIndexs);

最新文章

  1. CentOS系统IPTables防火墙中FTP规则设置
  2. js实现继承的两种方式
  3. (转)JavaScript二:JavaScript语言的基本语法要求
  4. Swift数据类型简介(二)
  5. Redis附加功能之键过期功能
  6. php foreach的使用注意
  7. css层叠顺序
  8. ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解
  9. powerdesigner设置mysql唯一键,非主键
  10. My网页
  11. springcloud干货之服务消费者(ribbon)
  12. PushMeBaby 使用
  13. Mountaineers Gym - 102021M (LCA+MST)
  14. sum(case when ct.tradeTotal &gt;= 0 then 1 else 0 end)的意思
  15. MongoDB基本语法
  16. js array 数组添加与删除数据
  17. 【NOI2013】小Q的修炼
  18. 操作系统:Android(Google公司开发的操作系统)
  19. OpenGL学习--08--基本渲染(灯光)
  20. insert sort

热门文章

  1. 如何将含有byte数据项的结构存入MongoDb
  2. bzoj 4873: [Shoi2017]寿司餐厅【最大权闭合子图】
  3. 一文解析总结Java虚拟机内存区域模型
  4. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session常用方法
  5. (十一)SpringBoot导出excel文件
  6. Tyvj1474 打鼹鼠
  7. JMeter中的HTTPS套接字错误
  8. jmeter beanshell处理请求响应结果时Unicode编码转为中文
  9. bryce1010专题训练——Splay树
  10. Vue全家桶开发笔记