【问题标题】:Get Cell Colour with Apache POI使用 Apache POI 获取单元格颜色
【发布时间】:2017-02-01 17:13:59
【问题描述】:

我正在尝试学习如何在一个小项目中使用 Apache POI。我想使用 Excel 通过使用颜色编码的单元格创建“房间布局”,并将数据加载到 Java 程序中。我想了解如何访问单元格的颜色属性,但我要问的是:

是否可以访问空白单元格的颜色(无数据或值),或者单元格是否需要有数据才能让 Apache POI 读取它?

我只对颜色感兴趣,所以最好将垃圾数据放入单元格中,或者可能根据坐标遍历它们?我是 Apache POI 的新手,非常感谢任何帮助。

【问题讨论】:

    标签: java excel colors apache-poi


    【解决方案1】:

    你试过什么?请阅读Busy Developers' Guide to HSSF and XSSF Features

    假设以下工作簿:

    那么下面的代码应该同样适用于a.xls (HSSF) 和a.xlsx (XSSF)。

    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.*;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    
    import java.io.*;
    
    class ReadExcelEmptyColoredCells {
    
     public static void main(String[] args) {
      try {
    
       //Workbook workbook = WorkbookFactory.create(new File("a.xls"));
       Workbook workbook = WorkbookFactory.create(new File("a.xlsx"));
    
       Sheet sheet = workbook.getSheetAt(0);
    
       for (Row row : sheet) {
        for (Cell cell : row) {
         if (! "".equals(String.valueOf(cell)))
          System.out.println(cell.getAddress() + ": " + String.valueOf(cell));
         CellStyle cellStyle = cell.getCellStyle();
         Color color = cellStyle.getFillForegroundColorColor();
         if (color != null) {
          if (color instanceof XSSFColor) {
           System.out.println(cell.getAddress() + ": " + ((XSSFColor)color).getARGBHex());
          } else if (color instanceof HSSFColor) {
           if (! (color instanceof HSSFColor.AUTOMATIC))
            System.out.println(cell.getAddress() + ": " + ((HSSFColor)color).getHexString());
          }
         }
        }
       }
    
       workbook.close();
    
      } catch (InvalidFormatException ifex) {
      } catch (FileNotFoundException fnfex) {
      } catch (IOException ioex) {
      }
     }
    }
    

    以上代码可使用 2016 年 9 月的 apache poi 版本。以下代码可使用 2020 年 1 月的当前 apache poi 版本:

    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.*;
    import org.apache.poi.hssf.util.HSSFColor;
    
    import java.io.*;
    
    class ReadExcelEmptyColoredCells {
    
     public static void main(String[] args) throws Exception {
    
      //Workbook workbook = WorkbookFactory.create(new File("a.xls"));
      Workbook workbook = WorkbookFactory.create(new File("a.xlsx"));
    
      Sheet sheet = workbook.getSheetAt(0);
    
      for (Row row : sheet) {
       for (Cell cell : row) {
        if (! "".equals(String.valueOf(cell)))
         System.out.println(cell.getAddress() + ": " + String.valueOf(cell));
        CellStyle cellStyle = cell.getCellStyle();
        Color color = cellStyle.getFillForegroundColorColor();
        if (color != null) {
         if (color instanceof XSSFColor) {
          System.out.println(cell.getAddress() + ": " + ((XSSFColor)color).getARGBHex());
         } else if (color instanceof HSSFColor) {
          if (! (color.equals(HSSFColor.HSSFColorPredefined.AUTOMATIC.getColor())))
           System.out.println(cell.getAddress() + ": " + ((HSSFColor)color).getHexString());
         }
        }
       }
      }
    
      workbook.close();
    
     }
    }
    

    【讨论】:

    • 我还没有真正尝试过任何东西,因为我真的不知道从哪里开始,也从未找到快速指南。但是,查看您的代码对于了解它的工作原理非常有用。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多