你好,我正在使用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问题。但是这个解决方案对我没有用。有人能帮我吗?
附言:我正在使用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());
}
.getPane().xsetTopLeftCell().setTopLeftCell("C1")
不是我建议的,也无法编译。 - Axel Richter