用POI给excel的sheet排序,并重新设置焦点到A1单元格

用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值