首页 > 代码库 > poi 架包导出excel,并下载
poi 架包导出excel,并下载
导出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 @Test11 public void outPutExcel() throws IOException{12 FileOutputStream fos=new FileOutputStream("D://data.xls");13 //写入excel的数据,这个数据你根据自己的情况,从数据库中读取。14 String[][] data=http://www.mamicode.com/{{"0001","xx局","00"},{"0002","xx局A机构","00"},{"0003","xx局B机构","00"}};15 HSSFWorkbook workBook=null;16 String[] title={"单位代码","单位名称","上级单位代码"}; //excel第一行的标题17 workBook=new HSSFWorkbook(); //创建Excel18 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 //写入数据到excel27 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 @Autowired10 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=http://www.mamicode.com/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(); //创建Excel51 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 //写入数据到excel60 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,并下载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。