Java实战之管家婆记账系统(6)——导入和导出功能实现

本节概要

本节将实现将用户的收入和支出记录导出到excel表中,也可以从excel中导入到管家婆记账系统中。

 

导出

将用户的记录导出到excel表中,导出功能的实现不需要界面,是通过菜单项进行触发的事件,所以将导出功能的逻辑代码写在exportMenuItemEvent()方法中即可。

    /**
     * “导出”菜单项的事件监听器
     *
     * @param actionEvent 事件
     */
    @FXML
    public void exportMenuItemEvent(ActionEvent actionEvent) {
        String exportPath = null;
        //实例化文件选择器
        FileChooser fileChooser = new FileChooser();
        //打开保存文件选择框
        fileChooser.setInitialFileName("Excel");
        File result = fileChooser.showSaveDialog(null);
        if(result!=null){
            exportPath = result.getAbsolutePath();
            //excel表格表头
            String[] title = {"序号", "类型", "金额", "分类", "备注", "日期"};
            // 获取当前用户的支出记录
            List<Record> recordList = recordDao.selectByUserId(Session.getUser().getUserId());
            // 将支出记录转换成二维数组
            String[][] tableData = new String[recordList.size()][6];
            int j = 0;
            for (Record record : recordList) {
                tableData[j][0] = String.valueOf(record.getRecordId());
                tableData[j][1] = record.getRecordType();
                tableData[j][2] = Float.toString(record.getRecordMoney());
                tableData[j][3] = record.getRecordClassification();
                tableData[j][4] = record.getRecordMemo();
                tableData[j][5] = record.getRecordDate();
                j++;
            }
            //导出路径
            String exportExcelFilePath = SimpleTools.exportExcel(title, tableData, exportPath);
            if (new File(exportExcelFilePath).exists()) {
                SimpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "导出excel成功!");
            } else {
                SimpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "错误", "导出excel失败!");
            }
        }
    }

通过FileChooser文件选择器获取要保存的文件路径,然后通过RecordDao类中的selectByUserId()方法获取该用户的所有收入支出记录,然后再调用SimpleTools类的exportExcel()方法将其写入到excel表中。由于exportExcel方法中的三个参数第一个参数是表头数据,是一维数组;第二个参数指的是表格内容,是二维数组,所以需要将selectByUserId获取的内容转换成二维数组才能使用;第三个参数指的是excel文件导出路径。

运行程序,测试导出功能:

打开excel文件就可以查看导出的记录了。

img

 

导入功能

导入功能同样是由导入菜单项所触发的事件处理,在MainPageController.java代码中将importMenuItemEvent方法改为如下:

    /**
     * “导入”菜单项的事件监听器
     *
     * @param actionEvent 事件
     */
    @FXML
    public void importMenuItemEvent(ActionEvent actionEvent) {
        //实例化文件选择器
        FileChooser fileChooser = new FileChooser();
        //设置默认文件过滤器
        fileChooser.setSelectedExtensionFilter(new FileChooser.ExtensionFilter("excel(*.xls)", "xls", "xlsx"));
        //打开文件选择框,并得到选中的文件
        File result = fileChooser.showOpenDialog(null);
        if(result!=null){
            // 获取绝对路径
            String importPath = result.getAbsolutePath();
            try {
                //读取excel表内容(不包括表头)
                String[][] content = SimpleTools.readExcelContentArray(new FileInputStream(importPath));
                boolean isSuccess = false;
                for (int i = 0; i < content.length; i++) {
                    Record record = new Record();
                    record.setUserId(Session.getUser().getUserId());
                    record.setRecordType(content[i][1]);
                    record.setRecordMoney(Float.parseFloat(content[i][2]));
                    record.setRecordClassification(content[i][3]);
                    record.setRecordMemo(content[i][4]);
                    record.setRecordDate(content[i][5]);
                    //添加数据到数据库
                    isSuccess = recordDao.addRecord(record);
                }
                // 判断是否导入成功
                if (isSuccess) {
                    SimpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "导入excel数据成功");
                    // 刷新界面显示的数据
                    initialize();
                } else {
                    SimpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "错误", "导入excel数据失败");
                }
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
        }
    }

使用FileChooser控件打开资源管理器选择要导入的excel文件并读取它的绝对路径,然后调用SimpleTools类中的readExcelContentArray()方法读取excel表的内容,但是不读取表头的内容,读取结果是一个二维数组,循环遍历将其封装到Record类中并插入到数据库的record表中,有多少行数据就插入多少条记录,导入成功后调用初始化函数initialize()刷新界面数据。

运行程序,测试功能:

要导入的excel测试数据:

导入成功进行提示:

如下红框内的记录即为导入的数据:

关于记录数据的导入导出功能是涉及到poi包的使用,在SimpleTools方法类中所定义,如果对具体如何实现感兴趣,可以查看调用方法的具体代码。如果对excel读写有兴趣的话可以自行在网上查找资料封装方法供自己使用。

 

 

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【20200319】可获取本章的源码 。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值