zoukankan      html  css  js  c++  java
  • 导出Excel表格

    /**
         * 导出验证用户的操作日志的表格
         *
         * @throws Exception
         */
        public static void exportWeChatUserLogs(String searchCriteria) {
            // 根据需求生成excel表格
            HSSFWorkbook wb = createHSSFWorkbook(searchCriteria);
            // 第六步,将文件存到指定位置

            // 设置对话框的风格
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // 选择目录
            JFileChooser chooser = new JFileChooser();

            Date dt = new Date();// 如果不需要格式,可直接用dt,dt就是当前系统时间
            DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssS");// 设置显示格式
            String nowTime = "";
            nowTime = df.format(dt);
            // 设置默认的保存文件的文件名:当前时间.xls格式
            chooser.setSelectedFile(new File(nowTime + ".xls"));
            // 设置保存对话框的各种样式属性
            chooser.setDialogTitle(Messages.get("save_file"));
            chooser.setApproveButtonText(Messages.get("save"));
            chooser.setApproveButtonToolTipText(Messages.get("save"));
            chooser.setFocusable(true);
            chooser.setToolTipText(Messages.get("save_file"));
            chooser.setDragEnabled(true);// 设置 dragEnabled 属性,要在此组件上启用自动拖动处理(drag 和
                                            // drop 的第一部分),此属性必须为 true
            chooser.setFileFilter(new FileNameExtensionFilter("Excel", new String[] { ".xls"}));

            int result = chooser.showOpenDialog(null);
            switch (result) {
            case JFileChooser.APPROVE_OPTION:
                // 这一种方法是把用户输入的作为保存的文件名
                String filePath = chooser.getCurrentDirectory() + File.separator + chooser.getSelectedFile().getName() + ".xls";
                try {
                    // 输出文件流
                    FileOutputStream fout = new FileOutputStream(filePath);
                    wb.write(fout);
                    fout.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                // 关闭对话框,跳转到微信用户操作日志展示的页面
                weChatUserStatisticalLogs(0, searchCriteria);
                break;
            case JFileChooser.CANCEL_OPTION:
                // 选择取消按钮,直接跳到微信用户操作日志展示的页面
                weChatUserStatisticalLogs(0, searchCriteria);
            case JFileChooser.ERROR_OPTION:
                // 出错时,直接跳到微信用户操作日志展示的页面
                weChatUserStatisticalLogs(0, searchCriteria);
                break;
            default:
                break;
            }

        }

        /**
         * 返回生成的excel表格HSSFWorkbook对象
         *
         * @param searchCriteria
         * @return
         */
        public static HSSFWorkbook createHSSFWorkbook(String searchCriteria) {
            // 第一步,创建一个webbook,对应一个Excel文件
            HSSFWorkbook wb = new HSSFWorkbook();
            // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet sheet = wb.createSheet(Messages.get("wechatuser_log_statistical_table"));
            // 创建单元格样式
            HSSFCellStyle cellStyle = wb.createCellStyle();

            // 指定单元格居中对齐
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

            // 指定单元格垂直居中对齐
            cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

            // 指定当单元格内容显示不下时自动换行
            cellStyle.setWrapText(true);

            // 第四步,创建单元格,并设置值表头 设置表头居中
            HSSFCellStyle style = wb.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式

            // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short:所有用户的日志的合计
            HSSFRow rowAllCount = sheet.createRow((int) 0);
            // 第一行的第一列
            HSSFCell cell = rowAllCount.createCell(0);
            cell.setCellValue(new HSSFRichTextString(Messages.get("total_statistical_num")));
            cell.setCellStyle(style);
            // 第一行的第二列
            cell = rowAllCount.createCell(1);
            cell.setCellValue(new HSSFRichTextString(Messages.get("addtask_num_all")));
            cell.setCellStyle(style);
            // 第一行的第三列
            cell = rowAllCount.createCell(2);
            cell.setCellValue(new HSSFRichTextString(Messages.get("transtask_num_all")));
            cell.setCellStyle(style);
            // 第一行的第四列
            cell = rowAllCount.createCell(3);
            cell.setCellValue(new HSSFRichTextString(Messages.get("submit_num_all")));
            cell.setCellStyle(style);
            // 第一行的第五列
            cell = rowAllCount.createCell(4);
            cell.setCellValue(new HSSFRichTextString(Messages.get("reject_num_all")));
            cell.setCellStyle(style);

            // 第二行:各类型的所有统计数
            HSSFRow rowAllCountNum = sheet.createRow((int) 1);
            Map<String, Long> countMap = WeChatUserStatisticalBean.countSatisticNum();
            rowAllCountNum.createCell(0).setCellValue(new HSSFRichTextString(Messages.get("statistical_string")));// 第二行第一列
            rowAllCountNum.createCell(1).setCellValue(countMap.get("addTaskAllNum"));// 第二行第一列
            rowAllCountNum.createCell(2).setCellValue(countMap.get("transTaskAllNum"));// 第二行第二列
            rowAllCountNum.createCell(3).setCellValue(countMap.get("submitAllNum"));// 第二行第三列
            rowAllCountNum.createCell(4).setCellValue(countMap.get("rejectAllNum"));// 第二行第三列

            // 第三行:各类型合计的统计数
            HSSFRow rowType = sheet.createRow((int) 2);
            cell = rowType.createCell(0);

            // 判断导出的是哪种类查询条件的统计数据
            if (!"".equals(searchCriteria) && searchCriteria != null && "approvalType".equals(searchCriteria)) {
                // 导出的是根据审批类型进行查询的统计数据
                cell.setCellValue(new HSSFRichTextString(Messages.get("all_approval_type")));// 第三行第一列
            } else {
                // 导出的是根据用户名查询的统计数据
                cell.setCellValue(new HSSFRichTextString(Messages.get("username")));// 第三行第一列
            }

            cell = rowType.createCell(1);

            cell.setCellValue(new HSSFRichTextString(Messages.get("addtask_num")));// 第三行第二列
            cell.setCellStyle(style);
            cell = rowType.createCell(2);
            cell.setCellValue(new HSSFRichTextString(Messages.get("transtask_num")));// 第三行第三列
            cell.setCellStyle(style);
            cell = rowType.createCell(3);
            cell.setCellValue(new HSSFRichTextString(Messages.get("submit_num")));// 第三行第四列
            cell.setCellStyle(style);
            cell = rowType.createCell(4);
            cell.setCellValue(new HSSFRichTextString(Messages.get("reject_num")));// 第三行第五列
            cell.setCellStyle(style);

            // 第五步,写入实体数据 实际应用中这些数据从数据库得到,

            // 根据条件查询的所有WeChatUserStatisticalBean对象的集合
            List<WeChatUserStatisticalBean> weChatUserStatisticalBeans = new ArrayList<WeChatUserStatisticalBean>();
            // 判断是哪种搜索条件下的excel表格的生成
            if (!"".equals(searchCriteria) && searchCriteria != null && "approvalType".equals(searchCriteria)) {
                // 导出的是根据审批类型进行查询的统计数据
                weChatUserStatisticalBeans = WeChatUserStatisticalBean.getWeChatUserApprovalTypeStatistic(searchCriteria);
            } else {
                // 导出的是根据用户名查询的统计数据
                // 查询所有的微信操作日志的不同名的操作者
                String sqlStr = Const.SQL_LOG_OPERATORS;
                Query query = Log.em().createNativeQuery(sqlStr);
                List<String> operators = query.getResultList();
                for (String operator : operators) {
                    // 根据操作者查询日志统计对象WeChatUserStatisticalBean
                    WeChatUserStatisticalBean weChatUserStatisticalBean = WeChatUserStatisticalBean.initWeChatUserStatisticalBean(operator);
                    // 将对象存入集合中
                    weChatUserStatisticalBeans.add(weChatUserStatisticalBean);
                }
            }
            for (int i = 0; i < weChatUserStatisticalBeans.size(); i++) {
                // 第四步,创建单元格,并设置值
                HSSFRow rowNum = sheet.createRow((int) 2 + i + 1);
                rowNum.createCell(0).setCellValue(weChatUserStatisticalBeans.get(i).realname);
                rowNum.createCell(1).setCellValue(weChatUserStatisticalBeans.get(i).addTaskNum);
                rowNum.createCell(2).setCellValue(weChatUserStatisticalBeans.get(i).transTaskNum);
                rowNum.createCell(3).setCellValue(weChatUserStatisticalBeans.get(i).submitNum);
                rowNum.createCell(4).setCellValue(weChatUserStatisticalBeans.get(i).rejectNum);
            }
            return wb;
        }

  • 相关阅读:
    python基础之====函数对象、函数嵌套、名称空间与作用域、装饰器
    python基础之函数基础
    pytho基础之文件处理
    python基础之字符编码
    python基础之数据类型与变量
    python基础之核心风格
    函数
    数据类型、字符编码、文件处理
    MongoDB
    Shell学习(三)——Shell条件控制和循环语句
  • 原文地址:https://www.cnblogs.com/xunfang123/p/4196174.html
Copyright © 2011-2022 走看看