# ExcelCopyHelper **Repository Path**: Zzzzzige/excel-copy-helper ## Basic Information - **Project Name**: ExcelCopyHelper - **Description**: 省去切屏复制时间以提高Excel在特定条件下的读取效率 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-31 - **Last Updated**: 2022-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: Excel, clipboard ## README # ExcelCopyHelper ## 简介 ExcelCopyHelper是一款能让用户在网页等地方录入表格数据时省去来回切换窗口复制的时间以提升表格数据录入效率的桌面软件 ## 特点 - 基于javaswing图形化界面 - 全局快捷键基于JIntellitype - 即使没有焦点,程序也会工作 ## 安装 - 普通用户直接下载发行版copyhelp.zip后运行bat文件即可 - 开发者直接clone到本地即可 # 开发者文档 ## 如何开始 只需要实例化ExcelPasterFrame抽象类下的实现类即可 ```java ExcelPasterFrame excelPasterFrame = new DefaultExcelPasterFrame(); ``` ## 各个接口 抽象类的功能 - 抽象类 ExcelPasterFrame - 这是程序的主窗口,一旦程序启动就会打开这个窗口 - 若需要自定义主窗口的样式 继承此类即可 - 此类中必须实现的两个方法 ```java @Override public void onIntellitype(int i) { //来自Jintellitype中IntellitypeListener的方法 具体作用参见JIntellitype } @Override public void onHotKey(int i) { //JIntellitype中HotkeyListener的方法 当按下特定键后会调用 } ``` - 该抽象类中的成员变量会在接下来的文档中展示 - 抽象类TopFrame - 默认情况下这是一个置顶窗口,显示当前的复制内容 ```java /** * 将读取到的信息显示到topFrame * @param excelDataDTO 读取到的信息 */ public abstract void showInfo(ExcelDataDTO excelDataDTO); /** * 读取到表格最开始或结束时在topFrame上显示信息 */ public abstract void endInfo(); ``` - 抽象类ConfigFrame - 用于选择文件 设置文件属性的窗口 - 无必须实现的方法 - 接口ExcelTool - 选择文件后会实例化一个ExcelTool类来对表格中的数据进行选取 ```java /** * 获取下一个数据 * @return 获取到的数据 */ ExcelDataDTO getNextInfo(); /** * 获取上一个数据 * @return 获取到的数据 */ ExcelDataDTO getLastInfo(); /** * 获取下一行数据 * @return 默认为返回下一行第一个数据 */ ExcelDataDTO getNextStu(); /** * 获取上一行数据 * @return 默认为返回上一行最后一个数据 */ ExcelDataDTO getLastStu(); ``` - 接口HotKeyRegistrant - 用于设定按键 用法可参照Jintellitype ```java /** * 注册热键 */ void register(); /** * 取消注册 */ void unRegister(); ``` ## 如何自定义我需要的部分 ### 窗口 自定义窗口需要学习javaswing 就是一些组件与监听器 学习成本也不高 想要自定义哪一个窗口就继承该窗口的抽象类 记得在组件中添加监听器 ### 表格操作与按键 表格操作需要实现ExcelTool这个接口 自定义按键需要实现HotKeyRegistrant接口 #### 如何自定义按键 以默认按键注册时为例 这是来自JIntellitype所提供的全局热键功能 ```java public class DefaultHotKeyRegistrant implements HotKeyRegistrant { //为各个按键设定id 在JIntellitype提供的例子中id从88开始 private static final int SHIFT_A = 88; private static final int SHIFT_D = 89; private static final int SHIFT_W = 90; private static final int SHIFT_S = 91; //设定按键的固定用法 //JIntellitype.getInstance().registerHotKey(id, JIntellitype提供的常量, 按键); @Override public void register() { JIntellitype.getInstance().registerHotKey(SHIFT_A, JIntellitype.MOD_SHIFT, 'A'); JIntellitype.getInstance().registerHotKey(SHIFT_D, JIntellitype.MOD_SHIFT, 'D'); JIntellitype.getInstance().registerHotKey(SHIFT_W, JIntellitype.MOD_SHIFT, 'W'); JIntellitype.getInstance().registerHotKey(SHIFT_S, JIntellitype.MOD_SHIFT, 'S'); } //取消注册的固定用法 @Override public void unRegister() { JIntellitype.getInstance().unregisterHotKey(SHIFT_A); JIntellitype.getInstance().unregisterHotKey(SHIFT_D); JIntellitype.getInstance().unregisterHotKey(SHIFT_W); JIntellitype.getInstance().unregisterHotKey(SHIFT_S); } } ``` ## 如何只自定义部分模块 - 如果你自定义的是主界面 那就想办法吧默认的几个模块塞进去吧() - 对于非主界面的自定义,默认主界面中提供了构造方法 ```java public DefaultExcelPasterFrame(TopFrame topFrame, ConfigFrame configFrame, HotKeyRegistrant hotKeyRegistrant); ``` 在运行时创建实例的时候传入自定义的界面即可(最好把各个界面设定为默认不可见) ```java ExcelPasterFrame excelPasterFrame = new DefaultExcelPasterFrame(mytopfram,myconfigframe,myhotkeyregistrant) ``` 没有自定义的参数则设定为null - 自定义ExcelTool - 由于ExcelTool在默认情况下是通过Configframe产生的,所以自定义ExcelTool的时候同时也需要自定义ConfigFram - 如果你不想自定义ConfigFrame复制一份默认再进行修改即可(实在是找不到解耦的办法啦) ```java private void btnFinish_actionPerformed(ActionEvent e) throws IOException, InvalidFormatException { ExcelConfigDTO dto = new ExcelConfigDTO(file, beginRowIndex.getSelectedIndex(), beginColumIndex.getSelectedIndex(), endRowIndex.getSelectedIndex(), endColumIndex.getSelectedIndex(), currentRowIndex.getSelectedIndex(), currentColumIndex.getSelectedIndex()); if (dto.isRight()){ //选择数据合法 btnConfig.setEnabled(true); ExcelPasterFrame.setTool(new DefaultExcelTool(dto)); dispose(); }else { JOptionPane.showMessageDialog(this,"数据不合法","错误",JOptionPane.ERROR_MESSAGE); } } ``` 复制后将new DefaultExcelTool(dto)改为自定义类即可