1 java excel colors apache-poi
我正在尝试学习如何在一个小项目中使用 Apache POI。我想使用 Excel 通过使用颜色编码的单元格创建“房间布局”,并将数据加载到 Java 程序中。我认为了解如何访问单元格的颜色属性,但我要问的是:
是否可以访问空白单元格的颜色(无数据或值),或者单元格是否需要有数据才能让 Apache POI 读取它?
我只对颜色感兴趣,所以最好将垃圾数据放在单元格中,或者可能根据坐标遍历它们?我是 Apache POI 的新手,因此非常感谢任何帮助。
你尝试过什么?请阅读繁忙的 HSSF 和 XSSF 功能开发人员指南。
假设以下工作簿:
那么下面的代码应该与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) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
以上代码可使用apache poi2016 年 9 月的版本使用。以下代码可使用apache poi2020 年 1 月的当前版本:
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();
}
}
Run Code Online (Sandbox Code Playgroud)