2016-01-27 2 views
0

У меня есть сервлет, который принимает в набор данных, обрабатывает его и записывает его либо в файл 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; 
} 
} 

Я получаю файл первенствовать по-прежнему, но форматирование не существует. Что я делаю не так?

+0

Вы пытались отладить этот код? Также обратите внимание, что 'setFillBackgroundColor' является * faux ami * [вы, вероятно, хотите' fillForegroundColor'] (http://stackoverflow.com/questions/17243529/cant-set-fill-color-apache-poi-excel-workbook) –

+0

Да, я прошел через него, и он меняет стиль, как я хочу. Но я попробую это предложение прямо сейчас. –

+0

Хорошо, попробуйте использовать 'fillForegroundColor', как показано в связанном вопросе –

ответ

1

Решение для меня состояло в том, чтобы установить стиль в цикле создания ячейки и значения. В противном случае каждая ячейка при создании перезаписывает форматирование строк, поэтому для меня это не срабатывало. Это имеет место, даже если вы задаете форматирование строк после создания ячейки.

Смежные вопросы