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

poi 架包导出excel,并下载

时间:2016-09-13 23:54:43      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:

导出excel在许多系统中都有应用到,这里以两个简单例子作为介绍:

1、导入poi-3.9.jar,可以在官网下载http://poi.apache.org 。

2、先写一个简单的测试类,里面有详细的解释,代码如下: 

 1 import java.io.FileOutputStream;
 2 import java.io.IOException;
 3 import org.apache.poi.hssf.usermodel.HSSFCell;
 4 import org.apache.poi.hssf.usermodel.HSSFRow;
 5 import org.apache.poi.hssf.usermodel.HSSFSheet;
 6 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 7 import org.junit.Test;
 8 
 9 public class outputExcel {
10     @Test
11     public void outPutExcel() throws IOException{
12         FileOutputStream fos=new FileOutputStream("D://data.xls");
13         //写入excel的数据,这个数据你根据自己的情况,从数据库中读取。
14         String[][] data={{"0001","xx局","00"},{"0002","xx局A机构","00"},{"0003","xx局B机构","00"}};
15         HSSFWorkbook workBook=null;
16         String[] title={"单位代码","单位名称","上级单位代码"}; //excel第一行的标题
17         workBook=new HSSFWorkbook();   //创建Excel
18         HSSFSheet sheet=workBook.createSheet("导出数据情况");     //工作表
19         HSSFRow row=sheet.createRow(0);        //行,默认从0开始
20         HSSFCell cell=null;     //列,和行对应,每次创建一行,就要创建与该行对应的列
21         //第一行输入标题
22         for(int j=0;j<title.length;j++){
23             cell=row.createCell(j);
24             cell.setCellValue(title[j]);
25         }
26         //写入数据到excel
27         for(int t=0;t<data.length;t++){
28             row=sheet.createRow(t+1);     //从第二行开始创建,前面已经创建过第一行标题
29             for(int k=0;k<3;k++){
30                 cell=row.createCell(k);
31                 cell.setCellValue(data[t][k]);
32             }
33         }
34         try {
35             workBook.write(fos);    //将excel通过数据流写出
36             fos.flush();
37             fos.close();
38         }finally{
39             if(fos!=null){
40                 fos.flush();
41                 fos.close();
42             }
43         }
44     }
45 }

 

运行上面的代码就可以在D盘看到data.xls这个导出文件了。

打开如下:
技术分享

在这里还要强调一点:在为列设置值的时候有人往往使用 cell.setCellValue(new HSSFRichTextString(title[j])); 这是很不好的习惯,因为如果数据量很大,那么new HSSFRichTextString()就可能导致内存崩溃。

3、上面这种方式是写死的路径导出,而且在实际应用中往往不会这么写的,excel文件要么保存在服务器的某个文件下,要么从数据库中获取数据来创建,然后用户通过下载来获取。

下面就来介绍,在service层返回一个workBook给controller层实现下载,代码如下:

 1 @Service
 2 public class OutPutExcelService {
 3     @Autowired
 4     private AccBookDao accBookDao;
 5     @Autowired
 6     private AssetCardDao assetCardDao;
 7     @Autowired
 8     private GlDefDao glDefDao;
 9     @Autowired
10     private IpCompanyDao ipCompanyDao;
11     
12     @SuppressWarnings("unchecked")
13     public HSSFWorkbook outPutExcel(String nd,String co_code){
14         HSSFWorkbook workBook=null;
15         String[] title={"单位代码","单位名称","上级单位代码","公共档案","总账数据","固定资产数据"};
16         //参数定义
17         Map<String, Object> param=new HashMap<String, Object>();
18         param.put("co_code", co_code);
19         //获取单位代码、单位名称、上级单位代码
20         List<PageVo> dwList=ipCompanyDao.findPageByCode(param);
21         //根据dwList查询其他表数据
22         List<String> data=new ArrayList<String>();
23         for(int i=0;i<dwList.size();i++){
24             data.add(dwList.get(i).getCo_code());
25             data.add(dwList.get(i).getCo_name());
26             
27             String dw_code=dwList.get(i).getCo_code();
28             Map<String, Object> param2=new HashMap<String, Object>();
29             param2.put("nd", nd);
30             param2.put("dw_code", dw_code);
31             
32             data.add(ipCompanyDao.selectPCoCode(dw_code));
33             
34             if(accBookDao.selectAccBookNo(param2)!=null){
35                 data.add("已导入");
36             }else{
37                 data.add("无");
38             }
39             if(glDefDao.selectAccBookNo(param2)!=null){                
40                 data.add("已导入");
41             }else{
42                 data.add("无");
43             }
44             if(assetCardDao.selectAssetNo(param2)!=null){
45                 data.add("已导入");                
46             }else{
47                 data.add("无");
48             }
49         }    
50         workBook=new HSSFWorkbook();   //创建Excel
51         HSSFSheet sheet=workBook.createSheet("导出数据情况");     //工作表
52         HSSFRow row=sheet.createRow(0);        //
53         HSSFCell cell=null;     //54         //第一行输入标题
55         for(int j=0;j<title.length;j++){
56             cell=row.createCell(j);
57             cell.setCellValue(title[j]);
58         }
59         //写入数据到excel
60         for(int t=0;t<data.size()/6;t++){
61             row=sheet.createRow(t+1);
62             for(int k=0;k<6;k++){
63                 cell=row.createCell(k);
64                 cell.setCellValue(data.get(t*6+k));
65             }
66         }
67         return workBook;
68     }
69 }

 

这里返回一个workBook给controller层,然后controller层调用这个方法获取,实现获取前台数据和返回数据给前台。http://www.cnblogs.com/yaket/p/5830531.html

poi 架包导出excel,并下载

标签:

原文地址:http://www.cnblogs.com/yaket/p/5870077.html

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