您好我正在使用apache poi生成excel文件。我正在使用XSSFWorkbook格式。我想着重于生成的excel文件的第一个单元格。Apache POI专注于生成的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());
}
我认为,你可以使用相同的sheet.showInPane一个()的方法。试试这个方法,并在这里检查这个讨论http://apache-poi.1045710.n5.nabble.com/RE-How-to-mandate-showing-the-active-cell-when-the-Excel-file-is -first-opened-td2281035.html – Bhavesh
@yaswanth:'.getPane()。xsetTopLeftCell()。setTopLeftCell(“C1”)'不是我所建议的,也不会编译。 –
对不起,这是一个错误。我更新了代码 – yaswanth