暂时决定在合并前把合并区域内的数据清空(不包含区域左定格单元格的数据),再进行合并,
这样下来如果是数字类型的数据,求和可以显示正确,但是计数显示不对,但目前客户应该只关注求和的数据,
没办法了,相关代码如下:
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(""); } } } }
好惆怅,期待有更好的解决办法。。
补上结果截图:
A2不要设置值,
。。这个是根据业务规则需要把符合条件的单元格合并,上面是我做的例子,在实际情况中是有值的。
通过程序合并后,单独把这个单元格的值再写一遍,否则你原来赋值的数据还在里面