小java程序导出文件_【小白做项目Java】——POI导入和导出 execl文件

前提

在项目遇到要求上传并且能解析Excel文件的功能。在这个功能利用Apache POI刚好能完美解决。

何为POI

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

HSSF概况

HSSF是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。关于本文中涉及到Execl的导出和导入使用的是HSSFWorkBook对象。

使用POI,需要在项目中引入关于POI的jar包。例如(poi-3.9-20121203.jar)

导入

计算机中文件的传输都是以流来传输了,所以接收到上传的execl文件,本质上也是流。

/**

* @Title: importXls

* @Description: 批量导入

* @author 贾文静

* @return

* @throws IOException

* @throws FileNotFoundException

* @throws

* @date:2017年7月10日.下午4:25:27

*/

public String importXls() throws Exception{

String flag = "1";

//使用POI解析execl文件

try {

HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(myFile));

//获得第一个sheet页

HSSFSheet sheet = hssfWorkbook.getSheetAt(0);

List list = new ArrayList();

for (Row row : sheet) {

int rowNum = row.getRowNum();

if (rowNum == 0) {

//第一行,标题行,忽略

continue;

}

//以行为单位,解析数据

String id = row.getCell(0).getStringCellValue();

String province = row.getCell(1).getStringCellValue();

String city = row.getCell(2).getStringCellValue();

String district = row.getCell(3).getStringCellValue();

String postcode = row.getCell(4).getStringCellValue();

list.add(region);

}

//存入解析之后的数据

regionService.saveBatch(list);

} catch (Exception e) {

flag = "0";

}

//文件格式设置

ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");

//是否导入成功的标识

ServletActionContext.getResponse().getWriter().print(flag);

return NONE;

}

导出

相对导入,导出功能会相对复杂一些,涉及execl文件的创建,sheet的创建,还表头标题的创建,以及名称的创建等等。但是总体上来说使用POI解决还是非常容易的。具体的见代码吧。

/*

* 使用POI写入Execl文件提供下载

* 贾文静-2017年7月21日17:03:35

*/

public String exportXls() throws IOException{

//查询要导出的数据放入list

List list = subareaService.findAll();

//在内存中创建一个Execl文件,通过输出流写到客户端提供下载

HSSFWorkbook workbook = new HSSFWorkbook();

//创建一个sheet页

HSSFSheet sheet = workbook.createSheet("分区数据");

//创建标题行

HSSFRow headRow = sheet.createRow(0);

headRow.createCell(0).setCellValue("分区编号");

headRow.createCell(1).setCellValue("区域编号");

headRow.createCell(2).setCellValue("地址关键字");

headRow.createCell(3).setCellValue("省市区");

//循环在execl中放入数据

for (Subarea subarea : list) {

HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);

dataRow.createCell(0).setCellValue(subarea.getId());

dataRow.createCell(1).setCellValue(subarea.getRegion().getId());

dataRow.createCell(2).setCellValue(subarea.getAddresskey());

Region region = subarea.getRegion();

dataRow.createCell(3).setCellValue(region.getProvince()+region.getCity()+region.getDistrict());

}

String filename = "分区数据.xls";

String agent = ServletActionContext.getRequest().getHeader("User-Agent");

String encodeDownloadFilename = FileUtils.encodeDownloadFilename(filename, agent);

//下载输入内容的设置

//一个流两个头 输出流,输出文件格式,输出文件名称

ServletOutputStream out = ServletActionContext.getResponse().getOutputStream();

//根据文件名称判断文件编码格式

String contentType = ServletActionContext.getServletContext().getMimeType(filename);

ServletActionContext.getResponse().setContentType(filename);

//下载设置

ServletActionContext.getResponse().setHeader("content-disposition", "attchment;filename="+filename);

workbook.write(out);

return NONE;

}

【总结】

只要用过就是很简单的内容,利用封装的函数实现execl文件的读取和写入。其中关键是HSSFWorkBook,其本质就是创建了一个Execl对象。其余的操作就是一些方法的操作,知道大概方向就好!多做一点,多知道一点,没有哪一种经历是一无所获的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值