`
53873039oycg
  • 浏览: 824301 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]poi实现word 2007表格插入行功能实现思路

    博客分类:
  • poi
 
阅读更多

       首先poi中XWPFTable.addNewRowBetween(start, end);是不能实现插入行功能的,poi3.11版本未实现该功能,如下图:

      

      主要思路如下:

      插入行主要分2种情况,(1)在第一行插入或者最后一行插入。(2)在表格中间插入行。
      第(1)种:如果在第一行上面插入一行或者最后一行下面插入一行,不需要考虑跨行情况。
      如果在第一行下面插入一行或者最后一行上面插入一行,需要考虑跨行情况。
      不管那一行插入都需要考虑跨列情况。
       

       第(2)种:在中间插入,若当前行结束跨行,则上一行插入需要跨行,下一行插入不需跨行。
       在中间插入,若当前行开始跨行,则下一行插入需要跨行,上一行插入不需跨行。

       

       说下关键代码:
        插入行可以使用insertNewTableRow,在下面插入一行时需参照下一行单元格是否跨行,按位置得到真实单元格代码如下:

      

 /**
	 * @Description:按位置得到单元格(考虑跨列合并情况)
	 */
	public XWPFTableCell getCellSizeWithMergeNum(XWPFTableRow row, int position) {
		List<XWPFTableCell> rowCellList = row.getTableCells();
		int k = 0;
		for (int i = 0, len = rowCellList.size(); i < len; i++) {
			CTTc ctTc = rowCellList.get(i).getCTTc();
			if (ctTc.isSetTcPr()) {
				CTTcPr tcPr = ctTc.getTcPr();
				if (tcPr.isSetGridSpan()) {
					CTDecimalNumber gridSpan = tcPr.getGridSpan();
					k += gridSpan.getVal().intValue() - 1;
				}
			}
			if (k >= position) {
				return rowCellList.get(i);
			}
			k++;
		}
		if (position < rowCellList.size()) {
			return rowCellList.get(position);
		}
		return null;
	}

    其他部分自己实现了。

    全文完。

  • 大小: 171.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics