删除行 Excel 后的兴趣点在底部打开
POI after delete rows Excel opens at bottom
我需要将数据添加到包含宏的 excel 文件中。
在使用 Apache POI(4.1.2) 添加数据后,我使用以下代码删除 Excel 模板中的多余行并在其后创建一个新文件。
它正在正确删除行,但我的模板有大约 300 行,在创建新文件后它有大约 100 行。
现在打开 Excel 文件后,它会在底部的空白区域打开,即第 300 行,模板以前有数据,我必须始终向上滚动才能到达文件顶部。
我该如何纠正这种行为?
private void removeExtraRows(Sheet sheet, int rowIndex) {
while (rowIndex < sheet.getLastRowNum() - 1) {
removeRow(sheet, rowIndex);
}
}
private void removeRow(Sheet sheet, int rowIndex) {
sheet.removeRow(sheet.getRow(rowIndex));
sheet.shiftRows(rowIndex + 1, sheet.getLastRowNum(), -1);
}
Excel 存储sheet 中哪个单元格是活动单元格。它还在每个 sheet.
的实际视图窗格中分别存储实际 sheet 视图中左上角单元格的单元格
因此在删除行并最终删除以前可见的左上角单元格后 and/or 活动单元格应该设置新的活动单元格和左上角单元格。因此,如果 sheet 变得可见,就可以确定什么是可见的。
以下方法可以做到这一点:
void setTopLeftCell(Sheet sheet, int row, int column) {
CellAddress cellAddress = new CellAddress(row, column);
sheet.setActiveCell(cellAddress);
if (sheet instanceof XSSFSheet) {
// Office Open XML Excel format always has sheet view
((XSSFSheet)sheet).getCTWorksheet().getSheetViews().getSheetViewArray(0).setTopLeftCell(cellAddress.formatAsString());
} else {
// binary BIFF Excel format always has panes
sheet.showInPane(row, column);
}
}
在实际视图窗格中分别将A1
设置为sheet视图左上角单元格的用法:
setTopLeftCell(sheet, 0, 0);
我需要将数据添加到包含宏的 excel 文件中。 在使用 Apache POI(4.1.2) 添加数据后,我使用以下代码删除 Excel 模板中的多余行并在其后创建一个新文件。 它正在正确删除行,但我的模板有大约 300 行,在创建新文件后它有大约 100 行。 现在打开 Excel 文件后,它会在底部的空白区域打开,即第 300 行,模板以前有数据,我必须始终向上滚动才能到达文件顶部。 我该如何纠正这种行为?
private void removeExtraRows(Sheet sheet, int rowIndex) {
while (rowIndex < sheet.getLastRowNum() - 1) {
removeRow(sheet, rowIndex);
}
}
private void removeRow(Sheet sheet, int rowIndex) {
sheet.removeRow(sheet.getRow(rowIndex));
sheet.shiftRows(rowIndex + 1, sheet.getLastRowNum(), -1);
}
Excel 存储sheet 中哪个单元格是活动单元格。它还在每个 sheet.
的实际视图窗格中分别存储实际 sheet 视图中左上角单元格的单元格因此在删除行并最终删除以前可见的左上角单元格后 and/or 活动单元格应该设置新的活动单元格和左上角单元格。因此,如果 sheet 变得可见,就可以确定什么是可见的。
以下方法可以做到这一点:
void setTopLeftCell(Sheet sheet, int row, int column) {
CellAddress cellAddress = new CellAddress(row, column);
sheet.setActiveCell(cellAddress);
if (sheet instanceof XSSFSheet) {
// Office Open XML Excel format always has sheet view
((XSSFSheet)sheet).getCTWorksheet().getSheetViews().getSheetViewArray(0).setTopLeftCell(cellAddress.formatAsString());
} else {
// binary BIFF Excel format always has panes
sheet.showInPane(row, column);
}
}
在实际视图窗格中分别将A1
设置为sheet视图左上角单元格的用法:
setTopLeftCell(sheet, 0, 0);