当前位置: 首页 > 知识库问答 >
问题:

Apache POI XSSF从RGB设置fillForegroundColor

楚良平
2023-03-14

我试图在XSSF电子表格中设置自定义填充颜色,但到目前为止只能根据java.awt.颜色或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值获得颜色。假设我想使用java创建一个XSSFColor。awt。颜色,我应该能够使用任意数量的构造函数创建颜色对象。从…起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.颜色有一个构造函数定义为

颜色(int rgb)使用指定的组合rgb值创建不透明的sRGB颜色,该rgb值由位16-23中的红色分量、位8-15中的绿色分量和位0-7中的蓝色分量组成。

恐怕我不知道如何创建组合RGB值,因此无法尝试:-(

共有1个答案

谷梁英毅
2023-03-14

"未找到init方法"

实际上,完整的错误信息显示(我的重点):

没有具有指定方法名称和参数类型的方法,或者init方法重载了ColdFusion无法可靠破译的参数类型。ColdFusion找到了2个与提供的参数匹配的方法。如果这是一个Java对象,并且您验证了该方法的存在,那么使用javacast函数来减少歧义。

与CF不同,java是强类型的。所以像java这样的类。awt。颜色可以包含多个具有相同数量参数但数据类型不同的构造函数。例如:

  • 颜色(浮点数r、浮点数g、浮点数b)

由于CF是弱类型的,所以不确定要调用哪些构造函数。要解决歧义,您需要对参数使用javacast(),即:

var color = CreateObject( "java","java.awt.Color").init(
         javacast("int", redValue)
        , javacast("int", greenValue)
        , javacast("int", blueValue)
   );

另外,您还可以使用静态Color.decode()方法从十六进制字符串创建java.awt.颜色对象:

 var color = CreateObject( "java","java.awt.Color").decode("##323232"); 
 类似资料:
  • 我试图使用下面的XSSFColor方法设置RGB颜色值 我正在传递短值,但是不管RGB值是多少,我的前景都会被设置为黑色。我还没有发现这是为什么——有什么想法吗?

  • 我试图设置文本背景颜色使用 是红色、绿色、蓝色值来自数据库,基于值set编程时,它的颜色为暗绿色,但我运行程序时它将显示红色

  • 问题内容: 我已经看到人们在Objective- C中做到这一点,但是我很快就遇到了麻烦。我已经从图片中获得了像素的颜色,但是现在我需要分别获取红色,绿色和蓝色的值。这是我所拥有的(h,w和rgb是整数,image.getPixelColor(CGPoint)返回UIColor): 如何将此UIColor更改为红色,绿色和蓝色值?谢谢! 问题答案: 您可以将UIColor转换为CIColor,然后

  • 问题内容: 在PHP中,将RGB三元组转换为HSV值的最直接方法是什么? 问题答案:

  • 我正在尝试将一行中的单元格复制到下一行。复制注释和单元格值也可以。现在,如果我在Excel中设置了背景色,并想将其复制到新的单元格中,它不起作用。要么复制后没有颜色,要么背景是黑色的。我试过了: 几个小时后没有任何进展,我查看了要复制的单元格的前景和背景色。在那里,我发现了RGB值。现在我想用这些值制作一个新的Cell样式,但这不起作用。首先,我尝试这个: 但有一条错误消息: 那有什么问题? 谢谢

  • RGB灯模块会根据接收到的信号或编程指令发出不同的灯光颜色和亮度,可快速制作出红绿灯、手电筒、小夜灯等精彩案例。 净重量:7.3g 体积:24×24×14mm 参数 工作电压:DC 5V 抗跌落能力:1.5m 工作温度:-10℃~55℃ 工作湿度:<95% 特点 丰富色彩表现