【发布时间】:2025-11-23 16:30:01
【问题描述】:
您好,我正在使用 apache poi 生成 excel 文件。我正在使用 XSSFWorkbook 格式。我正在尝试将注意力集中在生成的 excel 文件的第一个单元格上。
我试过下面的代码sn-p。
try {
Sheet sheet = workbook.getSheetAt(0);
workbook.setActiveSheet(0);
Cell cell = sheet.getRow(0).getCell(0);
cell.setAsActiveCell();
sheet.setActiveCell(cell.getAddress());
sheet.showInPane(0, 0);
} catch (IllegalArgumentException e) {
LOGGER.error("Failed to set active sheet and cell.", e);
}
我也看过这个SO question。该解决方案似乎对我不起作用。有人可以帮我吗?
P.S:我使用的是 apache poi 3.15 版。
更新 1:
我还有一个冻结窗格,左上角单元格为 C1。冻结未正确显示。
我试过下面的代码
public void setActiveCell(Workbook workbook, int sheetIndex, int row, int column) {
Sheet sheet = workbook.getSheetAt(sheetIndex);
CellAddress cellAddress = new CellAddress(row, column);
sheet.createFreezePane(2, 0);
((XSSFSheet) sheet).getCTWorksheet().getSheetViews().getSheetViewArray(0).getPane()
.setTopLeftCell("C1");
((XSSFSheet) sheet).setActiveCell(cellAddress);
// ((XSSFSheet) sheet).getCTWorksheet().getSheetViews().getSheetViewArray(0)
// .setTopLeftCell(cellAddress.formatAsString());
// ((XSSFSheet) sheet).setActiveCell(cellAddress);
}
我将上述代码称为setActiveCell(workbook, 0, 0, 0);。可以确保工作簿不为空,并且至少包含一张工作表。上面的代码既没有显示 C1 单元格(创建的窗格的左上角单元格),也没有显示 A1 单元格(活动单元格集)。
更新 2:
根据@AlexRichter 的回答,以下代码适用于我:
public void setActiveCell(Workbook workbook, int sheetIndex, int row, int column) {
Sheet sheet = workbook.getSheetAt(sheetIndex);
CellAddress cellAddress = new CellAddress(row, column);
sheet.createFreezePane(2, 0);
((XSSFSheet) sheet).getCTWorksheet().getSheetViews().getSheetViewArray(0).getPane()
.setTopLeftCell("C1");
((XSSFSheet) sheet).getCTWorksheet().getSheetViews().getSheetViewArray(0)
.setTopLeftCell(cellAddress.formatAsString());
}
【问题讨论】:
-
我认为有一种方法可以用于同一张 sheet.showInPane() 。试试这个方法,也可以在这里查看这个讨论apache-poi.1045710.n5.nabble.com/…
-
@yaswanth:
.getPane().xsetTopLeftCell().setTopLeftCell("C1")不是我建议的,也不会编译。 -
抱歉打错了。我已经更新了代码
-
@yaswanth:好的,但现在我无法重现你的行为。使用您的代码 sn-p 按预期对我有用,默认
XSSFSheet。列A:B是固定的,可滚动窗格以列C开头,活动单元格是固定窗格中的A1。
标签: java excel apache-poi