Java 是否可以使用Apache POI XSSF设置活动范围?

Java 是否可以使用Apache POI XSSF设置活动范围?,java,apache-poi,xssf,Java,Apache Poi,Xssf,我正在使用ApachePOIXSSF阅读和编写Excel工作表 我知道我可以使用Sheet.setActiveCell(CellAddress地址)在工作表上设置活动单元格 但是,我想将其设置为一个包含多个单元格的范围,如下图所示: 当我使用Excel保存包含多个选定单元格的工作表时,这些单元格将在打开保存的文件时被选中。 有没有办法用POI XSSF实现这一点?您可以使用以下行在excel中实现ranke作为活动单元格: sheet.setActiveCell("A1:B2");

我正在使用ApachePOIXSSF阅读和编写Excel工作表

我知道我可以使用
Sheet.setActiveCell(CellAddress地址)
在工作表上设置活动单元格

但是,我想将其设置为一个包含多个单元格的范围,如下图所示:

当我使用Excel保存包含多个选定单元格的工作表时,这些单元格将在打开保存的文件时被选中。
有没有办法用POI XSSF实现这一点?

您可以使用以下行在excel中实现ranke作为活动单元格:

    sheet.setActiveCell("A1:B2");
希望能有帮助

从3.16开始,setActiveCell(String)方法已弃用,您不想使用弃用的方法,我建议您创建自己的CellAddress:

public class CellRangeAddress extends CellAddress {

    private CellAddress start;
    private CellAddress end;

    public CellRangeAddress(final CellAddress start, final CellAddress end) {
        super(start);
        this.start = start;
        this.end = end;
    }


    @Override
    public String formatAsString() {
        if (end != null) {
            return start.formatAsString() + ":" + end.formatAsString();
        }
        return super.formatAsString();
    }
}
并使用类似于:

sheet.setActiveCell(new CellRangeAddress(new CellAddress("A1"), new CellAddress("B2")));

这不是最干净、最好的方法,但可以在没有警告的情况下工作

您可以使用以下行在excel中实现ranke作为活动单元格:

    sheet.setActiveCell("A1:B2");
希望能有帮助

从3.16开始,setActiveCell(String)方法已弃用,您不想使用弃用的方法,我建议您创建自己的CellAddress:

public class CellRangeAddress extends CellAddress {

    private CellAddress start;
    private CellAddress end;

    public CellRangeAddress(final CellAddress start, final CellAddress end) {
        super(start);
        this.start = start;
        this.end = end;
    }


    @Override
    public String formatAsString() {
        if (end != null) {
            return start.formatAsString() + ":" + end.formatAsString();
        }
        return super.formatAsString();
    }
}
并使用类似于:

sheet.setActiveCell(new CellRangeAddress(new CellAddress("A1"), new CellAddress("B2")));

这不是最干净、最好的方法,但可以在没有警告的情况下工作

谢谢你的回答,这很有效。然而,这种方法似乎已被弃用,但我找不到合适的替代方法。例如,这不起作用,因为setActiveCell只接受CellAddress作为输入:
CellRangeAddress adr=CellRangeAddress.valueOf(“A1:B2”);getSheetAt(wb.getActiveSheetIndex()).setActiveCell(adr)您使用的是哪个版本我使用的是3.16,它似乎是最新的版本。我编辑了我的答案,仍然不是最好的解决方案,但有一个选择为什么您使用如此复杂的方法来构建
CellRangeAddress
?为什么不这样做呢?谢谢你的回答,这很有效。然而,这种方法似乎已被弃用,但我找不到合适的替代方法。例如,这不起作用,因为setActiveCell只接受CellAddress作为输入:
CellRangeAddress adr=CellRangeAddress.valueOf(“A1:B2”);getSheetAt(wb.getActiveSheetIndex()).setActiveCell(adr)您使用的是哪个版本我使用的是3.16,它似乎是最新的版本。我编辑了我的答案,仍然不是最好的解决方案,但有一个选择为什么您使用如此复杂的方法来构建
CellRangeAddress
?为什么不直接做呢?