码迷,mamicode.com
首页 > 其他好文 > 详细

使用POI动态更新导出的EXCEL模板中的列

时间:2015-11-11 14:46:52      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

基本思路:

1.从附件服务器上取得模板的流文件

2.拿到流文件之后再使用workbook.write(outs);方法改变流文件中的数据。

        else if (pageContext.getParameter("Export") != null) {
            OraclePreparedStatement oraclepreparedstatement;
            OracleResultSet oracleresultset;
            oraclepreparedstatement = null;
            oracleresultset = null;
            String attachmentId = null;
            
            int count = 0;            
            try {
                oraclepreparedstatement = 
                        (OraclePreparedStatement)EditImportDataAM.getOADBTransaction().createPreparedStatement("SELECT COUNT(1)\n" + 
                        "  FROM mtl_categories_b_kfv\n" + 
                        " WHERE category_id IN (SELECT category_id FROM cux_pon_categorys WHERE auction_header_id = ‘"+auctionHeaderId+"‘)", 
                                                                                              1);
                oracleresultset = (OracleResultSet)oraclepreparedstatement.executeQuery();
                if (oracleresultset.next()) {
                        count = oracleresultset.getInt(1);
                      }
            } catch (SQLException e) {
            }
            if(count==0){
                throw new OAException("CUX","CUX_CATEGORY_DEMAND_NOT_NULL",null,OAException.ERROR,null);
            }

            try {
                oraclepreparedstatement = 
                        (OraclePreparedStatement)EditImportDataAM.getOADBTransaction().createPreparedStatement(" select cat.id from cux_attachment_t cat where cat.source_type=‘PON‘ and cat.source_table = ‘PON_AUCTION_ITEM_TEMPLETE‘ and cat.source_id=‘-99999‘ and cat.file_status = ‘C‘", 
                                                                                                               1);
                oraclepreparedstatement.defineColumnType(1, -5);
                oracleresultset = 
                        (OracleResultSet)oraclepreparedstatement.executeQuery();
                if (oracleresultset.next()) {
                    attachmentId = 
                            (new StringBuilder()).append("").append(oracleresultset.getLong(1)).toString();
                } else {
                    throw new OAException("不存在定价行导入模板");
                }
            } catch (Exception exception2) {
                throw OAException.wrapperException(exception2);
            }

            LogUtil.of(attachmentId, pageContext).print(pageContext);
            downloadFileFromServer(pageContext, webBean, attachmentId);
//            exportModeExcel(pageContext, webBean, attachmentId);
            return;
        }
        
        
        
            public void downloadFileFromServer(OAPageContext pageContext, 
                                       OAWebBean webBean, 
                                       String attachmentId) {
        OAApplicationModule am = pageContext.getApplicationModule(webBean);
        AttachementVOImpl AttachementVO = 
            (AttachementVOImpl)am.findViewObject("AttachementVO");
        if (AttachementVO == null) {
            AttachementVO = 
                    (AttachementVOImpl)am.createViewObject("AttachementVO", 
                                                           "cux.oracle.apps.cux.attachement.server.AttachementVO");
        }
        AttachementVO.setWhereClause(null);
        AttachementVO.setWhereClauseParams(null);
        String sql = "1=1 and ID=‘" + attachmentId + "‘";
        AttachementVO.setWhereClause(sql);
        AttachementVO.setMaxFetchSize(-1);
        AttachementVO.executeQuery();
        AttachementVORowImpl attachementInfo = 
            (AttachementVORowImpl)AttachementVO.first();
        HttpServletResponse response = 
            (HttpServletResponse)pageContext.getRenderingContext().getServletResponse();
        String fileType = 
            attachementInfo.getFileMimetype(); 
        response.setContentType(fileType);


        String fileName = attachementInfo.getFileName();
        try {
            response.addHeader("Content-Disposition", 
                               "attachment;filename=" + new String(fileName.getBytes("GBK"), 
                                                                   "ISO-8859-1"));
            response.setHeader("Content-Transfer-Encoding", "binary");
            // response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
            response.setHeader("Cache-Control", "no-store");

            response.setHeader("Pragma", "public");
        } catch (UnsupportedEncodingException e) {

            LogUtil.of("downloadFileFromServer from FTP server Error-filename!", 
                       this);
        }

        InputStream in = null;
        ServletOutputStream outs = null;

        FtpUtil ftp = this.getFtp(pageContext);

        try {
            outs = response.getOutputStream();
            //获取附件流文件
            in =  ftp.getFile(attachementInfo.getFilePath(), attachementInfo.getFileName());

            
//            int ch;
//            while ((ch = in.read()) != -1) {
//                outs.write(ch);
//            }
            
            
//            Workbook workbook = new XSSFWorkbook(in);
//            org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(1);
//            org.apache.poi.ss.usermodel.Row row = null;
//            org.apache.poi.ss.usermodel.Cell cell = null;
//
//            String cellValue = "132700002800";
//
//            for (int i = 0; i < 5; i++) {
//                System.out.println(" i =" + i);
//                row = sheet.createRow(i);
//                cell = row.createCell(0);
//                cell.setCellValue(cellValue);
//            }
//            workbook.write(outs);
            
            exportExcel(pageContext,in, outs);

        } catch (IOException e) {
            LogUtil.of("downloadFileFromServer from FTP server Error-!" + 
                       e.getMessage(), this);
        } finally {
            try {
                outs.flush();
                outs.close();
                if (in != null) {
                    in.close();
                }
                ftp.closeClient();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    
        /**
     * 获取FTP配制信息,并初始化连接
     * @param pageContext
     * @return
     */
    protected FtpUtil getFtp(OAPageContext pageContext) {
        String host = pageContext.getProfile("CUX_SRM_FTP_HOST");
        String port = pageContext.getProfile("CUX_SRM_FTP_PORT");
        String user = pageContext.getProfile("CUX_SRM_FTP_USER");
        String password = pageContext.getProfile("CUX_SRM_FTP_PASSWORD");
        return new FtpUtil(host, port, user, password);
    }
    
    
        public void exportExcel(OAPageContext pageContext,InputStream ins,OutputStream outs){
        
        try {
            OAApplicationModule am = pageContext.getRootApplicationModule();
            OAApplicationModule EditImportDataAM = null;
            EditImportDataAM = 
                    (OAApplicationModule)am.findApplicationModule("EditImportDataAM");

            OAViewObject AuctionHeadersAllVO = 
                (OAViewObject)am.findViewObject("AuctionHeadersAllVO");
            AuctionHeadersAllVORowImpl AuctionHeadersAllRow = 
                (AuctionHeadersAllVORowImpl)AuctionHeadersAllVO.first();
            Number auctionHeaderId = AuctionHeadersAllRow.getAuctionHeaderId();

            OAViewObject itemSegVO = 
                (OAViewObject)EditImportDataAM.findViewObject("CuxAucItemSegmentsVO1");
            itemSegVO.setWhereClause(null);
            itemSegVO.setWhereClauseParams(null);
            itemSegVO.setWhereClauseParam(0, auctionHeaderId);
            itemSegVO.executeQuery();

            RowSetIterator itemSegIter = 
                itemSegVO.findRowSetIterator("itemSegIter") == null ? 
                itemSegVO.createRowSetIterator("itemSegIter") : 
                itemSegVO.findRowSetIterator("itemSegIter");

            Row itemSegRow = null;
            int itemSegCount = itemSegVO.getRowCount();

            Workbook workbook = new XSSFWorkbook(ins);
            org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(1);

            org.apache.poi.ss.usermodel.Row row = null;
            org.apache.poi.ss.usermodel.Cell cell = null;

            if (itemSegCount > 0) {
                itemSegIter.setRangeStart(0);
                itemSegIter.setRangeSize(itemSegCount);
                for (int i = 0; i < itemSegCount; i++) {
                    itemSegRow = itemSegIter.getRowAtRangeIndex(i);
                    String itemDescription = 
                        (String)itemSegRow.getAttribute("Description");
                    String itemNumber = 
                        (String)itemSegRow.getAttribute("ItemNumber");
                    row = sheet.createRow(i);
                    cell = row.createCell(0);
                    cell.setCellValue(itemDescription);
                    cell = row.createCell(1);
                    cell.setCellValue(itemNumber);
                }
            }
            itemSegIter.closeRowSetIterator();
            
            workbook.write(outs);
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                outs.flush();
                outs.close();
                if (ins != null) {
                    ins.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

 

使用POI动态更新导出的EXCEL模板中的列

标签:

原文地址:http://www.cnblogs.com/huanghongbo/p/4955792.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!