繁体   English   中英

如何使用Apache POI为相邻列设置单元格值?

[英]How do I set a cell value using Apache POI for an adjacent column?

我的目标是遍历2列已存在的Excel电子表格。 一个称为制造商,另一个称为DNC或请勿联系。

我想遍历我拥有的制造商列表,并用红色标记那些不应该联系的制造商,并在制造商名称列表旁边的相邻空白栏中标记一些无法联系他们的注释。 我在下面附加了我的代码。

我将每个制造商对象的字段存储在一个名为“ mu”的链接列表中,它们是“名称”和“ DNC_Reason”。

Iterator<Row> rowIterator2 = spreadsheet.iterator();
while (rowIterator2.hasNext()) {
    Row row2 = rowIterator2.next();
    Cell DNC_Reason = row2.getCell(1);
    if(row2.getCell(1) == null) {
        row2.createCell(1);
    }
    Iterator<Cell> cellIterator2 = row2.cellIterator();
    while (cellIterator2.hasNext()) {
        Cell cell = cellIterator2.next();
        Pattern p = Pattern.compile("[\\.$|,|;|'|\\s|-]|\\b(LLC|Company|Incorporated|Co|Manufacturer|The|Limited|Ltd|Inc)\\b", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(cell.getStringCellValue());
        String s = m.replaceAll("");
        for (Manufacturer mu : mfgs) {
            if (cell.getColumnIndex() == 0 && mu.getName().equals(s)) {
                cell.setCellStyle(style);
                DNC_Reason.setCellValue(mu.getDNCReason());
            }
        }
    }
}
  1. 您应该为您的not-to-be-contacted-manufacturers创建一个地图,名称为键,制造商为值。 然后,您可以使用containsKey而不是继续在mfgs-list迭代。
  2. 您应该使用rowIterator的结果遍历行。 您不需要其他迭代器。
  3. 局部变量不应以大写字母开头( DNC_Reason更好的名称是dncReasonCell

假定制造商单元已填充的示例代码getStringValue()如果未提供适当的值,则getStringValue()可能会导致NullPointerException ),初始化样式变量,并且您具有一个不被联系的制造商映射:

Iterator<Row> rowIterator = spreadsheet.rowIterator();
while (rowIterator.hasNext()) {
    Row row = rowIterator.next();
    Cell dncReasonCell = row.getCell(1);
    if (dncReasonCell == null) {
        dncReasonCell = row.createCell(1, CellType.STRING);
    }
    Cell manufacturerCell = row.getCell(0);
    String manufacturerNameForDncTest = Pattern
            .compile("[\\.$|,|;|'|\\s|-]|\\b(LLC|Company|Incorporated|Co|Manufacturer|The|Limited|Ltd|Inc)\\b", Pattern.CASE_INSENSITIVE)
            .matcher(manufacturerCell.getStringCellValue()).replaceAll("");
    if (notToBeContactedManufacturers.containsKey(manufacturerNameForDncTest)) {
        manufacturerCell.setCellStyle(style);
        dncReasonCell.setCellValue(notToBeContactedManufacturers.get(manufacturerNameForDncTest).getDNCReason());
    } else {
        dncReasonCell.setCellValue("");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM