JAVA导出Excel方法

在很多项目中,都会有“数据导出到Excel”的需求,导出其实满简单的,但以前还没接触过导出功能时,项目需求就有一个导出功能,查看了网络中各人的经验。发现都很乱。讲不清楚。看不明白。要的没有,不要的一大堆加在代码中,使得新手看到这些代码很混乱。今天我也记录一下我导出Excel的方法。我会按步骤去写。这样大家可以直接Copy代码,然后根据自己的需求修改相应的步骤里的方法即可。

最近赶项目中,今天周六周日可以休息了,上周可是连续加班。在休息期间写写博客。谢谢大家的关注。

*导出Excel步骤

  1. 先导包,(poi包,他是apache下的导出Excel封装类包)
  2. 写导出Excel功能类
  3. 在Action中调用第二步的Excel功能类
  4. 在JSP前台调用Action执行导出功能
那我就从上面的步骤一一细写,大家请往下看。

1.先导包,(poi包,他是apache下的导出Excel封装类包)

  POI包,大家可以上百度下载。这个容易,我就不描述了。下载后,把包导入到你的项目中即可

2.写导出Excel功能类

这一步很关键。是导出的重要步骤,也是你要修改最多的内容,直接贴代码了。对了,对下面不能理解的同学,可以先自己在电脑上建一个Excel文档,先了解一下他是什么结构的表格。这样会更容易理解下面的代码。下面代码是一行行的插入数据,第一行为标题,第二行以后就是标题对应的数据,也就是数据库的数据了。
<pre name="code" class="java">public class V_WEB_ZPLX_Excel {
	Workbook wb = new HSSFWorkbook();

	@SuppressWarnings("unchecked")
	public void printExcel(List<V_WEB_ZPLX> list, OutputStream os)
			throws IOException {
		try {
			Sheet sheet = wb.createSheet("Excek表的名字");
			String[] title = { "日期", "内容<span style="font-family: Arial, Helvetica, sans-serif;">", "</span><span style="font-family: Arial, Helvetica, sans-serif;">内容1</span><span style="font-family: Arial, Helvetica, sans-serif;">", "内容2", "其他", "总计" };</span>
			Row titleRow = sheet.createRow(0);
			for (int i = 0; i < title.length; i++) {
				Cell cell = titleRow.createCell(i);
				cell.setCellValue(title[i]);
				sheet.setColumnWidth(i, 3000);
			}
			Cell cell = null;
			int getDqyhcwlzp = 0, dxzp = 0, qt = 0, wlzp = 0, zj = 0;
			List sunNum = new ArrayList();
			for (int i = 0; i < list.size(); i++) {
				Row row = sheet.createRow(i + 1);
				V_WEB_ZPLX v_web_zplx = list.get(i);
				String[] contents = { v_web_zplx.getSumDate(),
						String.valueOf(v_web_zplx.getDxzp()),
						String.valueOf(v_web_zplx.getWlzp()),
						String.valueOf(v_web_zplx.getDqyhcwlzp()),
						String.valueOf(v_web_zplx.getQt()),
						String.valueOf(v_web_zplx.getZj()) };
				for (int j = 0; j < contents.length; j++) {
					cell = row.createCell(j);
					cell.setCellValue(contents[j]);

				}
				getDqyhcwlzp += list.get(i).getDqyhcwlzp();
				dxzp += list.get(i).getDxzp();
				qt += list.get(i).getQt();
				wlzp += list.get(i).getWlzp();
				zj += list.get(i).getZj();
				if (i == (list.size() - 1)) {
					sunNum.add(getDqyhcwlzp);
					sunNum.add(dxzp);
					sunNum.add(qt);
					sunNum.add(wlzp);
					sunNum.add(zj);
					row = sheet.createRow(i + 2);
					cell = row.createCell(0);
					cell.setCellValue("总计:");

					for (int n = 0; n < sunNum.size(); n++) {
						cell = row.createCell(n + 1);
						cell.setCellValue(String.valueOf(sunNum.get(n)));
					}
	
				}
				;
			}

			wb.write(os);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			os.close();
		}
	}

}
 
  
 
  

3.在Action中调用第二步的Excel功能类

//导出
@Action("ZPLXExcel")
public String ZPLXExcel() throws IOException{
Object [] params = (Object[]) getSession().getAttribute("params");
Object [] values = (Object[]) getSession().getAttribute("values");
List<V_WEB_ZPLX>  list =  v_web_zpjqb_service.find(params, values, -1, -1);


OutputStream os= response.getOutputStream();
response.setContentType("application/vnd.ms-excel");
this.ExcelNmae("诈骗类型");
<V_WEB_ZPLX_Excel v_web_zplx_excel = new V_WEB_ZPLX_Excel();
v_web_zplx_excel.printExcel(list, os);
System.setOut(new PrintStream(os));
os.flush();
return null;
}
我这里思路是:我调用了我项目中的按条件查询并带有分页功能的方法。把里面的条件(params)和前台传过来的值(values)用Session传过来,既然要传过来,自然要在那个方法里先把这两个参数放到Session中,才能使用上面Session方法读出。然后我们再调用find()查询出List数据集合。最后就是下面的导出Excel语句了,把list传入即可。
不会Session保存?那我再贴出把值放入Session中的语句吧。
				ServletActionContext.getRequest().getSession().setAttribute("params", params);
				ServletActionContext.getRequest().getSession().setAttribute("values", values);

OK.就是这样了。最后我们在前台JSP中调用这个方法即可。如下

4.在JSP前台调用Action执行导出功能

location.href = "${pageContext.request.contextPath}/<span style="font-family: Arial, Helvetica, sans-serif;">ZPLXExcel</span><span style="font-family: Arial, Helvetica, sans-serif;">.action";</span>

在你的点击导出按钮里的事件就是上面这个了,这样调用Action就可以了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值