`
lpm528
  • 浏览: 81545 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

将数据导出到excel

    博客分类:
  • JSP
 
阅读更多

前台jsp调用代码:

	function outexe(){
			queryForm.action = "<%=basepath%>/lpm/lpm-grpinfoExl.action";
			queryForm.submit();
		}

 action代码:

/*
	 * 将数据导出到excel
	 */
	@Action(value="lpm-grpinfoExl")
	public String lpmExl()throws Exception
	{
		LpmServiceInter ll = ServiceFactory.getLpmService();
	    List result=ll.query(lpmdto.getHql());
		
		//写第一行标题行 
		String fileFolder = com.utils.FileUtil.createExlFile(getHttpRequest());//建文件夹
		File objFile = new File(fileFolder + File.separator + "公司信息.csv");//建文件
		String title = "公司编号,公司名称,公司状态,联系电话,注册时间";
		com.utils.FileUtil.appendDataWriter(objFile, title + "\n");
		
		//插入数据
		StringBuffer data = new StringBuffer();
		int rows = 0;
		for(java.util.Iterator i=result.iterator();i.hasNext();){
			GrpInfo g=(GrpInfo) i.next();
			String s=null;
			String s2=null;
			data.append("	" + g.getGrpCode()).append(",");
			data.append("	" + g.getGrpName()).append(",");
			if(g.getStatus()==1){
				s="有效";
			}else{
				s="已经撤销";
			}
			data.append("	" + s).append(",");
			data.append("	" + g.getGrpTelNo()).append(",");
			if(g.getRegtime()!=null){
				s2=DateUtil.datetoStr2(g.getRegtime());
			}else{
				s2="";
			}
			data.append("	" +s2);
			data.append("\n");
			rows ++;
			
			//当StringBuffer超过1千行数据时就先往文件插入那1千行数据并清空缓存数据
			if(rows > 1000){
				com.utils.FileUtil.appendDataWriter(objFile, data.toString());
				data.delete(0, data.length());
			}
		}
		com.utils.FileUtil.appendDataWriter(objFile, data.toString());
		//输出到excel
		com.utils.FileUtil.outExl(objFile, getHttpResponse());
		return null;
	}

 自定义util工具类代码:

	public static String createExlFile(HttpServletRequest request){
		String parentPath = request.getSession().getServletContext().getRealPath("/exceltemplate/temp/" + (new java.text.SimpleDateFormat("yyyyMMdd")).format(new Date()));
		//存tjfx目录
		String fileFolder = parentPath + File.separator + "tjfx";
		new File(fileFolder).mkdirs();
		//删除tjfx里的临时文件	
		delete(new File(fileFolder));
		return fileFolder;
	}

 

	//追加数据
	public static void appendDataWriter(File objFile, String data) {
		//if(!objFile.exists())
		FileWriter objFileWriter = null;
		BufferedWriter bfWriter = null;
		try {
			objFileWriter = new FileWriter(objFile, true);//true表示以追加的方式进行追加数据到文件
			bfWriter = new BufferedWriter(objFileWriter);//将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入  
			bfWriter.write(data);//写数据行
			//bfWriter.newLine();//写入一个行分隔符。
		} catch (Exception e) {
			//System.out.println("追加流发生错误:" + e.toString());  
			e.printStackTrace();
		} finally {
			try {
				bfWriter.flush();
				bfWriter.close();
				objFileWriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

 

public static void outExl(File objFile, HttpServletResponse response)
	throws Exception {
		ServletOutputStream os = null;
		InputStream in = null;
		try {
			long l = objFile.length(); //文件长度
			in = new FileInputStream(objFile);
			os = response.getOutputStream();//获取输出流
			if (in != null) {
				response.reset();
				response.setCharacterEncoding("gbk");
				response.setContentType("application/x-msdownload"); //
				String title = objFile.getName();
				title = title.substring(0,title.lastIndexOf("."));
				String sf = "attachment; filename="
						+ new String(title.getBytes(), "iso-8859-1") + ".csv"; //
				response.setHeader("Content-Disposition", sf); // 以上输出文件元信息
				response.setContentLength((int) l); //设置输入文件长度
				byte[] b = new byte[2048];
				int len = 0;
				while ((len = in.read(b)) > 0) {
					os.write(b, 0, len); //向浏览器输出
				}
				
			}
			os.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(in != null)
			in.close(); //关闭文件输入流
			if(os != null)
			os.close();
		}
	}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics