zoukankan      html  css  js  c++  java
  • java读写Excel模板文件,应用于负载均衡多个服务器

    首先,需要大家明白一点,对于多服务器就不能用导出文件用a标签访问链接方式去导出excel文件了,原因相信大家也明白,可能也做过尝试。

    现在开始第一步:get请求,productPath 为你的项目路径

    var url=productPath + "/CtrlService"+"?action=ZcjqrGlfExport&UserName="+ username+"&FILENAME="+ filePath;
    window.open(url);

    第二步:

        public Object doCtrlService(StubObject arg0, JParamObject arg1, HttpServletRequest req,
                HttpServletResponse resp)
                throws Exception {
            String filePath = req.getParameter("FILENAME");
            try {
                JParamObject PO=JParamObject.getInstance();
                PO.SetValueByParamName("filePath", filePath);
                PO.setEnvValue("DBNO", "FMIS_DB01");
                PO.setEnvValue("DataBaseName", "FMIS_DB01");
                JResponseObject RO=(JResponseObject) EAI.DAL.SVR("FMIS_ZCJQR_GLFFT_EXPORT", PO);
                String fileName=(String)RO.getResponseObject("fileName");
                byte[] fileBytes=(byte[])RO.getResponseObject("fileBytes");
                if(fileBytes==null){
                    return null;
                }
                setResponseHeader(resp,fileName,".xls");
                ServletOutputStream  out=resp.getOutputStream();
                try{
                    out.write(fileBytes);
                    out.close();
                }catch(Exception e){
                    if(e.getClass().getName().equals("org.apache.catalina.connector.ClientAbortException")){
                        logger.info("客户端终止操作");
                        return null;
                    }
                    throw e;
                }
            } catch (Exception e) {
                String errMsg = "异常";
                logger.error(errMsg,e);
                ServiceException se = new ServiceException(e.getMessage());
                se.setErrorCode(-502);
                se.setErrorMessage(errMsg);
                throw se;
            }         
            return null;
        }
        
        
        private void onError(HttpServletResponse resp, String msg) throws Exception {
            resp.setHeader("Content-type", "text/html;charset=UTF-8");
            resp.setCharacterEncoding("UTF-8");
            resp.getWriter().print(msg);
        }
        
        private void setResponseHeader(HttpServletResponse resp, String fileName, String fileType) throws Exception {
    
            String fileNameEncode = java.net.URLEncoder.encode(fileName, "UTF-8");
            String[][] contentType = 
                { 
                    {".xls","application/x-xls"}
                     };
            for (int i = 0; i < contentType.length; i++) {
                if (contentType[i][0].equals(fileType)) {
                    resp.setContentType(contentType[i][1]);
                    break;
                }
            }
            resp.addHeader("Content-Disposition", "attachment;filename=" + fileNameEncode);
            return;
    
        }

    第三步:读取模板文件,并输出文件流

    	private byte[]  fileExport(JConnection conn, JParamObject PO) {
    		InputStream io;
    		String  path=EAI.LocalUserHome;
    		String modelfilepath=path+"importTemp"+File.separator+"Glfftmodel.xls";
    		String filename=TempleNameUtils.createTempTableName("glfmx_");
    		String outputPath=path+"exporttemp"+File.separator+filename+".xls";
    		ByteArrayOutputStream outputStream = null;
    		byte[] bytes = new byte[0];
    		deleteExcelBeforeExport(path+"exporttemp","glfmx");
    		try{
    		//这里读出来的workbook作为模版
    		io = new FileInputStream(new File(modelfilepath));
    		HSSFWorkbook workbook = new HSSFWorkbook(io);
    		HSSFSheet sheet=workbook.getSheetAt(0);
    		List<Glfftbean> listg=QueryGlfftList(conn);
    
    		HSSFCellStyle cellStyle = workbook.createCellStyle(); // 单元格样式
    		cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    		cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    		cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    		cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    		 
    		for(int i=0;i<listg.size();i++){
    			Glfftbean glfftbean=listg.get(i);
    			System.out.println(i);
    			String xmbh= glfftbean.getXmbh();
    			HSSFRow row=sheet.getRow(i+9);//第10行开始
    			if (row == null) {
    				row = sheet.createRow(i+9);
    				row.createCell(0).setCellValue(xmbh);
    				row.createCell(1).setCellValue(glfftbean.getXmmc());
    				row.createCell(2).setCellValue(glfftbean.getQmzjgc());
    				row.createCell(3).setCellValue(glfftbean.getZcbh());
    				row.createCell(4).setCellValue(glfftbean.getZcmc());
    				row.createCell(5).setCellValue(glfftbean.getCbzxbh());
    				row.createCell(6).setCellValue(glfftbean.getCbzxmc());
    				row.createCell(7).setCellValue(glfftbean.getFtje());
    				row.createCell(8).setCellValue(glfftbean.getQzfzcbh());
    			}else{
    				row.getCell(0).setCellValue(xmbh);
    				row.getCell(1).setCellValue(glfftbean.getXmmc());
    				row.getCell(2).setCellValue(glfftbean.getQmzjgc());
    				row.getCell(3).setCellValue(glfftbean.getZcbh());
    				row.getCell(4).setCellValue(glfftbean.getZcmc());
    				row.getCell(5).setCellValue(glfftbean.getCbzxbh());
    				row.getCell(6).setCellValue(glfftbean.getCbzxmc());
    				row.getCell(7).setCellValue(glfftbean.getFtje());
    				row.getCell(8).setCellValue(glfftbean.getQzfzcbh());
    			}
    			for (Cell cell : row) {
    				 cell.setCellStyle(cellStyle);
    				}
    			
    		}
    			File file= new File(outputPath);
    			FileOutputStream fo=new FileOutputStream(file);
    			workbook.write(fo);
    			workbook.close();
    			long fileSize = file.length();
    			FileInputStream in = new FileInputStream(file);
    			byte[] buffer = new byte[(int) fileSize];
    			while ((fileSize = in.read(buffer)) != -1) {
    				return buffer;
    			}
    			in.close();
    			return buffer;
    		}catch (Exception e){
    			String errMsg = "创建文件流失败";
    			logger.error(errMsg, e);
    			ServiceException se = new ServiceException(e.getMessage());
    			se.setErrorCode(-1);
    			se.setErrorMessage(errMsg);
    		}
    		return bytes;
    	}

    删除相关文件:

    public static void deleteExcelBeforeExport(String path, String username) {
            File file = new File(path);
            File[] fileList = file.listFiles();
            if (fileList != null) {
                for (int i = 0; i < fileList.length; i++) {
                    File fs = fileList[i];
                    if (!fs.isDirectory()) {
                        String[] fileNames = fs.getName().split("_");
                        if (fileNames.length > 1) {
                            String fileUserName = fileNames[0];
                                // --删除包含该用户名的并且后缀的开头为
                                if (fileUserName.equals(username)) {
                                    String deleteFilePath = path + File.separator + fs.getName();
                                    File deleteFile = new File(deleteFilePath);
                                    deleteFile.delete();
                                }
                        }
                    }
                }
            }
    
        }

    结束

    思路总结:需要生成文件 ->读取文件 -> 输出文件流 -> 删除文件

    属作者原创,如有转载,请表明出处:https://www.cnblogs.com/mobeisanghai/p/12191374.html

  • 相关阅读:
    RNN-2-前向传播、BPTT反向传播
    RNN-1-参数共享、网络的展开、常见应用
    被围绕的区域
    语言模型的评价方法
    个性化推荐系统
    推荐系统-CTR-Wide&Deep
    推荐系统-CTR-总结
    推荐系统-CTR-PNN
    Local variable flag defined in an enclosing scope must be final or effective
    2.两数相加
  • 原文地址:https://www.cnblogs.com/mobeisanghai/p/12191374.html
Copyright © 2011-2022 走看看