2015-02-17 15 views
6

Czy istnieje sposób dodawania granic do przedziału komórek za pomocą Java z Apache POI?JAVA Apache POI Excel: dodawanie granic do zakresu komórek

Podobnie jak w przypadku A1: B2, należy uzyskać grubą granicę od góry do dołu i od lewej do prawej - styl?

Wiem, jak utworzyć & zastosować style do pojedynczych komórek i mogę iterować przez komórki i zastosować odpowiednie style, ale jestem pewien, że jest łatwiejszy sposób.

Odpowiedz

9

Udało mi się to rozgryźć. Na stronie apache poi znajduje się próbka, której nie znalazłem po słowach kluczowych, których szukałem.

CellRangeAddress region = CellRangeAddress.valueOf(A1:B2); 
short borderStyle = CellStyle.BORDER_MEDIUM; 
RegionUtil.setBorderBottom(borderStyle, region, activeSheet, excelWorkbook); 
RegionUtil.setBorderTop(borderStyle, region, activeSheet, excelWorkbook); 
RegionUtil.setBorderLeft(borderStyle, region, activeSheet, excelWorkbook); 
RegionUtil.setBorderRight(borderStyle, region, activeSheet, excelWorkbook); 
3

Wiele się zmieniło w 3,16

CellRangeAddress region = new CellRangeAddress(6, 8, 1, 10); 
RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet); 
RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet); 
RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet); 
RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet); 
0

RegionUtil zwrócił wszystkie kolory tła inne niż bieli do czerni w moim przypadku. To jest moje obejście tego problemu:

public final class BorderUtils { 

    public static void setBorder(Sheet sheet, BorderStyle borderStyle, CellRangeAddress region) { 
     setBorderTop(sheet, borderStyle, region); 
     setBorderBottom(sheet, borderStyle, region); 
     setBorderLeft(sheet, borderStyle, region); 
     setBorderRight(sheet, borderStyle, region); 
    } 

    public static void setBorderTop(Sheet sheet, BorderStyle borderStyle, CellRangeAddress region) { 
     Row row = sheet.getRow(region.getFirstRow()); 
     for (int i=region.getFirstColumn() ; i<=region.getLastColumn() ; i++) { 
      Cell cell = row.getCell(i); 
      CellStyle cellStyle = cloneCellStyle(sheet, cell); 
      cellStyle.setBorderTop(borderStyle); 
      cell.setCellStyle(cellStyle); 
     } 
    } 

    public static void setBorderBottom(Sheet sheet, BorderStyle borderStyle, CellRangeAddress region) { 
     Row row = sheet.getRow(region.getLastRow()); 
     for (int i=region.getFirstColumn() ; i<=region.getLastColumn() ; i++) { 
      Cell cell = row.getCell(i); 
      CellStyle cellStyle = cloneCellStyle(sheet, cell); 
      cellStyle.setBorderBottom(borderStyle); 
      cell.setCellStyle(cellStyle); 
     } 
    } 

    public static void setBorderLeft(Sheet sheet, BorderStyle borderStyle, CellRangeAddress region) { 
     for (int i=region.getFirstRow() ; i<=region.getLastRow() ; i++) { 
      Cell cell = sheet.getRow(i).getCell(region.getFirstColumn()); 
      CellStyle cellStyle = cloneCellStyle(sheet, cell); 
      cellStyle.setBorderLeft(borderStyle); 
      cell.setCellStyle(cellStyle); 
     } 
    } 

    public static void setBorderRight(Sheet sheet, BorderStyle borderStyle, CellRangeAddress region) { 
     for (int i=region.getFirstRow() ; i<=region.getLastRow() ; i++) { 
      Cell cell = sheet.getRow(i).getCell(region.getLastColumn()); 
      CellStyle cellStyle = cloneCellStyle(sheet, cell); 
      cellStyle.setBorderRight(borderStyle); 
      cell.setCellStyle(cellStyle); 
     } 
    } 

} 
Powiązane problemy