我正在尝试在 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.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值获取颜色的方法。假设我想要创建一个XSSFColor使用java.awt.Color,我应该能够创建一个Color对象使用任意数量的构造函数。来自https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html,这是我尝试过的内容; 所有这些都会抛出“未找到init方法”的异常:
var C = CreateObject(
"java",
"java.awt.Color"
);
// constructor Color(int r, int g, int b)
// var c1 = C.init(197,217,241);
// constructor Color(int r, int g, int b, int a)
// var c1 = C.init(197,217,241,255);
// constructor Color (float r, float g, float b);
// var c1 = C.init(0.0, 0.5, 1.0);
现在,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有一个构造函数定义为
Color(int rgb) 使用指定的组合RGB值创建不透明的sRGB颜色,其中红色分量位于位16-23,绿色分量位于位8-15,蓝色分量位于位0-7。
很抱歉我不知道如何创建组合RGB值,因此无法尝试 :-(