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

如何使用Apache POI改变源excel表单与其他excel表单对比后的单元格颜色

梁丘经艺
2023-03-14

我一直在尝试更改从源excel文件中的精确匹配字符串的单元格颜色,当与另一个excel文件相比较时,无法做到与所有建议的各种示例。我将每个单元格条目视为字符串,并将该字符串与另一个excel工作表的行进行比较,如果找到匹配项,则希望将源字符串单元格颜色高亮显示为绿色。这里是我编写的代码,用于比较两张excel表格(Book1和Book2),如果有人能指导改变Book1中精确匹配条件的单元格颜色,需要帮助。或者,如果需要创建一个新的excel文件,其中重定向的内容来自Book1完全匹配条件?

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


import org.apache.poi.ss.usermodel.CellType;
import java.io.FileInputStream;
import java.io.IOException;


public class ExcelCompare {
public static void main(String[] srgs) throws IOException {

    FileInputStream fileInputStream1 = new 
    FileInputStream("C:\\Stuff\\JavaProject\\Book1.xlsx");
    XSSFWorkbook workbook1 = new XSSFWorkbook(fileInputStream1);
    XSSFSheet worksheet1 = workbook1.getSheet("Sheet1");
    int rowCount1= worksheet1.getPhysicalNumberOfRows();

    FileInputStream fileInputStream2 = new 
    FileInputStream("C:\\Stuff\\JavaProject\\Book2.xlsx");
    XSSFWorkbook workbook2 = new XSSFWorkbook(fileInputStream2);
    XSSFSheet worksheet2 = workbook2.getSheet("Sheet1");
    int rowCount2= worksheet2.getPhysicalNumberOfRows();

    System.out.println("Row count 1=" + rowCount1 + "  Row count 2 = " + rowCount2);


for (int i = 1; i < rowCount1; i++) {
    XSSFRow row1 = worksheet1.getRow(i);
//------------------------------ comapring Name --------------------------
    String namestr1 = "";
    XSSFCell name1 = row1.getCell(0);
    if (name1 != null) 
    {
        name1.setCellType(CellType.STRING);
        namestr1 = name1.getStringCellValue();
    }

    int j=1;
    int notNullRows=0;
    int rowCount2WithNulls = rowCount2;
    while(j<rowCount2WithNulls && notNullRows <= rowCount2 )
    {
        XSSFRow row2 = worksheet2.getRow(j);
        String namestr2 = "";
        j++;
        if (row2 != null)
        {
            notNullRows++;
            XSSFCell name2 = row2.getCell(0);
            if (name2 != null) {
                name2.setCellType(CellType.STRING);
                namestr2 = name2.getStringCellValue();
            }
        }
        else
        {
            rowCount2WithNulls++;
        }

         if(namestr1.equals(namestr2))
         {
             System.out.println("[Processing] :"+"NAME " + namestr1 + "=> Book 1 name = " + namestr1+ " Book 2 name = " + namestr2);
         }

    }

}

}

}

共有1个答案

秦珂
2023-03-14

您必须设置cellstyle,然后对其应用所需的颜色。

if (namestr1.equals(namestr2)) {
    System.out.println("[Processing] :" + "NAME " + namestr1 + "=> Book 1 name = " + namestr1 + " Book 2 name = " + 

    // add color
    XSSFCellStyle style = workbook1.createCellStyle();
    style.setFillForegroundColor(IndexedColors.GREEN.getIndex());
    style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    assert name1 != null;
    name1.setCellStyle(style);
    FileOutputStream fos = new FileOutputStream(BOOK1);
    workbook1.write(fos);
    fos.close();
}
 类似资料:
  • 我正在使用Apache POI读取零件编号电子表格中的数据。我在我们的数据库中查找零件编号,如果我们有零件的计算机辅助设计图纸,我将零件编号单元格涂成绿色,如果没有,我将其涂成红色。处理完成后,将保存电子表格。我遇到的问题是那列中的每个细胞都是绿色的。我已经完成了代码,查找零件号的逻辑工作正常,确定单元格应该是什么颜色以及设置颜色和填充的逻辑似乎也工作正常。知道我做错了什么吗? 谢谢

  • 我正在使用Poi.jar从excel表输入,想知道如何检查单元格是否为空。 现在我使用下面的代码。

  • 我正在尝试创建一个工作表,我们的员工可以点击一个单元格来突出显示他们正在执行任务,然后当他们完成任务时再点击它,如果他们需要清除突出显示,再点击它第三次。到目前为止,我已经提出了下面的工作,除了我必须点击另一个单元格,再次回到相同的一个,否则它将尝试编辑该单元格。我只想1点击颜色变化,另点击相同的单元格颜色变化2,另点击相同的单元格颜色变化3。有什么办法可以做到这一点吗?

  • 问题内容: 我想在不打开应用程序的情况下对excel中的单元格进行调整。我想和詹金斯一起做,这样我就可以自动化(回归)测试。(这甚至可能吗?) 正如您在附上的图像中看到的那样,我努力将excel中的“ N”值更改为“ Y”值,反之亦然。我想通过Jenkins的用户界面来实现这一目标。我已经听说过类似参数化构建的内容,但是我无法在任何网站上获得帮助,也无法提供有关该主题的更多信息。 我想要实现的是这

  • 问题内容: 我使用xlwt Python库在excel工作簿中写入数据。 现在我在将背景色添加到excel单元时遇到了一些问题。 例如,我在RGB(10,20,30)中有下一个颜色,最简单的方法是什么?有什么办法可以将此颜色设置为单元格吗? 问题答案: 在此示例中,我展示了如何设置单元格的背景色,您可以将其运行以得到结果:

  • 有人知道如何在excel中更改单元格特定文本的颜色吗。我正在使用apache poi,我可以发现如何更改整个单元格的文本颜色。但我只想要一个特定的文本。 A1单元有Hello World,我希望“Hello”为蓝色,“World”为绿色。我该怎么做?