简体   繁体   English

使用 Apache POI 获取单元格颜色

[英]Get Cell Colour with Apache POI

I'm trying to learn how to use Apache POI with a small project.我正在尝试学习如何在一个小项目中使用 Apache POI。 I want to use Excel to create 'room layouts' by using colour-coded cells, and load the data into a Java program.我想使用 Excel 通过使用颜色编码的单元格创建“房间布局”,并将数据加载到 Java 程序中。 I think understand how to access the colour properties of a cell, but what I'm asking is:我认为了解如何访问单元格的颜色属性,但我要问的是:

Is it possible to access the colour of a blank cell (no data or value), or does a cell need to have data in order for Apache POI to read it?是否可以访问空白单元格的颜色(没有数据或值),或者单元格是否需要有数据才能让 Apache POI 读取它?

I am only interested in the colour, so might it be preferable to put junk data in the cells, or possibly iterate through them based on coordinates?我只对颜色感兴趣,所以最好将垃圾数据放在单元格中,或者可能根据坐标遍历它们? I'm brand new to Apache POI, so any help is greatly appreciated.我是 Apache POI 的新手,因此非常感谢任何帮助。

What have you tried?你尝试过什么? Please read Busy Developers' Guide to HSSF and XSSF Features .请阅读繁忙的 HSSF 和 XSSF 功能开发人员指南

Supposing following Workbook:假设以下工作簿:

在此处输入图片说明

Then the following code should work as well with a.xls (HSSF) as with a.xlsx (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) {
  }
 }
}

Above code was usable using apache poi 's version in September 2016. Following code is usable using current apache poi versions of January 2020:上面的代码是可用使用apache poi在九月2016年的版本,下面的代码是使用使用当前apache poi 2020一月的版本:

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

 }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM