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里是共有的,所以如果用调色板改变了某一种顔色,下次使用时,相同的顔色就全部改变了。