当前位置: 首页 > 知识库问答 >
问题:

设置一行中每个表格单元格的颜色

刘野
2023-03-14

我有一个servlet,它接收一组数据,进行处理,并根据表单提交将其写入excel文件或文本页面。在处理Excel时,所有的处理都在使用Apache POI的相应模型中进行。我正在尝试修改它,以便它根据所包含的数据对行进行颜色编码,但是,在将颜色应用于行之后,当我将工作簿写入文件输出流时,颜色不存在。我正在将数据处理成excel文件,如下所示:

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;
}
}

我仍然得到excel文件,但格式不存在。我做错了什么?

共有1个答案

高博涉
2023-03-14

对我来说,解决方案是在单元格创建和值设置循环中设置样式。否则,创建时的每个单元格都会覆盖行格式,这就是它对我来说失败的原因。即使您在创建单元格后设置行格式,情况也是如此。

 类似资料:
  • 问题内容: 我正在使用Vaadin,我想为我的表格/表格中的特定单元格设置背景色,或者如果无法为特定表格中的单元格设置背景色,我想至少为表格/表格中的特定单元格设置字体颜色。我有一个表格/表格的代码TableView如下: 表格/表格的内容类为: 如果可以将背景颜色设置为特定的单元格,或者至少设置字体颜色,并且您知道该怎么做,请写信。例如,在表格/表格中单元格的值为“ 1”的情况下,我想将其设置为

  • 我正在使用Vaadin,我想为网格/表格中的特定单元格设置背景颜色,或者如果无法为特定单元格设置背景颜色,我想至少为网格/表格中的特定单元格设置字体颜色。我有网格/表格的代码TableView如下: 网格/表的内容类为: 如果可以为特定单元格设置背景颜色,或者至少设置字体颜色,并且你知道怎么做,请写信。例如,网格/表格中单元格的值为“1”,我想将其设为红色,但如果单元格的值为“5”,我想将其设为绿

  • 我对java编程还是相当陌生的,很难理解一些概念,尤其是设置单元格值。(如果有人能用外行的话来解释这一点,那就太棒了!) 这是我的问题。。。 我有一个tableview,其中加载了一个来自derby数据库中数据表的。将数据添加到表中的for循环是我从在线查看中学到的,它对我来说确实有效。我想更进一步,所以这是我的挑战。。。 将有如下示例:第1行[toy,high等]第2行[box,Middle等]

  • 本文向大家介绍给单个表格的单元格设置背景色有什么方法?相关面试题,主要包含被问及给单个表格的单元格设置背景色有什么方法?时的应答技巧和注意事项,需要的朋友参考一下 ““ 这是什么? 不能直接写代码的吗?会自动过滤掉

  • 我有一个剑道网格,根据第一列中的值,COR ABA编号可以编辑也可以不编辑。因此,如果NOC代码=='C01',则COR ABA编号可编辑,否则不可编辑。 我通过在列和编辑处理程序中添加编辑事件来实现这一点,在不允许编辑的情况下,禁用HTML输入Kendo创建。(在栅格定义中,我有可编辑(true)开始)。我希望通过在网格的数据绑定事件中执行逻辑检查来实现这一点。也就是说,在绑定所有数据后,迭代数