Currently createRow method of XWPFTableRow uses first row as template (number of columns). This looks to be a bit confusing when adding a new row in table, since it is not like previous one. I suggest to apply following modification to XWPFTables class -- columns' number is taken from last row and not from the first one. public XWPFTableRow createRow() { int sizeCol = ctTbl.sizeOfTrArray() > 0 ? ctTbl.getTrArray(ctTbl.sizeOfTrArray() - 1).sizeOfTcArray() : 0; ... }