表格导出

service

public void exportById(Long uuid, OutputStream os) throws Exception {
        //查询出订单
        Orders orders = ordersDao.get(uuid);
        //订单的明细
        List<Orderdetail> list = orders.getOrderDetails();
        //创建工作簿
        Workbook wk = new HSSFWorkbook();
        String title = "采 购 单";
        //创建工作表
        Sheet sht = wk.createSheet(title);
        //创建行,索引是从0开,列的从0开始
        Row row = sht.createRow(0);
        row.setHeight((short)1000);
        
        //创建字体
        Font font_content = wk.createFont();
        font_content.setFontName("宋体");
        font_content.setFontHeightInPoints((short)11);
        
        //创建标题的样式
        CellStyle style_title = wk.createCellStyle();
        //标题的字体
        Font font_title = wk.createFont();
        font_title.setFontName("黑体");
        font_title.setFontHeightInPoints((short)18);
        
        //创建单元格样式
        CellStyle style_content = wk.createCellStyle();
        //居中
        style_content.setAlignment(CellStyle.ALIGN_CENTER);//水平居中
        style_content.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
        
        //复制样式
        style_title.cloneStyleFrom(style_content);
        //设置标题的字体
        style_title.setFont(font_title);
        //标题的单元格
        Cell cell_title = sht.getRow(0).createCell(0);
        //设置标题的样式
        cell_title.setCellStyle(style_title);
        
        style_content.setBorderBottom(CellStyle.BORDER_THIN);//底部边框为细边框
        style_content.setBorderLeft(CellStyle.BORDER_THIN);//
        style_content.setBorderTop(CellStyle.BORDER_THIN);
        style_content.setBorderRight(CellStyle.BORDER_THIN);
        
        //设置样式的字体
        style_content.setFont(font_content);
        
        //创建日期的样式
        CellStyle style_date = wk.createCellStyle();
        style_date.cloneStyleFrom(style_content);
        //格式化
        DataFormat dataFormat = wk.createDataFormat();
        style_date.setDataFormat(dataFormat.getFormat("yyyy-MM-dd"));
        
        //合并单元格
        //firstRow 开始的行, lastRow结束的行, firstCol开始的列, lastCol结束的列
        sht.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));//标题
        sht.addMergedRegion(new CellRangeAddress(2, 2, 1, 3));//供应商
        sht.addMergedRegion(new CellRangeAddress(7, 7, 0, 3));//明细
        
        int rowCnt = 9 + list.size();
        //创建行
        for(int i = 2; i <= rowCnt; i++){
            row = sht.createRow(i);
            //设置行高
            row.setHeight((short)500);
            for(int j = 0; j < 4; j++){
                //设置单元格的样式
                row.createCell(j).setCellStyle(style_content);
            }
        }
        //设置列宽
        for(int i = 0; i < 4; i++){
            sht.setColumnWidth(i, 5000);
        }
        
        //设置内容
        cell_title.setCellValue(title);//标题
        //供应商
        sht.getRow(2).getCell(0).setCellValue("供应商");
        //日期
        sht.getRow(3).getCell(0).setCellValue("下单日期");
        sht.getRow(4).getCell(0).setCellValue("审核日期");
        sht.getRow(5).getCell(0).setCellValue("采购日期");
        sht.getRow(6).getCell(0).setCellValue("入库日期");
        
        //设置日期格式
        sht.getRow(3).getCell(1).setCellStyle(style_date);
        sht.getRow(4).getCell(1).setCellStyle(style_date);
        sht.getRow(5).getCell(1).setCellStyle(style_date);
        sht.getRow(6).getCell(1).setCellStyle(style_date);
        
        sht.getRow(3).getCell(1).setCellValue(orders.getCreatetime());//下单日期
        setDateValue(sht.getRow(4).getCell(1),orders.getChecktime());//审核日期
        setDateValue(sht.getRow(5).getCell(1),orders.getStarttime());//确认日期
        setDateValue(sht.getRow(6).getCell(1),orders.getEndtime());//入库日期
        
        sht.getRow(3).getCell(2).setCellValue("经办人");
        sht.getRow(4).getCell(2).setCellValue("经办人");
        sht.getRow(5).getCell(2).setCellValue("经办人");
        sht.getRow(6).getCell(2).setCellValue("经办人");
        
        sht.getRow(3).getCell(3).setCellValue(getEmpName(orders.getCreater()));//下单人
        sht.getRow(4).getCell(3).setCellValue(getEmpName(orders.getChecker()));//审核人
        sht.getRow(5).getCell(3).setCellValue(getEmpName(orders.getStarter()));//确认人
        sht.getRow(6).getCell(3).setCellValue(getEmpName(orders.getEnder()));//库管员
        
        sht.getRow(7).getCell(0).setCellValue("订单明细");
        sht.getRow(8).getCell(0).setCellValue("商品名称");
        sht.getRow(8).getCell(1).setCellValue("数量");
        sht.getRow(8).getCell(2).setCellValue("价格");
        sht.getRow(8).getCell(3).setCellValue("金额");
        
        //设置供应商
        sht.getRow(2).getCell(1).setCellValue(getSupplierName(orders.getSupplieruuid()));
        
        int i = 9;
        for (Orderdetail od : list) {
            row = sht.getRow(i);
            row.getCell(0).setCellValue(od.getGoodsname());
            row.getCell(1).setCellValue(od.getNum());
            row.getCell(2).setCellValue(od.getPrice());
            row.getCell(3).setCellValue(od.getMoney());
            i++;
        }
        sht.getRow(i).getCell(0).setCellValue("合计");
        sht.getRow(i).getCell(3).setCellValue(orders.getTotalmoney());
        
        //把工作簿写到输出流中
        try {
            wk.write(os);
        } finally{
            try {
                wk.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }

action

public void exportById(){
        
        HttpServletResponse response = ServletActionContext.getResponse();
        
        try {
            //转成字节码,再用西欧编码来读取字符串,解决乱码问题
            String filename = "orders_" + getId() + ".xls"; 
            response.setHeader("Content-Disposition", "attachment;filename=" + filename);
            ordersBiz.exportById(getId(), response.getOutputStream());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

posted @ 2018-08-29 21:45  Dear丶配角  阅读(132)  评论(0)    收藏  举报