用POI给excel的sheet排序,并重新设置焦点到A1单元格
由于工作里需要用到的excel比较多,每个excel文件被打开时都处在不同的sheet的不同单元格上,很不方便。所以用swing简单做了个工具。能实现给excel的每个sheet名排序,还有每个sheet的焦点都设置在左上角的A1单元格,工具如下图:
执行前的excel是这样的↓,请注意test1这个sheet的焦点,等会我会说到这点。定位在C147这个单元格。
设置程序的选项:
点执行。
打开处理后的excel。
上面的结果是我想要的,但是中间碰到了一个问题。如下图:test1的焦点确实在A1单元格,但是滚动条还是处在处理前的位置。
具体的解决方法:对于xlsx和xls文件要区分处理,xlsx不支持sheet.showInPane(0, 0);,找了很多办法都没有实现,最终是找了openxml来处理这个动作。希望能帮到需要的人。
需要用到下面的三个包
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetView;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetViews;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
//如果是xlsx后缀的文件
if (sheet instanceof XSSFSheet) {
CTWorksheet ctWorksheet = null;
CTSheetViews ctSheetViews = null;
CTSheetView ctSheetView = null;
XSSFSheet tempSheet = (XSSFSheet) sheet;
// 获取CTWorksheet
ctWorksheet = tempSheet.getCTWorksheet();
// 获取work的所有sheet视图
ctSheetViews = ctWorksheet.getSheetViews();
// 获取sheet视图
ctSheetView = ctSheetViews.getSheetViewArray(ctSheetViews.sizeOfSheetViewArray() - 1);
// 设置可视范围的焦点定在A1
ctSheetView.setTopLeftCell("A1");
//如果是xls后缀的文件
} else {
// 设置可视范围的焦点定在A1
sheet.showInPane(0, 0);
}
//把焦点定在A1单元格
wb.getSheetAt(index).setActiveCell(CellAddress.A1);
参考URL:
https://stackoverflow.com/questions/44903464/is-there-any-way-to-move-horizontal-scroll-bar-the-sheet-one-column-to-the-left