我正在尝试学习如何在一个小项目中使用Apache POI。我想使用Excel通过使用颜色编码的单元格来创建“房间布局”,并将数据加载到Java程序中。我想了解如何访问单元格的颜色属性,但我要问的是:
是否可以访问空白单元格的颜色(没有数据或值),或者单元格是否需要有数据才能让Apache POI读取它?
我只对颜色感兴趣,所以最好把垃圾数据放在单元格中,还是可能根据坐标迭代它们?我是Apache POI的新手,所以非常感谢任何帮助。
答案 0 :(得分:3)
你有什么尝试?请阅读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) {
}
}
}