У меня есть сервлет, который принимает в набор данных, обрабатывает его и записывает его либо в файл excel, либо в виде текстовой страницы в зависимости от представления формы. Вся обработка выполняется в соответствующей модели с использованием Apache POI при обработке Excel. Я пытаюсь изменить это так, чтобы он цветовой код строк на основе данных, содержащихся, однако, после применения цвета к строке, когда я пишу книгу в fileoutputstream, цветов там нет. Я обработки данных в файл первенствовать как таковой:Настройка цвета каждой ячейки таблицы в строке
MCVE
package mcve;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Set;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class MCVE {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException, IOException {
LinkedHashMap<Integer, String> testReport = new LinkedHashMap<>();
testReport.put(0, "CPU");
testReport.put(1, "App");
testReport.put(2, "Other");
testReport.put(3, "Memory");
testReport.put(4, "Power");
testReport.put(5, "Disk");
File file = new File("C:/SplunkTesting/report.xlsx");
FileOutputStream out = new FileOutputStream(file);
writeToExcel(testReport).write(out);
out.flush();
out.close();
}
private static XSSFWorkbook writeToExcel(LinkedHashMap<Integer, String> formattedReport) {
try {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
int rowIndex = sheet.getLastRowNum();
Set<Integer> keySet = formattedReport.keySet();
for (Integer key : keySet) {
XSSFRow row = sheet.createRow(rowIndex++);
String line = formattedReport.get(key);
String[] strArr = line.split(",");
int cellCount = 0;
for (String str : strArr) {
XSSFCell cell = row.createCell(cellCount++);
cell.setCellValue(str);
}
XSSFCellStyle style = workbook.createCellStyle();
if (line.contains("App")) {
style.setFillForegroundColor(IndexedColors.BLUE.getIndex());
} else if (line.contains("CPU")) {
style.setFillForegroundColor(IndexedColors.GREEN.getIndex());
} else if (line.contains("Disk")) {
style.setFillForegroundColor(IndexedColors.GOLD.getIndex());
} else if (line.contains("Memory")) {
style.setFillForegroundColor(IndexedColors.INDIGO.getIndex());
} else if (line.contains("Network")) {
style.setFillForegroundColor(IndexedColors.LAVENDER.getIndex());
} else if (line.contains("Power")) {
style.setFillForegroundColor(IndexedColors.MAROON.getIndex());
} else {
style.setFillForegroundColor(IndexedColors.WHITE.getIndex());
}
style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
row.setRowStyle(style);
}
return workbook;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Я получаю файл первенствовать по-прежнему, но форматирование не существует. Что я делаю не так?
Вы пытались отладить этот код? Также обратите внимание, что 'setFillBackgroundColor' является * faux ami * [вы, вероятно, хотите' fillForegroundColor'] (http://stackoverflow.com/questions/17243529/cant-set-fill-color-apache-poi-excel-workbook) –
Да, я прошел через него, и он меняет стиль, как я хочу. Но я попробую это предложение прямо сейчас. –
Хорошо, попробуйте использовать 'fillForegroundColor', как показано в связанном вопросе –