slaubach    2002/10/07 09:26:24

  Modified:    src/documentation/xdocs/hssf quick-guide.xml
               src/java/org/apache/poi/hssf/usermodel HSSFSheet.java
               src/testcases/org/apache/poi/hssf/usermodel
                        TestHSSFSheet.java TestWorkbook.java
  Added:       src/testcases/org/apache/poi/hssf/data SimpleMultiCell.xls
  Log:
  Added ability to shift rows in a sheet.
  
  Revision  Changes    Path
  1.10      +18 -0     jakarta-poi/src/documentation/xdocs/hssf/quick-guide.xml
  
  Index: quick-guide.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/documentation/xdocs/hssf/quick-guide.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- quick-guide.xml   30 Sep 2002 23:20:54 -0000      1.9
  +++ quick-guide.xml   7 Oct 2002 16:26:24 -0000       1.10
  @@ -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>
  
  
  
  1.14      +47 -0     
jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
  
  Index: HSSFSheet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- HSSFSheet.java    5 Oct 2002 02:38:07 -0000       1.13
  +++ HSSFSheet.java    7 Oct 2002 16:26:24 -0000       1.14
  @@ -829,4 +829,51 @@
        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);
  +    }
   }
  
  
  
  1.1                  
jakarta-poi/src/testcases/org/apache/poi/hssf/data/SimpleMultiCell.xls
  
        <<Binary file>>
  
  
  1.7       +97 -16    
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
  
  Index: TestHSSFSheet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TestHSSFSheet.java        5 Sep 2002 00:26:28 -0000       1.6
  +++ TestHSSFSheet.java        7 Oct 2002 16:26:24 -0000       1.7
  @@ -199,20 +199,101 @@
           sheet.removeRow(row);
       }
   
  -    public void testCloneSheet() {
  -        HSSFWorkbook workbook = new HSSFWorkbook();
  -        HSSFSheet sheet = workbook.createSheet("Test Clone");
  -        HSSFRow row = sheet.createRow((short) 0);
  -        HSSFCell cell = row.createCell((short) 0);
  -        cell.setCellValue("clone_test"); 
  -        HSSFSheet cloned = workbook.cloneSheet(0);
  -  
  -        //Check for a good clone
  -        
assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), 
"clone_test");
  -        
  -        //Check that the cells are not somehow linked
  -        cell.setCellValue("Difference Check");
  -        
assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), 
"clone_test");
  -    }
  -
  +    public void testCloneSheet() {
  +        HSSFWorkbook workbook = new HSSFWorkbook();
  +        HSSFSheet sheet = workbook.createSheet("Test Clone");
  +        HSSFRow row = sheet.createRow((short) 0);
  +        HSSFCell cell = row.createCell((short) 0);
  +        cell.setCellValue("clone_test"); 
  +        HSSFSheet cloned = workbook.cloneSheet(0);
  +  
  +        //Check for a good clone
  +        
assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), 
"clone_test");
  +        
  +        //Check that the cells are not somehow linked
  +        cell.setCellValue("Difference Check");
  +        
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);
  +    }
   }
  
  
  
  1.8       +0 -1      
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java
  
  Index: TestWorkbook.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TestWorkbook.java 4 Oct 2002 20:33:22 -0000       1.7
  +++ TestWorkbook.java 7 Oct 2002 16:26:24 -0000       1.8
  @@ -272,7 +272,6 @@
       {
        File             file = File.createTempFile("testWriteDataFormat",
                                                       ".xls");
  -     System.err.println(file);
           FileOutputStream out  = new FileOutputStream(file);
           HSSFWorkbook     wb   = new HSSFWorkbook();
           HSSFSheet        s    = wb.createSheet();
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to