java - 如何在特定栏上书写?

标签 java apache-poi

我有一个包含 3 列的 Excel 文件。我已经将“B”列存储到数组列表中,并检查该值是否重复。现在我在将“重复”值写入“C”列时遇到问题。如何在特定列上书写?

这是我的代码

FileInputStream file = new FileInputStream(new File(
            "file name"));

    XSSFWorkbook workbook = new XSSFWorkbook(file);     
    XSSFSheet sheet = workbook.getSheetAt(0);       
    Iterator<Row> rowIterator = sheet.iterator();
    ArrayList<String> col = new ArrayList<String>();
    while (rowIterator.hasNext()) {
        Row row = rowIterator.next();
        System.out.println(row.getRowNum());
        Iterator<Cell> cellIterator = row.cellIterator();

        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            if(cell.getColumnIndex()==1) {                  
                col.add(cell.getStringCellValue());
                System.out.print(cell.toString());
            }
        }
        System.out.println();           
    }
    for(int a = 0; a < 14; a++) {
        if(col.get(a).equals("Order ID")) {
            if(col.get(a).equals(col.get(a+1))) {
                System.out.println("ROW no "+a+"Double Order");
                }
        } else {
            if(col.get(a).equals(col.get(a+1)) || col.get(a).equals(col.get(a-1))) {
                if(col.get(a).trim().length()>0) {
                    System.out.println("ROW no "+a+"Double Order");
                col.add("Double");
                }
            }
        }
    }

    FileOutputStream fileOut = new FileOutputStream("file name");
    workbook.write(fileOut);
    fileOut.close();

最佳答案

您不需要迭代两次来分别识别和写入重复的行。您可以按照以下方式进行操作:

private static void identifyDuplicateOrders() throws IOException {
        FileInputStream file = new FileInputStream(new File("D:\\home\\test_in.xlsx"));
        final FileOutputStream fileOut = new FileOutputStream("D:\\home\\test_out.xlsx");
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(file);
            final XSSFSheet sheet = workbook.getSheetAt(0);
            final Iterator<Row> rowIterator = sheet.iterator();
            final Set<String> orderIds = new HashSet<String>();
            while (rowIterator.hasNext()) {
                final Row row = rowIterator.next();
                final int rowNumber = row.getRowNum();
                // SKIP HEADER
                if (rowNumber == 0) {
                    continue;
                }
                System.out.print("Row " + rowNumber);
                // GET ORDER ID CELL
                final Cell cell = row.getCell(1);
                if (!orderIds.add(cell.getStringCellValue())) {
                    // CREATE DOUBLE ORDER CELL
                    row.createCell(2).setCellValue("Duplicate");
                    System.out.println(" " + cell.toString() + " is Duplicate.");
                } else {
                    System.out.println(" Order is Unique");
                }
            }
            workbook.write(fileOut);
        } finally {
            workbook.close();
            file.close();
            fileOut.close();
        }

    }

关于java - 如何在特定栏上书写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38736968/

相关文章:

java - Mvn test 正确执行所有测试但是 mvn DTest 给出错误

java - java将所有数组元素重新初始化为零

java - 如何从 apache POI dataValidators 正确转换 ExplicitListValues 进行测试?

java - Jackson 多态反序列化与动态类型

java - 使用 BigQuery 时出现 HttpTransportOptions 的 ClassNotFoundException

java - HTML 标签查找器

java - POI 无法打开在 Excel 中打开的工作簿

java - 如何在Java、Apache POI中获取excel单元格字段的字体样式?

java - Excel 中的背景或前景合并单元格

java - 仅在需要时以百分比和小数点显示小数位