Я пытаюсь установить пользовательские цвета заливки в электронной таблице XSSF, но до сих пор они могли добавлять цвета только на основе цветов по умолчанию, доступных в java.awt.Color или org. apache.poi.ss.usermodel.IndexedColors. Вот что у меня есть:Настройка Apache POI XSSF fillForegroundColor от 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. Предполагая, что я хочу создать XSSFColor с помощью java.awt.Color, я должен был бы создать объект Color с использованием любого числа конструкторов. От https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html, вот что я пробовал; все этот бросок «метод инициализации не был найден»:
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 имеет a Конструктор, определяемый как
Цвет (int rgb) Создает непрозрачный цвет sRGB с указанным комбинированным значением RGB, состоящим из красного компонента в битах 16-23, зеленого компонента в битах 8-15 и синего компонента в бит 0-7.
Я боюсь, что я понятия не имею, как создать комбинированное значение RGB, так я не в состоянии попробовать :-(
Ли, вы - мужчина. Я подумал, что это должно быть что-то простое. Клянусь, я попробовал метод decode(), но должен был выполнить его неправильно. И, очевидно, я не нашел времени для исследования javacast в сочетании с CreateObject ... хотя ничего в CF-документах не появилось у меня. – earachefl
Я знаю, что вы имеете в виду. Материал java немного более утончен. В любом случае рад, что это помогло :-) – Leigh