Java ApachePOI Excel行&;列索引

Java ApachePOI Excel行&;列索引,java,excel,apache-poi,Java,Excel,Apache Poi,我正在使用ApachePOI创建一个大型Excel电子表格,对于一个客户端来说,它的公式非常繁重,以后可能会用新公式修改我的程序代码。我遇到的一个大问题是,POI工作簿的行和列都是0索引的,而Excel公式处理文档时,就好像文档是1索引的一样。我现在正在使用帮助类进行转换: class RowHelper { public static int getCell(int col) { return col - 1; } public static Stri

我正在使用ApachePOI创建一个大型Excel电子表格,对于一个客户端来说,它的公式非常繁重,以后可能会用新公式修改我的程序代码。我遇到的一个大问题是,POI工作簿的行和列都是0索引的,而Excel公式处理文档时,就好像文档是1索引的一样。我现在正在使用帮助类进行转换:

class RowHelper {
    public static int getCell(int col) {
        return col - 1;
    }

    public static String getCellAddress(int row, int col) {
        return CellReference.convertNumToColString(col) + row;
    }
}
当我编辑文档中的行时,我会这样写:

posRow.getCell(RowHelper.getCell(189)).setCellFormula(String.format("COUNT(%1$s:%2$s)", RowHelper.getCellAddress(2, 177), RowHelper.getCellAddress(ActiveSheet.getPhysicalNumberOfRows(), 177)));
//=COUNT(FU2:FU477)

但是,这不是一个非常干净的代码,客户机以后也不容易使用。有更好的方法吗?

虽然与您的问题没有直接关系,但我发现自己用自己的方法包装了一些Excel类以进行自定义处理。例如,我不直接使用HSSF工作簿,而是使用包含HSSF工作簿的ExcelWorkbook类。我这样做的原因是向类中添加相关的helper方法,对于其他我不修改的方法,我只传递到HSSFWorkbook实例。您还可以扩展正在使用的相关类以覆盖该行为,但您可能需要查看它们的源代码,以确保不会破坏任何内容。

谢谢您的建议!我最终为每种类型(j工作簿、JSheet等)创建了新的类,就像您所做的那样,并实现了与原始类型相同的接口,因此我可以将它们作为相同的对象传递。