嗨,我正在使用apache poi生成excel文件 . 我正在使用XSSFWorkbook格式 . 我试图将焦点放在生成的excel文件的第一个单元格上 .
我试过以下代码片段 .
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());
}
1 回答
不幸的是
XSSFSheet.showInPane
是马车 .以下适用于我:
它使用基本低级对象的
setTopLeftCell
.如果您有窗格,则必须为所需的窗格设置TopLeftCell . 例:
如果固定窗格不包含任何行,则似乎有异常 . 然后在
.getPane().setTopLeftCell
中设置行是没有意义的 . 然后必须在SheetView中的TopLeftCell
中直接设置顶行 .例: