• Apache POI导出excel


    public String exportXls(HttpServletRequest request, HttpServletResponse response) {
            try {
                HSSFWorkbook wb = new HSSFWorkbook();
                HSSFRow row = null;
                HSSFCell cell = null;
                //建立新的sheet对象
                HSSFSheet sheet = wb.createSheet("导出信息");//sheet的名称
                sheet.setColumnWidth(0, 5*256);//设置第columnIndex+1列的列宽,单位为字符宽度的1/256
                sheet.setColumnWidth(1, 30*256);
                sheet.setColumnWidth(2, 20*256);
                sheet.setColumnWidth(3, 10*256);
                sheet.setColumnWidth(4, 10*256);
                sheet.setColumnWidth(5, 10*256);
                sheet.setColumnWidth(6, 10*256);
                sheet.setColumnWidth(7, 10*256);
                //标题样式
                HSSFCellStyle titleStyle = wb.createCellStyle();
                titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
                org.apache.poi.ss.usermodel.Font ztFont = wb.createFont();
                ztFont.setItalic(false);
                ztFont.setColor(org.apache.poi.ss.usermodel.Font.COLOR_NORMAL);
                ztFont.setFontHeightInPoints((short) 16);
                ztFont.setFontName("宋体");
                ztFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
    
                titleStyle.setFont(ztFont);
    
                //----------------二级标题格样式----------------------------------
                HSSFCellStyle titleStyle2 = wb.createCellStyle();        //表格样式
                titleStyle2.setAlignment(HSSFCellStyle.ALIGN_LEFT);
                titleStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
                HSSFFont ztFont2 = wb.createFont();
                ztFont2.setItalic(false);                     // 设置字体为斜体字
                ztFont2.setColor(org.apache.poi.ss.usermodel.Font.COLOR_NORMAL);
                ztFont2.setFontHeightInPoints((short)11);    // 将字体大小设置为18px
                ztFont2.setFontName("宋体");             // 字体应用到当前单元格上
                titleStyle2.setFont(ztFont2);
                //----------------------------------------------------------
                //----------------单元格样式----------------------------------
                HSSFCellStyle cellStyle = wb.createCellStyle();        //表格样式
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
                cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
                cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
                cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
                cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
                HSSFFont cellFont = wb.createFont();
                cellFont.setItalic(false);                     // 设置字体为斜体字
                cellFont.setColor(org.apache.poi.ss.usermodel.Font.COLOR_NORMAL);
                cellFont.setFontHeightInPoints((short)10);    // 将字体大小设置为18px
                cellFont.setFontName("宋体");             // 字体应用到当前单元格上
                cellStyle.setFont(cellFont);
                cellStyle.setWrapText(true);//设置自动换行
                //----------------------------------------------------------
                // ----------------------创建第一行---------------
                // 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
                row = sheet.createRow(0);
                // 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
                cell = row.createCell(0);
                // 合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
                sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7));
                // 设置单元格内容
                cell.setCellValue("测试excel");
                cell.setCellStyle(titleStyle);
                // ----------------------------------------------
    
                // ------------------创建第二行()---------------------
                row = sheet.createRow(1); // 创建第二行
                cell = row.createCell(0);
                sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 1));
                cell.setCellValue("入库单号:15203");
                cell.setCellStyle(titleStyle2);
    
    
                cell = row.createCell(2);
                sheet.addMergedRegion(new CellRangeAddress(1, 1, 2, 4));
                cell.setCellValue("执行单号:14520");
                cell.setCellStyle(titleStyle2);
    
                cell = row.createCell(5);
                sheet.addMergedRegion(new CellRangeAddress(1, 1, 5, 7));
                String createDate = MapUtil.getRealValue(headInfo, "create_date", "");
                cell.setCellValue("创建时间:2018-06-19 13:59:23");
                cell.setCellStyle(titleStyle2);
    
                //---------------------创建第三行-------------------------------------
    
                row = sheet.createRow(2);
                cell = row.createCell(0);
                sheet.addMergedRegion(new CellRangeAddress(2, 2, 0, 1));
                cell.setCellValue("供应商:京东");
                cell.setCellStyle(titleStyle2);
    
    
                cell = row.createCell(2);
                sheet.addMergedRegion(new CellRangeAddress(2, 2, 2, 4));
                cell.setCellValue("仓库名称:一号仓库");
                cell.setCellStyle(titleStyle2);
    
                cell = row.createCell(5);
                sheet.addMergedRegion(new CellRangeAddress(2, 2, 5, 7));
                cell.setCellValue("总金额:23.65");
                cell.setCellStyle(titleStyle2);
    
    
    
                // ------------------创建表头start---------------------
                row = sheet.createRow(3); // 创建第四行
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 0, 0));
                cell = row.createCell(0);
                cell.setCellValue("序号");
                cell.setCellStyle(cellStyle);
    
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 1));
                cell = row.createCell(1);
                cell.setCellValue("物料名称");
                cell.setCellStyle(cellStyle);
    
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 2, 2));
                cell = row.createCell(2);
                cell.setCellValue("物料编号");
                cell.setCellStyle(cellStyle);
    
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 3, 3));
                cell = row.createCell(3);
                cell.setCellValue("物料产地");
                cell.setCellStyle(cellStyle);
    
    
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 4, 4));
                cell = row.createCell(4);
                cell.setCellValue("入库价格");
                cell.setCellStyle(cellStyle);
    
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 4, 4));
                cell = row.createCell(5);
                cell.setCellValue("参考价格");
                cell.setCellStyle(cellStyle);
    
    
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 5, 5));
                cell = row.createCell(6);
                cell.setCellValue("需求数量");
                cell.setCellStyle(cellStyle);
    
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 6, 6));
                cell = row.createCell(7);
                cell.setCellValue("总金额");
                cell.setCellStyle(cellStyle);
    
            //循环填充数据
                int i =1;
                int rowNum= 3;
                List<Object> data = null;
                for (Map m : mapList) {
                    data = new ArrayList<>();
                    data.add(i);
                    data.add((String) m.get("wuliao_name"));
                    data.add((String) m.get("wuliao_no"));
                    data.add((String) m.get("wuliao_address"));
                    data.add((Double) m.get("danjia"));
                    data.add((Double) m.get("reference_price"));
                    data.add((Integer) m.get("wuliao_count"));
                    data.add((Double) m.get("totalmoney"));
    
                    rowNum ++;    //从第四行开始
                    row = sheet.createRow(rowNum);
                    for (int j = 0; j < data.size(); j++) {        //将数据添加到单元格中
                        sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, j, j));
                        cell = row.createCell(j);
                        cell.setCellValue(""+data.get(j)+"");
                        cell.setCellStyle(cellStyle);
                    }
                    i++;
                }
          //添加底部合计行
                row = sheet.createRow(rowNum+1);
                sheet.addMergedRegion(new CellRangeAddress(rowNum+1, rowNum+1, 0, 4));
                cell = row.createCell(0);
                cell.setCellStyle(cellStyle);
                cell = row.createCell(1);
                cell.setCellStyle(cellStyle);
                cell = row.createCell(2);
                cell.setCellStyle(cellStyle);
                cell = row.createCell(3);
                cell.setCellStyle(cellStyle);
                cell = row.createCell(4);
                cell.setCellStyle(cellStyle);
    
                cell = row.createCell(5);
                cell.setCellStyle(cellStyle);
    
                cell = row.createCell(6);
                cell.setCellValue(totalNumber);
                cell.setCellStyle(cellStyle);
    
                cell = row.createCell(7);
                cell.setCellValue(new BigDecimal(totalMoney).setScale(2, RoundingMode.DOWN).toString());
                cell.setCellStyle(cellStyle);
    
                OutputStream output = response.getOutputStream();
                response.reset();

            response.setHeader("Content-Disposition", "filename="

                      + new String("测试导出".getBytes("gb2312"), "iso8859-1"))+".xls";//设置文件头编码方式和文件名

                response.setContentType("application/msexcel");
                wb.write(output);
                output.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    }
  • 相关阅读:
    【转】Linux世界驰骋——文件系统和设备管理
    【转】Linux的inode的理解
    【转】名企HR教你如何过网申
    【转】Unix的文件系统的内部结构,主要是超级块、inode相关知识
    【转】Unix系统的心脏Unix文件系统
    【转】Unix环境高级程序设计入门文件系统的相关编程(上)
    【转】电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解
    【转】第三节 UNIX文件系统结构
    测试网站各项性能的31 个免费在线工具 (转)
    恋爱
  • 原文地址:https://www.cnblogs.com/jack1995/p/9198321.html
Copyright © 2020-2023  润新知