NPOI v2.3.0 解决重复多次合并单元格造成的低效率问题

针对NPOI库在处理大量数据时因重复合并单元格导致的效率低下问题,文章介绍了问题背景及原方法的不足。提出通过避免遍历Region,改用字典保存Region位置的优化策略,有效提升了合并单元格操作的性能。
摘要由CSDN通过智能技术生成

NPOI v2.3.0 解决重复多次合并单元格造成的低效率问题

问题背景:现存在一个含有多列的sheet,比较同列相邻上下两个单元格,若内容相同则将其合并。
原方法:

		/// <summary>
        /// 合并单元格并返回(此方法效率极低,已弃用)
        /// </summary>
        /// <param name="sheet"></param>
        /// <param name="mergedCell">可能是某个Region内的单元格,也可以是独立的单元格</param>
        /// <param name="iCell">必须是独立的单元格</param>
        private static CellRangeAddress MergeRegion(ISheet sheet, ICell mergedCell, ICell iCell)
        {
   
            var firstRow = mergedCell.RowIndex;
            var firstCol = mergedCell.ColumnIndex;
            var lastRow  = iCell.RowIndex;
            var lastCol  = iCell.ColumnIndex;
            CellRangeAddress region;
            var index    = GetMergedRegion(sheet, firstRow, firstCol);
            if (index >= 0)
            {
   
                region = sheet.GetMergedRegion(index);
                firstRow = region.FirstRow;
                firstCol = region.FirstColumn;
                //MergedRegion不允许重叠,因此要先移除旧Region,再添加新Region
                sheet.RemoveMergedRegion(index);
            }

            //firstRow<=lastRow 并且 firstCol<=lastCol
            region = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
            sheet.AddMergedRegion(region)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值