aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShawn Laubach <slaubach@apache.org>2002-10-07 16:26:24 +0000
committerShawn Laubach <slaubach@apache.org>2002-10-07 16:26:24 +0000
commit57a02664576278cc67fc60f465eafb80f5213ddf (patch)
tree00de1a941aab93ec239cc4b491784af27db02c93 /src
parentb7750aa44acf9272e02523490acf547ab17b443c (diff)
downloadpoi-57a02664576278cc67fc60f465eafb80f5213ddf.tar.gz
poi-57a02664576278cc67fc60f465eafb80f5213ddf.zip
Added ability to shift rows in a sheet.
PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352881 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/documentation/xdocs/hssf/quick-guide.xml18
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java47
-rw-r--r--src/testcases/org/apache/poi/hssf/data/SimpleMultiCell.xlsbin0 -> 13824 bytes
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java81
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java1
5 files changed, 146 insertions, 1 deletions
diff --git a/src/documentation/xdocs/hssf/quick-guide.xml b/src/documentation/xdocs/hssf/quick-guide.xml
index 1743de9e9f..335b78aa8b 100644
--- a/src/documentation/xdocs/hssf/quick-guide.xml
+++ b/src/documentation/xdocs/hssf/quick-guide.xml
@@ -32,6 +32,7 @@
<li><link href="#DataFormats">Create user defined data formats.</link></li>
<li><link href="#PrintArea">Set print area for a sheet.</link></li>
<li><link href="#FooterPageNumbers">Set page numbers on the footer of a sheet.</link></li>
+ <li><link href="#ShiftRows">Shift rows.</link></li>
</ul>
</section>
<section title="Features">
@@ -446,6 +447,23 @@
fileOut.close();
</source>
</section>
+
+ <anchor id="ShiftRows"/>
+ <section title="Shift rows up or down on a sheet">
+ <source>
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet("row sheet");
+
+ // Create various cells and rows for spreadsheet.
+
+ // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)
+ sheet.shiftRows(5, 10, -5);
+
+ FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+ wb.write(fileOut);
+ fileOut.close();
+ </source>
+ </section>
</section>
</section>
</body>
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
index 031fabea9d..a5bb0cede8 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
@@ -829,4 +829,51 @@ public class HSSFSheet
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.
+ * Code ensures that rows don't wrap around
+ *
+ * @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 >= 0 && rowNum < 65536; rowNum+=inc) {
+ HSSFRow row = getRow(rowNum);
+ HSSFRow row2Replace = getRow(rowNum + n);
+ if (row2Replace == null)
+ row2Replace = createRow(rowNum + n);
+
+ HSSFCell cell;
+ for (short col = row2Replace.getFirstCellNum(); col <= row2Replace.getLastCellNum(); col++) {
+ cell = row2Replace.getCell(col);
+ if (cell != null)
+ row2Replace.removeCell(cell);
+ }
+ for (short col = row.getFirstCellNum(); col <= row.getLastCellNum(); col++) {
+ cell = row.getCell(col);
+ if (cell != null) {
+ row.removeCell(cell);
+ CellValueRecordInterface cellRecord = cell.getCellValueRecord();
+ cellRecord.setRow(rowNum + n);
+ row2Replace.createCellFromRecord(cellRecord);
+ sheet.addValueRecord(rowNum + n, cellRecord);
+ }
+ }
+ }
+ if (endRow == lastrow || endRow + n > lastrow) lastrow = Math.min(endRow + n, 65535);
+ if (startRow == firstrow || startRow + n < firstrow) firstrow = Math.max(startRow + n, 0);
+ }
}
diff --git a/src/testcases/org/apache/poi/hssf/data/SimpleMultiCell.xls b/src/testcases/org/apache/poi/hssf/data/SimpleMultiCell.xls
new file mode 100644
index 0000000000..3c8c8b0b00
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/data/SimpleMultiCell.xls
Binary files differ
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
index 5ce12b4618..3bad3aea2a 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
@@ -215,4 +215,85 @@ public class TestHSSFSheet
assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), "clone_test");
}
+ /**
+ * Tests the shiftRows function. Does three different shifts.
+ * After each shift, writes the workbook to file and reads back to
+ * check. This ensures that if some changes code that breaks
+ * writing or what not, they realize it.
+ *
+ * Shawn Laubach (slaubach at apache dot org)
+ */
+ public void testShiftRows() throws Exception {
+ // Read initial file in
+ String filename = System.getProperty("HSSF.testdata.path");
+ filename = filename + "/SimpleMultiCell.xls";
+ FileInputStream fin = new FileInputStream(filename);
+ HSSFWorkbook wb = new HSSFWorkbook(fin);
+ fin.close();
+ HSSFSheet s = wb.getSheetAt(0);
+
+ // Shift the second row down 1 and write to temp file
+ s.shiftRows(1, 1, 1);
+ File tempFile = File.createTempFile("shift", "test.xls");
+ FileOutputStream fout = new FileOutputStream(tempFile);
+ wb.write(fout);
+ fout.close();
+
+ // Read from temp file and check the number of cells in each
+ // row (in original file each row was unique)
+ fin = new FileInputStream(tempFile);
+ wb = new HSSFWorkbook(fin);
+ fin.close();
+ s = wb.getSheetAt(0);
+
+ assertEquals(s.getRow(0).getPhysicalNumberOfCells(), 1);
+ assertTrue(s.getRow(1) == null || s.getRow(1).getPhysicalNumberOfCells() == 0);
+ assertEquals(s.getRow(2).getPhysicalNumberOfCells(), 2);
+ assertEquals(s.getRow(3).getPhysicalNumberOfCells(), 4);
+ assertEquals(s.getRow(4).getPhysicalNumberOfCells(), 5);
+
+ // Shift rows 1-3 down 3 in the current one. This tests when
+ // 1 row is blank. Write to a another temp file
+ s.shiftRows(0, 2, 3);
+ tempFile = File.createTempFile("shift", "test.xls");
+ fout = new FileOutputStream(tempFile);
+ wb.write(fout);
+ fout.close();
+
+ // Read and ensure things are where they should be
+ fin = new FileInputStream(tempFile);
+ wb = new HSSFWorkbook(fin);
+ fin.close();
+ s = wb.getSheetAt(0);
+ assertTrue(s.getRow(0) == null || s.getRow(0).getPhysicalNumberOfCells() == 0);
+ assertTrue(s.getRow(1) == null || s.getRow(1).getPhysicalNumberOfCells() == 0);
+ assertTrue(s.getRow(2) == null || s.getRow(2).getPhysicalNumberOfCells() == 0);
+ assertEquals(s.getRow(3).getPhysicalNumberOfCells(), 1);
+ assertTrue(s.getRow(4) == null || s.getRow(4).getPhysicalNumberOfCells() == 0);
+ assertEquals(s.getRow(5).getPhysicalNumberOfCells(), 2);
+
+ // Read the first file again
+ fin = new FileInputStream(filename);
+ wb = new HSSFWorkbook(fin);
+ fin.close();
+ s = wb.getSheetAt(0);
+
+ // Shift rows 3 and 4 up and write to temp file
+ s.shiftRows(2, 3, -2);
+ tempFile = File.createTempFile("shift", "test.xls");
+ fout = new FileOutputStream(tempFile);
+ wb.write(fout);
+ fout.close();
+
+ // Read file and test
+ fin = new FileInputStream(tempFile);
+ wb = new HSSFWorkbook(fin);
+ fin.close();
+ s = wb.getSheetAt(0);
+ assertEquals(s.getRow(0).getPhysicalNumberOfCells(), 3);
+ assertEquals(s.getRow(1).getPhysicalNumberOfCells(), 4);
+ assertTrue(s.getRow(2) == null || s.getRow(2).getPhysicalNumberOfCells() == 0);
+ assertTrue(s.getRow(3) == null || s.getRow(3).getPhysicalNumberOfCells() == 0);
+ assertEquals(s.getRow(4).getPhysicalNumberOfCells(), 5);
+ }
}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java
index 841a542d0b..845e49b44b 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java
@@ -272,7 +272,6 @@ public class TestWorkbook
{
File file = File.createTempFile("testWriteDataFormat",
".xls");
- System.err.println(file);
FileOutputStream out = new FileOutputStream(file);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet s = wb.createSheet();