Java Apache POI XSSF从RGB设置fillForegroundColor
我试图在XSSF电子表格中设置自定义填充颜色,但到目前为止,我只能根据java.awt.Color或org.apache.poi.ss.usermodel.IndexedColors中可用的默认颜色添加颜色。以下是我的有效方法:Java Apache POI XSSF从RGB设置fillForegroundColor,java,colors,coldfusion,apache-poi,coldfusion-10,Java,Colors,Coldfusion,Apache Poi,Coldfusion 10,我试图在XSSF电子表格中设置自定义填充颜色,但到目前为止,我只能根据java.awt.Color或org.apache.poi.ss.usermodel.IndexedColors中可用的默认颜色添加颜色。以下是我的有效方法: // setup var workbook= CreateObject( "java", "org.apache.poi.xssf.usermodel.XSSFWorkbook" ).Init(); var sheet = workbook.Crea
// setup
var workbook= CreateObject(
"java",
"org.apache.poi.xssf.usermodel.XSSFWorkbook"
).Init();
var sheet = workbook.CreateSheet('test');
var row = sheet.CreateRow( 0 );
// first cell, using IndexedColors
var cell = row.createCell( 0 );
cell.setCellValue('test');
var IC = CreateObject(
"java",
"org.apache.poi.ss.usermodel.IndexedColors"
);
var style = workbook.createCellStyle();
style.setFillPattern(style.SOLID_FOREGROUND);
style.setFillForegroundColor(IC.SKY_BLUE.getIndex());
cell.setCellStyle(style);
// second cell, using java.awt.Color
var cell2 = row.createCell( 1 );
cell2.setCellValue('test two');
var C = CreateObject(
"java",
"java.awt.Color"
);
var XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
var myColor = XSSFColor.init(C.BLUE);
var style2 = workbook.createCellStyle();
style2.setFillPattern(style2.SOLID_FOREGROUND);
style2.setFillForegroundColor(myColor);
cell2.setCellStyle(style2);
var FileOutputStream = CreateObject(
"java",
"java.io.FileOutputStream"
).Init( myFileName );
// Write the workout data to the file stream.
workbook.Write(
FileOutputStream
);
// Close the file output stream.
FileOutputStream.Close();
使所有的工作;然而,我仍然没有接近使用RGB值获得颜色。假设我想使用java.awt.Color创建一个XSSFColor,我应该能够使用任意数量的构造函数创建一个Color对象。从,这是我尝试过的;所有这些抛出“未找到init方法”:
现在,XSSFColor有一个构造函数,允许您传递字节数组;这就引出了我的下一个问题。暂且不考虑Java字节被签名的事实,如果我尝试创建一个字节数组并像这样将其传递给构造函数,就会抛出一个异常:
var bytes = javaCast(
"byte[]",
[
javaCast("byte", 50),
javaCast("byte", 50),
javaCast("byte", 50)
]
);
var XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
var c1 = XSSFColor.init(bytes); // throws "Unable to find a constructor for class org.apache.poi.xssf.usermodel.XSSFColor that accepts parameters of type ( [B )."
最后,java.awt.Color有一个定义为
颜色(整数rgb)
使用指定的组合RGB值创建不透明的sRGB颜色,该RGB值由位16-23中的红色分量、位8-15中的绿色分量和位0-7中的蓝色分量组成
恐怕我不知道如何创建组合RGB值,因此无法尝试:-(
“找不到init方法”
实际上,完整的错误信息显示(我的重点):
没有具有指定方法名称和名称的方法
参数类型或init方法被参数类型重载
ColdFusion无法可靠地破译
如果这是一个Java对象,并且
如果验证了该方法的存在,请使用javacast函数来减少
含糊不清
与CF不同,java是强类型的。因此,像java.awt.Color这样的类可以包含多个具有相同数量参数但不同数据类型的构造函数。例如:
颜色(浮点数r、浮点数g、浮点数b)
颜色(int r、int g、int b)
var color = CreateObject( "java","java.awt.Color").init(
javacast("int", redValue)
, javacast("int", greenValue)
, javacast("int", blueValue)
);
请注意,您还可以使用静态方法从十六进制字符串创建java.awt.Color对象:
利,你就是那个人。我想这一定很简单。我发誓我试过解码方法,但一定是错误地实现了它。显然,我没有花时间研究javacast与CreateObject的结合…尽管CF文档中没有任何内容突然出现在我面前。我知道你的意思。java的东西有点挑剔。无论如何,很高兴它有所帮助:-)
var color = CreateObject( "java","java.awt.Color").init(
javacast("int", redValue)
, javacast("int", greenValue)
, javacast("int", blueValue)
);
var color = CreateObject( "java","java.awt.Color").decode("##323232");