原文链接  http://javapolo.iteye.com/blog/1604501

最近在项目的开发中使用到了apache poi,该组件可以让我们方便的操作excell,该工具非常容易上手,但使用过程中也发现了一些问题,就是当你操作excell文档为其设置颜色时,该文档所能设的颜色最多只能是56种(poi自身提供的系统颜色,例如红,黄等,我们可以通过对已有的色块进行调色达到我们自定义颜色的目的,在PaletteRecord类里面初始化),也就是说poi加载到内存之后,它所维护的只有56块色块,且系统只有一份,所以在一个excell生成过程中,它必须锁定该所有的调色块,待该excell文件生成之后,才能将该资源释放,供下个线程使用,而且在设置excell颜色过程中我们必须标识哪些调色块已经使用,哪些没用,这样我们才能防止调好的背景颜色被覆盖,在poi中自定义颜色一般通过HSSFPalette(调色板)对象调用setColorAtIndex(short index, byte red, byte green, byte blue)方法, 
   /**   
     * @param 设置颜色块的索引,从 0x8 到 0x40

这个通过代码可以得到:

  

 @Test
public void Test01(){
Map map=HSSFColor.getIndexHash();
Set<Map.Entry<Integer,HSSFColor>> set = map.entrySet();
for(Map.Entry<Integer,HSSFColor> entry:set){
System.out.print(entry.getValue().getIndex()+"\t");
}
}

* @param red 红色, between 0 and 255 inclusive 
     * @param green 绿色, between 0 and 255 inclusive 
     * @param blue 蓝色, between 0 and 255 inclusive 
     */ 
    public void setColorAtIndex(short index, byte red, byte green, byte blue) 
    { 
        _palette.setColor(index, red, green, blue); 
    } 
通过该方法对调色块进行调色,调完色后,则该调色块对应的颜色就是通过最新的rgb值调出来的,下一步,例如你要设某单元格的背景色,你只要调用样式style.setFillForegroundColor(index)就可以了,在控制调色块的使用情况时可以采用List<Map>的集合来实现,通过Map<索引,使用情况>来标识一个色块的使用情况, 
public class ColorIncreaseUtil {

public static int colorindex; 
public static Map<String, Integer> maps;

/** 
* 开始颜色索引 
*/ 
public static void beginColorIndex() { 
maps = new HashMap<String, Integer>(); 
for (int i = 8; i <= 64; i++) { 
maps.put(i + "", 0); 

colorindex = 8; 
}

/** 
* 颜色索引值增加 
*/ 
public static short getColorIndexIncrease() {

if (colorindex > 64) 
return 0; 
colorindex = colorindex + 1; 
while (maps.get("" + (colorindex)).intValue() == 1) {

colorindex = colorindex + 1; 

return (short) colorindex;

}

/** 
* 设置摸个颜色板已经占用 

* @param index 
*/ 
public static void setFlag(short index) { 
maps.put(index + "", 1); 

通过这样设置,我们就可以方便的定义我们的颜色了。

poi自定义颜色设置(转)的更多相关文章

  1. POI 怎么设置Excel整列的CellStyle啊

    POI 怎么设置Excel整列的CellStyle啊,而不是循环每个Cell.因为现在是生成Excel模板,不知道客户会输入多少行. 问题补充: 指尖言 写道 好像没有这个方法,CellStyle是C ...

  2. POI中设置Excel单元格格式样式(居中,字体,边框等)

    创建sheet什么的就不多说了,直接进入正题 HSSFCellStyle cellStyle = wb.createCellStyle();   一.设置背景色: cellStyle.setFillF ...

  3. POI中设置Excel单元格格式

    引用:http://apps.hi.baidu.com/share/detail/17249059 POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWork ...

  4. POI HSSFCellStyle 设置 Excel 单元格样式

    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  5. poi excel 设置边框字体行高行宽

     final HSSFSheet sheet = wb.createSheet(sheetName + "_" + n);   System.out.println("s ...

  6. java操作Excel的poi 格式设置

    格式设置 package com.java.poi; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi. ...

  7. Apache POI环境设置

    本章将指导完成Apache POI在Windows和Linux系统为基础的设置过程. Apache POI可以轻松地安装和集成,下面没有任何复杂的设置过程,通过几个简单步骤,目前Java环境,用户管理 ...

  8. POI样式设置详细解析

    ````````由于看到网上对poi做报告合成的内容不是很全面, ````````自己最近又有新的需求, 作为勉励, 会慢慢补充详细的样式设置, 希望也能帮到各位 设置段落方向 (默认是纵向, 这里可 ...

  9. POI颜色设置

    package com.java.connect.poi; import java.io.FileOutputStream; import java.io.IOException; import or ...

随机推荐

  1. SignalTap II进阶学习

    1. 多级触发 有时候我们可能需要利用多个信号(最多10个)依次触发后,观察特定的值.这这时候我们可以增加触发条件来满足我们的需求. 多个触发信号如上图所示,只有依次发生SW[0]上升沿. SW[1] ...

  2. System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes”

    “System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes” 或 ...

  3. S5第一次月考

    # Python五期月考一 # 1 介绍 # 满分100分,90分及格 # # 考试范围: # 1.Python语法 # 2.数据类型 # 3.流程控制 # 4.函数 # 5.模块 # # 考试时间: ...

  4. s5_day13作业

    #对之前文件进行的增删改查操作实现日志操作,日志输出用户进行过的操作. def log(): import logging logger_obj=logging.getLogger() logger_ ...

  5. 动态切换数据库(EF框架)

             文章简略:本文测试项目为Silverlight+EF+RIA Service动态切换数据库的问题 通常,Ado.net EntityFramework的数据库连接字符串Connect ...

  6. Windows安装多个Tomcat服务

    1.下载tomcat解压,并复制三份(用压缩版的不要用安装版的) 2.配置环境变量CATALINA_HOME和CATALINA_BASE .改端口 修改文件server.xml,修改3个端口号 < ...

  7. JavaScript与Java数据类型的区别

    今天开始正式认真学习js,虽然在平常j2ee开发中也经常用到JS但并不精通,这次随笔记下js与Java数据类型的不同之处 Number 与java不同,js作为弱类型语言即使在浮点数与整数上也未作明确 ...

  8. 把 html标签转化为 html标签代码

    HttpUtility.HtmlEncode(table.Rows[0]["footnote"].ToString());

  9. RegExp方法解析

    RegExp 正则表达式(regular expression)的缩写 语法: 显式构造函数 var rg= new RegExp(pattern, attributes) 隐式构造函数 var rg ...

  10. NOIP Mayan游戏

    描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消 ...