关闭

Struts2导出Excel

标签: 框架集成struts2
486人阅读 评论(0) 收藏 举报
分类:

//这Action里的java代码

@SuppressWarnings("unchecked")

    public String createExcelLength() throws IOException,
            InvocationTargetException {
        System.out.println(inputStream);
        List<Map> list = null;
        Map map = new HashMap();// 装载分页函数需要的参数,里边包含每页多少条,第几页,查询条件
        map.put("rows", (rows)); // 放入每页条数
        map.put("page", (this.page)); // 放入当前页码
        map.put("begdate", this.begdate); // 放入开始时间
        map.put("enddate", this.enddate); // 放入结束时间
        map.put("chanelId", this.chanelId); // 放入频道id
        map.put("saleId", this.saleId); // 放入sale_id
        list = amsRemainLengthService.selectAmsMeuInfo(map);
        String columnNameArray = "salename,mon,ty,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31";
        String showNameAry = "销售品名称,月份,类型,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31";
        HSSFWorkbook workbook = new HSSFWorkbook(); // 产生工作簿对象
        HSSFSheet sheet = workbook.createSheet(); // 产生工作表对象
        HSSFFont columnHeadFont = workbook.createFont();
        columnHeadFont.setFontName("宋体");
        columnHeadFont.setFontHeightInPoints((short) 12);
        columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 列头的样式
        HSSFCellStyle columnHeadStyle = workbook.createCellStyle();
        columnHeadStyle.setFont(columnHeadFont);
        columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
        columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // 设置第一个工作表的名称为firstSheet
        // 为了工作表能支持中文,设置字符编码为UTF_16
        workbook.setSheetName(0, "firstSheet");
        // 产生一行
        HSSFRow row = sheet.createRow((short) 0);
        String[] showNameArray = showNameAry.split(",");
        // 产生第一个单元格
        for (int i = 0; i < showNameArray.length; i++) {
            HSSFCell cell = row.createCell(i);
            // 设置单元格内容为字符串型
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            cell.setCellValue(showNameArray[i]);
        }
        // 为了能在单元格中写入中文,设置字符编码为UTF_16。
        // cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        int rowNum = 1;
        // 循环往单元格中写入信息
        // 根据数据库里面返回的list的size循环创建行
        for (int i = 0; i < list.size(); i++) {
            Map mapData = list.get(i);
            HSSFRow row1 = sheet.createRow((short) rowNum);
            String[] aaaa = columnNameArray.split(",");
            for (int j = 0; j < 34; j++) {
                HSSFCell cell1 = row1.createCell(j);
                if (mapData.get("fl").equals("0")) {
                    // 设置单元格内容为字符串型
                    cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
                    if (mapData.containsKey(aaaa[j])) {
                        cell1.setCellValue(mapData.get(aaaa[j]).toString());
                    } else {
                        cell1.setCellValue("");
                    }
                } else {
                    if (mapData.containsKey(aaaa[j])) {
                        Font font = workbook.createFont();
                        font.setColor(HSSFColor.RED.index);
                        columnHeadStyle.setFont(font);
                        cell1.setCellStyle(columnHeadStyle);
                        // 设置单元格内容为字符串型
                        cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
                        cell1.setCellValue(mapData.get(aaaa[j]).toString());
                        
                    } else {
                        cell1.setCellValue("");
                    }

                }


在struts2.


            }
            rowNum += 1;
        }
        this.filename = "AmsRemainLength.xls";
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        System.out.println("aa");
        try {
            workbook.write(outputStream);
            inputStream = new ByteArrayInputStream(outputStream.toByteArray());
            outputStream.flush();
            outputStream.close();
            return "excel";
        } catch (Exception e) {
            e.printStackTrace();
            return "excel";
        }

    }

在struts2.xml里面的配置

            <result name="excel" type="stream">
                <!-- 指定下载文件的内容类型,text/plain是默认类型 -->
                <param name="contentType">text/plain</param>
                <!--
                    inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数
                -->
                <param name="inputName">inputStream</param>
                <!--动态获取文件名,从Action中的取得filename-->
                <param name="contentDisposition">
                    attachment;filename="${filename}"
                </param>
                <param name="bufferSize">2048</param>
            </result>


备注:导入的excel文件必须是microsoft 的office。不能用WPS的(WPS的excel不能读取)


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:260260次
    • 积分:5287
    • 等级:
    • 排名:第5355名
    • 原创:280篇
    • 转载:13篇
    • 译文:1篇
    • 评论:16条
    文章分类
    最新评论