POI调色板操作

上一节介绍了如何设定POI里已经准备好的顔色,但有时你想要的顔色不在这个范围内,怎么办呢?这一节就来介绍如何使用调色板的RGB的值来设定你喜欢的顔色。

要创建一个新的颜色,在调色板里如果有这个对应值那当然没问题。那有没有可能你想要的顔色在调色板里也没有呢?关于这个解决办法还不知道。总之,先从有对应值的来做做看吧。

首先取出现在正在使用的调色板。调色板是由「HSSFPalette」类定义的。其定义如下:

  • java.lang.Object
  • org.apache.poi.hssf.usermodel.HSSFPalette
  • public class HSSFPalette extends java.lang.Object

构造方法虽然有一个,但仍然是protected的,所以也不能直接使用,而要用「HSSFWorkbook」类的「getCustomPalette」方法来取得调色板对象。

getCustomPalette
public HSSFPalette getCustomPalette()
--

非常遗憾,该方法也是没有任何说明,原因不明。先按下面的方法使用吧。

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFPalette palette = workbook.getCustomPalette();

调色板取得后,就可以使用「HSSFPalette」类的「setColorAtIndex」方法设定自己想要的顔色了。

setColorAtIndex
public void setColorAtIndex(short index,
              byte red, byte green, byte blue)
Sets the color at the given offset 

Parameters:
  index - the palette index, between 0x8 to
          0x40 inclusive
  red - the RGB red component, between 0
          and 255 inclusive
  green - the RGB green component, between 0
          and 255 inclusive
  blue - the RGB blue component, between 0
          and 255 inclusive

第一个参数设定你想要顔色的主色调的index号,如上一节一样,使用「HSSFColor」类的子类。

HSSFColor.RED.index

剩下的三个参数,通过设定RGB值来调节你想要的顔色。每一个都可以设定0~255的值。

HSSFWorkbook workbook = new HSSFWorkbook();

HSSFPalette palette = workbook.getCustomPalette();
palette.setColorAtIndex(HSSFColor.RED.index,
                 (byte)100, (byte)0, (byte)0);

示例程序

自己做做看吧,首先要确定你想要顔色的主色调。

import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.util.HSSFColor;

public class POISample{
  public static void main(String[] args){
    HSSFWorkbook workbook = new HSSFWorkbook();

    HSSFSheet sheet = workbook.createSheet();

    HSSFRow row = sheet.createRow(1);
    HSSFCell cell = row.createCell((short)1);

    HSSFCellStyle style = workbook.createCellStyle();
    style.setFillForegroundColor(HSSFColor.RED.index);
    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    cell.setCellStyle(style);

    cell.setCellValue("RED");

    FileOutputStream out = null;
    try{
      out = new FileOutputStream("sample.xls");
      workbook.write(out);
    }catch(IOException e){
      System.out.println(e.toString());
    }finally{
      try {
        out.close();
      }catch(IOException e){
        System.out.println(e.toString());
      }
    }
  }
}

上面程序对一个单元格设定了红色「HSSFColor.RED」的主色调,运行结果如下:

调色板示例

下面就对这个顔色通过RGB值来做一些改动吧。

import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.usermodel.HSSFPalette;

public class POISample{
  public static void main(String[] args){
    HSSFWorkbook workbook = new HSSFWorkbook();

    HSSFPalette palette = workbook.getCustomPalette();
    palette.setColorAtIndex(HSSFColor.RED.index,
                    (byte)128, (byte)0, (byte)0);

    HSSFSheet sheet = workbook.createSheet();

    HSSFRow row = sheet.createRow(1);
    HSSFCell cell = row.createCell((short)1);

    HSSFCellStyle style = workbook.createCellStyle();
    style.setFillForegroundColor(HSSFColor.RED.index);
    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    cell.setCellStyle(style);

    cell.setCellValue("RED");

    FileOutputStream out = null;
    try{
      out = new FileOutputStream("sample.xls");
      workbook.write(out);
    }catch(IOException e){
      System.out.println(e.toString());
    }finally{
      try {
        out.close();
      }catch(IOException e){
        System.out.println(e.toString());
      }
    }
  }
}

上面程序使用调色板对红色「HSSFColor.RED」进行了一些改动,之后用前面一个例子的方法同样设定红色,但得到的结果却是不一样的。运行结果如下:

调色板示例

因为调色板在一个workbook里是共有的,所以如果用调色板改变了某一种顔色,下次使用时,相同的顔色就全部改变了。

Leave a Reply

We will keep You Updated...
Sign up to receive breaking news
as well as receive other site updates!
Sponsors


Featured Video
Enter featured video code here.
Sponsors
Enter Google Analytics Code Here