使用Apache POI获取Cell Color

时间:2016-09-23 18:45:33

标签: java excel colors apache-poi

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

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

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

1 个答案:

答案 0 :(得分:3)

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

假设以下工作簿:

enter image description here

然后,以下代码与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) {
  }
 }
}