【问题标题】:JAVA Apache POI Excel: add borders to cell rangeJAVA Apache POI Excel:为单元格范围添加边框
【发布时间】:2015-02-17 15:28:07
【问题描述】:

有没有办法使用 Java 和 Apache POI 为单元格区域添加边框?

像 A1:B2 应该得到一个上下左右粗边框 - 样式?

我知道如何为单个单元格创建和应用样式,我可能会遍历单元格并应用适当的样式,但我确信有更简单的方法。

【问题讨论】:

    标签: java excel apache apache-poi


    【解决方案1】:

    我已经弄明白了。实际上在 apache poi 页面上有一个示例,我只是没有找到我一直在搜索的关键字。

    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);
    

    【讨论】:

    • CellRangeAddress region = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol); RegionUtil.setBorderBottom(BorderStyle.DASHED, region, worksheet); ...
    【解决方案2】:

    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);
    

    【讨论】:

      【解决方案3】:

      RegionUtil 在我的例子中将除白色以外的所有背景颜色变为黑色。 这是我的解决方法:

      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);
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多