Index: src/java/org/apache/poi/hssf/usermodel/HSSFCell.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java,v --- src/java/org/apache/poi/hssf/usermodel/HSSFCell.java 11 Sep 2002 12:14:28 -0000 1.18 +++ src/java/org/apache/poi/hssf/usermodel/HSSFCell.java 5 Oct 2002 19:13:16 -0000 @@ -967,4 +967,15 @@ throw new RuntimeException("You cannot reference columns with an index of less then 0."); } } + + /** + * Sets the cells row. Should be really careful with this. + * + * @param row the new row number + */ + public void setRow(int row) { + if (record != null) { + record.setRow(row); + } + } } Index: src/java/org/apache/poi/hssf/usermodel/HSSFRow.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java,v --- src/java/org/apache/poi/hssf/usermodel/HSSFRow.java 10 May 2002 03:01:10 -0000 1.11 +++ src/java/org/apache/poi/hssf/usermodel/HSSFRow.java 5 Oct 2002 19:13:16 -0000 @@ -253,6 +253,13 @@ { row.setRowNumber(rowNum); // used only for KEY comparison (HSSFRow) } + if (cells != null) { + Iterator i = cells.values().iterator(); + while (i.hasNext()) { + HSSFCell cell = (HSSFCell)i.next(); + cell.setRow(rowNum); + } + } } /** Index: src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java,v --- src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java 5 Oct 2002 02:38:07 -0000 1.13 +++ src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java 5 Oct 2002 19:13:17 -0000 @@ -829,4 +829,41 @@ public void setMargin(short margin, double size) { getSheet().setMargin(margin, size); } + + /** + * Shifts rows between startRow and endRow n number of rows. + * If you use a negative number, it will shift rows up. + * + * @param startRow the row to start shifting + * @param endRow the row to end shifting + * @param n the number of rows to shift + */ + public void shiftRows(int startRow, int endRow, int n) { + int s, e, inc; + if (n < 0) { + s = startRow; + e = endRow; + inc = 1; + } else { + s = endRow; + e = startRow; + inc = -1; + } + for (int rowNum = s; rowNum >= startRow && rowNum <= endRow; rowNum+=inc) { + System.out.println(rowNum); + HSSFRow row = getRow(rowNum); + HSSFRow row2Replace = getRow(rowNum + n); + if (row2Replace != null) { + removeRow(row2Replace); + } + if (row != null) { + System.out.println("Shifting " + rowNum); + row.setRowNum(rowNum + n); + System.out.println(row.getPhysicalNumberOfCells()); + } + } + if (endRow + n > lastrow) lastrow = endRow + n; + if (startRow + n > firstrow) firstrow = startRow + n; + System.out.println(firstrow + " " + lastrow); + } }