예제 #1
0
  public void testOptimiseStylesCheckActualStyles() {
    HSSFWorkbook wb = new HSSFWorkbook();

    // Several styles
    assertEquals(21, wb.getNumCellStyles());

    HSSFCellStyle cs1 = wb.createCellStyle();
    cs1.setBorderBottom(HSSFCellStyle.BORDER_THICK);

    HSSFCellStyle cs2 = wb.createCellStyle();
    cs2.setBorderBottom(HSSFCellStyle.BORDER_DASH_DOT);

    HSSFCellStyle cs3 = wb.createCellStyle(); // = cs1
    cs3.setBorderBottom(HSSFCellStyle.BORDER_THICK);

    assertEquals(24, wb.getNumCellStyles());

    // Use them
    HSSFSheet s = wb.createSheet();
    HSSFRow r = s.createRow(0);

    r.createCell(0).setCellStyle(cs1);
    r.createCell(1).setCellStyle(cs2);
    r.createCell(2).setCellStyle(cs3);

    assertEquals(21, r.getCell(0).getCellValueRecord().getXFIndex());
    assertEquals(22, r.getCell(1).getCellValueRecord().getXFIndex());
    assertEquals(23, r.getCell(2).getCellValueRecord().getXFIndex());

    // Optimise
    HSSFOptimiser.optimiseCellStyles(wb);

    // Check
    assertEquals(23, wb.getNumCellStyles());

    assertEquals(HSSFCellStyle.BORDER_THICK, r.getCell(0).getCellStyle().getBorderBottom());
    assertEquals(HSSFCellStyle.BORDER_DASH_DOT, r.getCell(1).getCellStyle().getBorderBottom());
    assertEquals(HSSFCellStyle.BORDER_THICK, r.getCell(2).getCellStyle().getBorderBottom());
  }
예제 #2
0
  public void testDoesNoHarmIfNothingToDo() {
    HSSFWorkbook wb = new HSSFWorkbook();

    // New files start with 4 built in fonts, and 21 built in styles
    assertEquals(4, wb.getNumberOfFonts());
    assertEquals(21, wb.getNumCellStyles());

    // Create a test font and style, and use them
    HSSFFont f = wb.createFont();
    f.setFontName("Testing");
    HSSFCellStyle s = wb.createCellStyle();
    s.setFont(f);

    HSSFSheet sheet = wb.createSheet();
    HSSFRow row = sheet.createRow(0);
    row.createCell(0).setCellStyle(s);

    // Should have one more than the default of each
    assertEquals(5, wb.getNumberOfFonts());
    assertEquals(22, wb.getNumCellStyles());

    // Optimise fonts
    HSSFOptimiser.optimiseFonts(wb);

    assertEquals(5, wb.getNumberOfFonts());
    assertEquals(22, wb.getNumCellStyles());

    assertEquals(f, s.getFont(wb));

    // Optimise styles
    HSSFOptimiser.optimiseCellStyles(wb);

    assertEquals(5, wb.getNumberOfFonts());
    assertEquals(22, wb.getNumCellStyles());

    assertEquals(f, s.getFont(wb));
  }
예제 #3
0
  public void testOptimiseFonts() {
    HSSFWorkbook wb = new HSSFWorkbook();

    // Add 6 fonts, some duplicates
    HSSFFont f1 = wb.createFont();
    f1.setFontHeight((short) 11);
    f1.setFontName("Testing");

    HSSFFont f2 = wb.createFont();
    f2.setFontHeight((short) 22);
    f2.setFontName("Also Testing");

    HSSFFont f3 = wb.createFont();
    f3.setFontHeight((short) 33);
    f3.setFontName("Unique");

    HSSFFont f4 = wb.createFont();
    f4.setFontHeight((short) 11);
    f4.setFontName("Testing");

    HSSFFont f5 = wb.createFont();
    f5.setFontHeight((short) 22);
    f5.setFontName("Also Testing");

    HSSFFont f6 = wb.createFont();
    f6.setFontHeight((short) 66);
    f6.setFontName("Also Unique");

    // Use all three of the four in cell styles
    assertEquals(21, wb.getNumCellStyles());

    HSSFCellStyle cs1 = wb.createCellStyle();
    cs1.setFont(f1);
    assertEquals(5, cs1.getFontIndex());

    HSSFCellStyle cs2 = wb.createCellStyle();
    cs2.setFont(f4);
    assertEquals(8, cs2.getFontIndex());

    HSSFCellStyle cs3 = wb.createCellStyle();
    cs3.setFont(f5);
    assertEquals(9, cs3.getFontIndex());

    HSSFCellStyle cs4 = wb.createCellStyle();
    cs4.setFont(f6);
    assertEquals(10, cs4.getFontIndex());

    assertEquals(25, wb.getNumCellStyles());

    // And three in rich text
    HSSFSheet s = wb.createSheet();
    HSSFRow r = s.createRow(0);

    HSSFRichTextString rtr1 = new HSSFRichTextString("Test");
    rtr1.applyFont(0, 2, f1);
    rtr1.applyFont(3, 4, f2);
    r.createCell(0).setCellValue(rtr1);

    HSSFRichTextString rtr2 = new HSSFRichTextString("AlsoTest");
    rtr2.applyFont(0, 2, f3);
    rtr2.applyFont(3, 5, f5);
    rtr2.applyFont(6, 8, f6);
    r.createCell(1).setCellValue(rtr2);

    // Check what we have now
    assertEquals(10, wb.getNumberOfFonts());
    assertEquals(25, wb.getNumCellStyles());

    // Optimise
    HSSFOptimiser.optimiseFonts(wb);

    // Check font count
    assertEquals(8, wb.getNumberOfFonts());
    assertEquals(25, wb.getNumCellStyles());

    // Check font use in cell styles
    assertEquals(5, cs1.getFontIndex());
    assertEquals(5, cs2.getFontIndex()); // duplicate of 1
    assertEquals(6, cs3.getFontIndex()); // duplicate of 2
    assertEquals(8, cs4.getFontIndex()); // two have gone

    // And in rich text

    // RTR 1 had f1 and f2, unchanged
    assertEquals(5, r.getCell(0).getRichStringCellValue().getFontAtIndex(0));
    assertEquals(5, r.getCell(0).getRichStringCellValue().getFontAtIndex(1));
    assertEquals(6, r.getCell(0).getRichStringCellValue().getFontAtIndex(3));
    assertEquals(6, r.getCell(0).getRichStringCellValue().getFontAtIndex(4));

    // RTR 2 had f3 (unchanged), f5 (=f2) and f6 (moved down)
    assertEquals(7, r.getCell(1).getRichStringCellValue().getFontAtIndex(0));
    assertEquals(7, r.getCell(1).getRichStringCellValue().getFontAtIndex(1));
    assertEquals(6, r.getCell(1).getRichStringCellValue().getFontAtIndex(3));
    assertEquals(6, r.getCell(1).getRichStringCellValue().getFontAtIndex(4));
    assertEquals(8, r.getCell(1).getRichStringCellValue().getFontAtIndex(6));
    assertEquals(8, r.getCell(1).getRichStringCellValue().getFontAtIndex(7));
  }
예제 #4
0
  public void testOptimiseStyles() {
    HSSFWorkbook wb = new HSSFWorkbook();

    // Two fonts
    assertEquals(4, wb.getNumberOfFonts());

    HSSFFont f1 = wb.createFont();
    f1.setFontHeight((short) 11);
    f1.setFontName("Testing");

    HSSFFont f2 = wb.createFont();
    f2.setFontHeight((short) 22);
    f2.setFontName("Also Testing");

    assertEquals(6, wb.getNumberOfFonts());

    // Several styles
    assertEquals(21, wb.getNumCellStyles());

    HSSFCellStyle cs1 = wb.createCellStyle();
    cs1.setFont(f1);

    HSSFCellStyle cs2 = wb.createCellStyle();
    cs2.setFont(f2);

    HSSFCellStyle cs3 = wb.createCellStyle();
    cs3.setFont(f1);

    HSSFCellStyle cs4 = wb.createCellStyle();
    cs4.setFont(f1);
    cs4.setAlignment((short) 22);

    HSSFCellStyle cs5 = wb.createCellStyle();
    cs5.setFont(f2);
    cs5.setAlignment((short) 111);

    HSSFCellStyle cs6 = wb.createCellStyle();
    cs6.setFont(f2);

    assertEquals(27, wb.getNumCellStyles());

    // Use them
    HSSFSheet s = wb.createSheet();
    HSSFRow r = s.createRow(0);

    r.createCell(0).setCellStyle(cs1);
    r.createCell(1).setCellStyle(cs2);
    r.createCell(2).setCellStyle(cs3);
    r.createCell(3).setCellStyle(cs4);
    r.createCell(4).setCellStyle(cs5);
    r.createCell(5).setCellStyle(cs6);
    r.createCell(6).setCellStyle(cs1);
    r.createCell(7).setCellStyle(cs2);

    assertEquals(21, r.getCell(0).getCellValueRecord().getXFIndex());
    assertEquals(26, r.getCell(5).getCellValueRecord().getXFIndex());
    assertEquals(21, r.getCell(6).getCellValueRecord().getXFIndex());

    // Optimise
    HSSFOptimiser.optimiseCellStyles(wb);

    // Check
    assertEquals(6, wb.getNumberOfFonts());
    assertEquals(25, wb.getNumCellStyles());

    // cs1 -> 21
    assertEquals(21, r.getCell(0).getCellValueRecord().getXFIndex());
    // cs2 -> 22
    assertEquals(22, r.getCell(1).getCellValueRecord().getXFIndex());
    assertEquals(22, r.getCell(1).getCellStyle().getFont(wb).getFontHeight());
    // cs3 = cs1 -> 21
    assertEquals(21, r.getCell(2).getCellValueRecord().getXFIndex());
    // cs4 --> 24 -> 23
    assertEquals(23, r.getCell(3).getCellValueRecord().getXFIndex());
    // cs5 --> 25 -> 24
    assertEquals(24, r.getCell(4).getCellValueRecord().getXFIndex());
    // cs6 = cs2 -> 22
    assertEquals(22, r.getCell(5).getCellValueRecord().getXFIndex());
    // cs1 -> 21
    assertEquals(21, r.getCell(6).getCellValueRecord().getXFIndex());
    // cs2 -> 22
    assertEquals(22, r.getCell(7).getCellValueRecord().getXFIndex());

    // Add a new duplicate, and two that aren't used
    HSSFCellStyle csD = wb.createCellStyle();
    csD.setFont(f1);
    r.createCell(8).setCellStyle(csD);

    HSSFFont f3 = wb.createFont();
    f3.setFontHeight((short) 23);
    f3.setFontName("Testing 3");
    HSSFFont f4 = wb.createFont();
    f4.setFontHeight((short) 24);
    f4.setFontName("Testing 4");

    HSSFCellStyle csU1 = wb.createCellStyle();
    csU1.setFont(f3);
    HSSFCellStyle csU2 = wb.createCellStyle();
    csU2.setFont(f4);

    // Check before the optimise
    assertEquals(8, wb.getNumberOfFonts());
    assertEquals(28, wb.getNumCellStyles());

    // Optimise, should remove the two un-used ones and the one duplicate
    HSSFOptimiser.optimiseCellStyles(wb);

    // Check
    assertEquals(8, wb.getNumberOfFonts());
    assertEquals(25, wb.getNumCellStyles());

    // csD -> cs1 -> 21
    assertEquals(21, r.getCell(8).getCellValueRecord().getXFIndex());
  }