首页 新闻 会员 周边

使用NPOI合并单元格后导致计数重复

0
悬赏园豆:10 [已解决问题] 解决于 2016-12-14 21:29

单元格在合并前已有数据,使用NPOI合并单元格后导致计数重复,引用代码如下:

CellRangeAddress cellRange = new CellRangeAddress(0, 1, 0, 0);
sheet.AddMergedRegion(cellRange);

通过截图可以看到,原本2个单元格在合并前的值都是123,合并后导致计数重复,正常只需要显示123就行。

 

使用过NPOI类库处理Excel的大大们来给个解答,谢谢,在线等!

失落の熊熊的主页 失落の熊熊 | 初学一级 | 园豆:79
提问于:2016-12-13 16:15
< >
分享
最佳答案
0

暂时决定在合并前把合并区域内的数据清空(不包含区域左定格单元格的数据),再进行合并,

这样下来如果是数字类型的数据,求和可以显示正确,但是计数显示不对,但目前客户应该只关注求和的数据,

没办法了,相关代码如下:

string sFileName = sFilePath;
            FileStream myFile = new FileStream(sFileName, FileMode.Open, FileAccess.Read);
            HSSFWorkbook workbook = new HSSFWorkbook(myFile);
            ISheet sheet = workbook.GetSheetAt(0);
            if (sheet != null)
            {
                ClearCellsValusBeforeMerge(sheet, 1, 2, 1, 2);
                sheet.AddMergedRegion(new CellRangeAddress(1, 2, 1, 2));
            }
            FileStream savefile = new FileStream(sFileName, FileMode.Create);
            workbook.Write(savefile);
            savefile.Close();
合并单元格代码
/// <summary>
        /// 合并前先清空该合并区域的数据
        /// 跳过左上角的数据,清空区域其他数据
        /// </summary>
        /// <param name="sheet">sheet</param>
        /// <param name="iRowFrom">行头</param>
        /// <param name="iRowTo">行尾</param>
        /// <param name="iColFrom">列头</param>
        /// <param name="iColTo">列尾</param>
        private static void ClearCellsValusBeforeMerge(ISheet sheet, int iRowFrom, int iRowTo, int iColFrom, int iColTo)
        {
            if (sheet != null)
            {
                for (int i = iRowFrom; i <= iRowTo; i++)
                {
                    for (int j = iColFrom; j <= iColTo; j++)
                    {
                        if (i == iRowFrom && j == iColFrom) continue;
                        sheet.GetRow(i).Cells[j].SetCellValue("");
                    }
                }
            }
        }
清空单元格数据代码

好惆怅,期待有更好的解决办法。。

失落の熊熊 | 初学一级 |园豆:79 | 2016-12-14 21:28

补上结果截图:

失落の熊熊 | 园豆:79 (初学一级) | 2016-12-14 21:32
其他回答(2)
0

A2不要设置值,

kingreatwill | 园豆:383 (菜鸟二级) | 2016-12-14 16:34

。。这个是根据业务规则需要把符合条件的单元格合并,上面是我做的例子,在实际情况中是有值的。

支持(0) 反对(0) 失落の熊熊 | 园豆:79 (初学一级) | 2016-12-14 16:35
0

通过程序合并后,单独把这个单元格的值再写一遍,否则你原来赋值的数据还在里面

收获园豆:10
数据之巅 | 园豆:309 (菜鸟二级) | 2016-12-14 19:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册