/ / Використання спеціальних кольорів за допомогою SXSSF (Apache POI) - java, excel, apache-poi

Використання користувацьких кольорів за допомогою SXSSF (Apache POI) - java, excel, apache-poi

Я намагаюся написати величезний файл excel, моя вимога дозволяє мені написати рядок і забути, тому я використовую SXSSF що дозволяє зберегти в пам'яті лише декілька рядків і всі інші записані в документ. це допомагає подолати виняток із незабутніх пам’яток для великих файлів.

але мені також потрібно встановити стилі для комірок за допомогоюsxssf робочий зошит. я не в змозі знайти спосіб визначення та використання користувальницьких кольорів у SXSSF (як, наприклад, у XSSF, ми можемо визначити спеціальний колір безпосередньо, а в HSSF ми можемо замінити запис у палітрі на спеціальний колір)

я не можу знайти спосіб отримати доступ до палітри Робочий зошит SXSSF.

Я не можу створити нове Палітра HSSF як захищений конструктор.

Єдиний спосіб, який зараз видається можливим - цеякось знайти подібний колір зі списку всіх заздалегідь визначених кольорів і використати його замість оригіналу (але це вимагатиме наявності альго-кольору rgb, що було б ще одним завданням)

Може хтось запропонує вирішити (або, можливо, запропонувати примітивний алгоритм відповідності кольору rgb)

Відповіді:

11 за відповідь № 1

Отже, після невеликого пошуку в Інтернеті тачитаючи документи, я отримав підказку, що SXSSF - це фактично обгортка навколо XSSF, тому я набрав CellStyle, повернуту робочою книжкою SXSSF до XSSF, і міг використовувати XSSFColor безпосередньо для генерування кольорів.

SXSSFWorkbook workbook = new SXSSFWorkbook(50);
Sheet sheet = workbook.createSheet("Image Data");
....
Cell cell = row.createCell(j);
cell.setCellValue(j);
XSSFCellStyle cs1 = (XSSFCellStyle) workbook.createCellStyle();
cs1.setFillForegroundColor(new XSSFColor(new java.awt.Color(red,green,blue)));
cs1.setFillPattern(CellStyle.SOLID_FOREGROUND);
cell.setCellStyle(cs1);

4 для відповіді № 2

Щоб уникнути необхідності набору тексту для cellStyles,спершу створіть XSSFWorkbook з cellStyles (XSSFCellStyle), застосувавши власні кольори, а потім оберніть його конструктором SXSSFWorkbook, як зразок нижче:

/**
* Sample based on POI <a href="http://poi.apache.org/spreadsheet/how-to.html#sxssf">Spreadsheet How-To</a>.
*
* @see <a href="https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html">SXSSFWorkbook</a>
*/
public static void main(String[] args) throws Throwable {

XSSFWorkbook xssfWorkbook = new XSSFWorkbook();

XSSFColor colorGrey = new XSSFColor(new Color(210, 210, 210));
XSSFCellStyle cellStyleGrey = xssfWorkbook.createCellStyle();
cellStyleGrey.setFillPattern(CellStyle.SOLID_FOREGROUND);
cellStyleGrey.setFillForegroundColor(colorGrey);

// keep 100 rows in memory, exceeding rows will be flushed to disk
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(xssfWorkbook, 100);
Sheet sheet = sxssfWorkbook.createSheet();

for (int rownum = 0; rownum < 1000; rownum++) {
Row row = sheet.createRow(rownum);
for (int cellnum = 0; cellnum < 10; cellnum++) {
Cell cell = row.createCell(cellnum);
String address = new CellReference(cell).formatAsString();
cell.setCellValue(address);

// for even rows apply the grey cellStyle
if (rownum % 2 == 0) {
cell.setCellStyle(cellStyleGrey);
}
}

}

// Omitted asserts block from original sample...

FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");
sxssfWorkbook.write(out);
out.close();

// dispose of temporary files backing this workbook on disk
sxssfWorkbook.dispose();
}