zoukankan      html  css  js  c++  java
  • Springmvc和poi3.9导出excel并弹出下载框

    Springmvc 和 poi3.9 用java程序从数据库导出数据到excel(在博客园的第一篇原创博客)

    @RequestMapping(value = "/importexcel.htm", method = RequestMethod.GET)
        public ModelAndView _importExcel(HttpServletRequest request, HttpServletResponse response, Integer cId) throws Exception {
    
            // 获得要导出的数据集
            List<Map<String, Object>> list = d_ExchangeCodeService.selectExcelRecord(cId);
    
            // 创建excel工作簿
            Workbook wb = new HSSFWorkbook();
            // 创建第一个sheet(页),并命名
            Sheet sheet = wb.createSheet(list.get(0).get("NAME").toString());
    
            // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
            sheet.setColumnWidth((short) 0, (short) (35.7 * 150));
            sheet.setColumnWidth((short) 1, (short) (35.7 * 150));
            sheet.setColumnWidth((short) 2, (short) (35.7 * 150));
            sheet.setColumnWidth((short) 3, (short) (35.7 * 100));
            sheet.setColumnWidth((short) 4, (short) (35.7 * 250));
            sheet.setColumnWidth((short) 5, (short) (35.7 * 150));
            sheet.setColumnWidth((short) 6, (short) (35.7 * 150));
    
            // 创建第一行
            Row row = sheet.createRow((short) 0);
    
            // 创建两种单元格格式
            CellStyle cs = wb.createCellStyle();
            CellStyle cs2 = wb.createCellStyle();
            // DataFormat df = wb.createDataFormat();
    
            // 创建两种字体
            Font f = wb.createFont();
            Font f2 = wb.createFont();
    
            // 创建第一种字体样式
            f.setFontHeightInPoints((short) 10);
            f.setColor(IndexedColors.RED.getIndex());
            f.setBoldweight(Font.BOLDWEIGHT_BOLD);
    
            // 创建第二种字体样式
            f2.setFontHeightInPoints((short) 10);
            f2.setColor(IndexedColors.BLACK.getIndex());
            f2.setBoldweight(Font.BOLDWEIGHT_BOLD);
    
            // 设置第一种单元格的样式
            cs.setFont(f);
            cs.setBorderLeft(CellStyle.BORDER_THIN);
            cs.setBorderRight(CellStyle.BORDER_THIN);
            cs.setBorderTop(CellStyle.BORDER_THIN);
            cs.setBorderBottom(CellStyle.BORDER_THIN);
            // cs.setDataFormat(df.getFormat("#,##0.0"));
    
            // 设置第二种单元格的样式
            cs2.setFont(f2);
            cs2.setBorderLeft(CellStyle.BORDER_THIN);
            cs2.setBorderRight(CellStyle.BORDER_THIN);
            cs2.setBorderTop(CellStyle.BORDER_THIN);
            cs2.setBorderBottom(CellStyle.BORDER_THIN);
            // cs2.setDataFormat(df.getFormat("text"));
    
            // 创建列(每行里的单元格)
            Cell cell = row.createCell(0);
            cell.setCellValue("用户名");
            cell.setCellStyle(cs);
    
            cell = row.createCell(1);
            cell.setCellValue("订单号");
            cell.setCellStyle(cs);
    
            cell = row.createCell(2);
            cell.setCellValue("兑换券序列号");
            cell.setCellStyle(cs);
    
            cell = row.createCell(3);
            cell.setCellValue("兑换券金额");
            cell.setCellStyle(cs);
    
            cell = row.createCell(4);
            cell.setCellValue("兑换券类型名称");
            cell.setCellStyle(cs);
    
            cell = row.createCell(5);
            cell.setCellValue("使用时间");
            cell.setCellStyle(cs);
    
            cell = row.createCell(6);
            cell.setCellValue("使用结束日期");
            cell.setCellStyle(cs);
    
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    
            for (short i = 0; i < list.size(); i++) {
    
                // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
                // 创建一行,在页sheet上
                row = sheet.createRow((short) i + 1);
                // 在row行上创建一个方格
                cell = row.createCell(0);
                cell.setCellValue(list.get(i).get("usr_UserID") == null ? "未使用" : list.get(i).get("usr_UserID").toString());
                cell.setCellStyle(cs2);
    
                cell = row.createCell(1);
                cell.setCellValue(list.get(i).get("ord_OrderID") == null ? "未使用" : list.get(i).get("ord_OrderID").toString());
                cell.setCellStyle(cs2);
    
                cell = row.createCell(2);
                cell.setCellValue(list.get(i).get("Account").toString());
                cell.setCellStyle(cs2);
    
                cell = row.createCell(3);
                cell.setCellValue(Double.parseDouble(list.get(i).get("Amount").toString()));
                cell.setCellStyle(cs2);
    
                cell = row.createCell(4);
                cell.setCellValue(list.get(i).get("NAME").toString());
                cell.setCellStyle(cs2);
    
                cell = row.createCell(5);
                cell.setCellValue(list.get(i).get("UsedTime") == null ? "未使用" : df.format(list.get(i).get("UsedTime")).toString());
                cell.setCellStyle(cs2);
    
                cell = row.createCell(6);
                cell.setCellValue(df.format(list.get(i).get("BlankOutTime")).toString());
                cell.setCellStyle(cs2);
            }
    
            ByteArrayOutputStream os = new ByteArrayOutputStream();
    
            try {
                wb.write(os);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            byte[] content = os.toByteArray();
            InputStream is = new ByteArrayInputStream(content);
    
            // 设置response参数,可以打开下载页面
            response.reset();
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String((list.get(0).get("NAME").toString() + ".xls").getBytes(), "iso-8859-1"));
    
            ServletOutputStream out = response.getOutputStream();
    
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
    
            try {
    
                bis = new BufferedInputStream(is);
                bos = new BufferedOutputStream(out);
    
                byte[] buff = new byte[2048];
                int bytesRead;
    
                // Simple read/write loop.
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytesRead);
                }
    
            } catch (final IOException e) {
                throw e;
            } finally {
                if (bis != null)
                    bis.close();
                if (bos != null)
                    bos.close();
            }
            return null;
    
        }
    分享 学习 进步
  • 相关阅读:
    jQuery中删除方法empty(),remove()和detach()的区别
    怎么设置font awesome图标的大小?
    什么是回调函数?
    MIP开发教程(三) 使用MIPCLI工具调试组件
    MIP开发教程(一) MIPCLI工具安装与环境部署
    MIP 2016年终总结
    MIP开发教程(二) 使用MIPCLI工具调试MIP网页
    VIP站长大会(北京站)常见问题解答
    MIP开发常见问题解答
    CMS模板应用调研问卷
  • 原文地址:https://www.cnblogs.com/-900401/p/3305569.html
Copyright © 2011-2022 走看看