struts2 利用 POI 导出 excel

第一种方式:在action中设置header等

1. 根据数据生成 HSSFWorkbook, 并将 HSSFWorkbook  写入到输出流

private void createExcel(List<String[]> data) throws Exception{
		HttpServletResponse response = ServletActionContext.getResponse();
		//excel 文件的 MIME 类型
		response.setContentType("application/vnd.ms-excel");
		String fileName = "导出数据";//需要使用<span style="font-family: Arial, Helvetica, sans-serif;">URLEncoder编码一下, 否则中文名字不会显示</span>
		response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fileName, "utf-8") +".xls");
		
		HSSFWorkbook wb = new HSSFWorkbook();
		if(data == null || data.size() < 1){
			return;
		}
		
		String sheetTitle = "sheet1";
		HSSFSheet sheet = wb.createSheet();
		wb.setSheetName(0,sheetTitle);

		HSSFRow row=null;
		HSSFCell cell = null;
		
		for(int i=0; i<data.size(); i++){
			row = sheet.createRow(i);
			for(int j=0; j<data.get(i).length; j++){
				
				cell = row.createCell(j);
				cell.setCellValue(data.get(i)[j]);
			}
		}
		
		OutputStream os = ServletActionContext.getResponse().getOutputStream();
		
		wb.write(os);
		
		if(os != null){
			os.flush();
			os.close();
		}
	}

2. 在 action 中调用该方法即可

public String export() throws Exception{
		
			
		oauthInfoService.getPageInfoData(startDate, endDate, clientId, pageInfo, true);
			
		List<String[]> data = new ArrayList<String[]>();
		List<OauthInfoBean> result = pageInfo.getSearchResult();
		String[] rowName = new String[]{"请求来源","授权时间","请求时间","手机号"};
		data.add(rowName);
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		
		for(OauthInfoBean bean : result){
			rowName = new String[4];
			rowName[0] = bean.getReqSource() == null?"":bean.getReqSource();
			if(bean.getAuthTime() != null){
				rowName[1] = sdf.format(bean.getAuthTime());
			}else{
				rowName[1] = "";
			}
			rowName[2] = bean.getReqTime()==null?"":bean.getReqTime();
			rowName[3] = bean.getPhone()==null?"":bean.getPhone();
			data.add(rowName);
		}
		
		this.createExcel(data);
		
		
		return NONE;
	}

3. struts2的配置文件中的配置方式

<action name="export" class="oauthInfoJsonAction" method="export">
			
		</action>


第二种方式,在struts2的配置文件中配置

代码
	/**
	 * 
	 * @return
	 * @throws Exception 
	 */
	public String export() throws Exception{
		HttpServletResponse response = ServletActionContext.getResponse();
		//excel 文件的 MIME 类型
		response.setContentType("application/vnd.ms-excel");
		response.setHeader("Content-disposition", "attachment;filename=授权信息数据.xls");
		exportFileName = "导出数据";
			
		oauthInfoService.getPageInfoData(startDate, endDate, clientId, pageInfo, true);
			
		List<String[]> data = new ArrayList<String[]>();
		List<OauthInfoBean> result = pageInfo.getSearchResult();
		String[] rowName = new String[]{"请求来源","授权时间","请求时间","手机号"};
		data.add(rowName);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		for(OauthInfoBean bean : result){
			rowName = new String[4];
			rowName[0] = bean.getReqSource() == null?"":bean.getReqSource();
			if(bean.getAuthTime() != null){
				//rowName[1] = sdf.format(bean.getAuthTime());
			}else{
				rowName[1] = "";
			}
			rowName[2] = bean.getReqTime()==null?"":bean.getReqTime();
			rowName[3] = bean.getPhone()==null?"":bean.getPhone();
			data.add(rowName);
		}
		
		this.createExcel(data);
		
		
		return SUCCESS;
	}
	
	private void createExcel(List<String[]> data) throws Exception{
		HSSFWorkbook wb = new HSSFWorkbook();
		if(data == null || data.size() < 1){
			return;
		}
		
		String sheetTitle = "sheet1";
		HSSFSheet sheet = wb.createSheet();
		wb.setSheetName(0,sheetTitle);

		HSSFRow row=null;
		HSSFCell cell = null;
		
		for(int i=0; i<data.size(); i++){
			row = sheet.createRow(i);
			for(int j=0; j<data.get(i).length; j++){
				
				cell = row.createCell(j);
				cell.setCellValue(data.get(i)[j]);
			}
		}
		
		this.exportFileName="导出数据";//设置fileName
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		wb.write(baos);
		baos.flush();
		byte[]aa=baos.toByteArray();
		this.excelFileStream = new ByteArrayInputStream(aa,0,aa.length);
		baos.close();
	}

xml配置文件
<action name="export" class="oauthInfoJsonAction" method="export">
			<result type="stream">
				
				<param name="contentType">application/vnd.ms-excel</param>  
	
				<param name="contentDisposition">attachment;filename=123.xls</param> 
	            
	            <param name="bufferSize">1024</param>
	
	            <param name="inputName">excelFileStream</param>   
			</result>
		</action>
当然在action中必须要有 excelFileStream这个属性和set,get方法


你可能感兴趣的:(struts2 利用 POI 导出 excel)