2016-07-27 30 views
3

XSSFスプレッドシートでカスタム塗りつぶし色を設定しようとしていますが、これまでのところ、java.awt.Colorまたはorgで使用可能なデフォルトの色に基づいて色を追加することしかできませんでした。 apache.poi.ss.usermodel.IndexedColors。ここに私はその作品があります:Apache POI XSSF設定fillForegroundColor from RGB

// 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オブジェクトを作成できるはずです。 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が持っています

カラー(INT RGB)のように定義コンストラクタ は、ビット8-15の緑色成分、及び青色成分のビット16-23における赤色成分からなる指定合成されたRGB値を使って、不透明なsRGBカラーを作成しビット0-7。

私はどのように

答えて

5

:-(しようとすることはできませんよ合成されたRGB値を作成するには考えている怖い実際

「initメソッドが見つかりませんでした」完全なエラーメッセージが言う(強調鉱山):

いずれかの指定されたメソッド名と 引数の型またはinitメソッドとは方法がオベされていませんColdFusionが確実に解読できない引数タイプ でrloaded。 ColdFusionでは、指定された引数と一致する2つのメソッド が見つかりました。これがJavaオブジェクトで、メソッドが存在することを確認した場合は、 javacast関数を使用して のあいまい性を減らしてください。

とは異なり、javaは厳密に型指定されています。したがって、java.awt.Colorのようなクラスには、同じ数値の複数のコンストラクタを含めることができますが、データ型は異なります。たとえば、次のように

  • Color(float r, float g, float b)
  • Color(int r, int g, int b)

CFが弱い型指定されているので、あなたが呼び出したいものをコンストラクタのかわかりません。あいまいさを解決するには、すなわち、パラメータにjavacast()を使用する必要があります。

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

サイドノートでは、あなたもいるjava.awtを作成することができます。静的Color.decode()メソッドを使用した16進文字列のオブジェクトのカラー:

var color = CreateObject("java","java.awt.Color").decode("##323232"); 
+1

リー、あなたは男です。私はそれが何か単純でなければならないと考えました。私はdecode()メソッドを試しましたが、間違って実装しているに違いないと誓っています。そして、明らかに私はCreateObjectと一緒にjavacastを研究する時間を取らなかった... CF文書の何も私に飛び出さなかった。 – earachefl

+0

私はあなたが意味することを知っています。 Javaのものは少し面倒です。とにかく助けてくれてうれしいです:-) – Leigh

関連する問題