使用POI前需要先导入POI的jar包
2、创建HSSFWorkbook对象,将文件作为流传入构造函数中,然后从HSSFWorkbook对象中获取sheet表,再从表中依次取出每行的数据,在循环从每行中取出单元格中的数据。依次存入实体类中,将实体类作为一条记录保存到数据库中。详情如下:
二、导出数据库中数据到excel表格中
3、将工作簿对象以流的形式传送到客户端(俩头一流)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
一、导入Excel表格中的数据
1、首先显将excel文件上传到服务器上,拿struts为例,使用上传文件的属性驱动,并生成setter方法
//文件上传的属性驱动
private File regionFile;
public void setRegionFile(File regionFile) {
this.regionFile = regionFile;
}
2、创建HSSFWorkbook对象,将文件作为流传入构造函数中,然后从HSSFWorkbook对象中获取sheet表,再从表中依次取出每行的数据,在循环从每行中取出单元格中的数据。依次存入实体类中,将实体类作为一条记录保存到数据库中。详情如下:
public String importXls() throws Exception {
List<Region> listRegion = new ArrayList<Region>();
//创建excel文件对象
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(regionFile));
//获取sheet工作表
HSSFSheet sheet = workbook.getSheet("sheet1");
for (Row row : sheet) {
//去掉excel表中的标题行
if (row.getRowNum() == 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();
Region region = new Region(id, province, city, district, postcode, null, null, null);
listRegion.add(region);
}
//为了避免重复数据插入的错误,使用hibernate的saveOrUpdate方法
regionService.saveOrUpdate(listRegion);
return NONE;
}
二、导出数据库中数据到excel表格中
1、将要导入的数据从数据库中查出。
2、将分区数据导入excel文件中。首先通过HSSFWorkbook创建一个空的工作簿对象,然后通过这个对象的createSheet()方法创建工作表,通过工作表的Row和Cell循环将数据写入到工作表中。
public String exportXls() throws IOException {
//第一步、查询出所有分区数据
List<Subarea> listSubarea = subareaService.findAll();
//第二步、将分区数据导入到excel文件中
//创建一个空的excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个excel的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("位置信息");
headRow.createCell(4).setCellValue("所在地区");
for (Subarea subarea : listSubarea) {
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
dataRow.createCell(0).setCellValue(subarea.getId());
dataRow.createCell(1).setCellValue(subarea.getStartnum());
dataRow.createCell(2).setCellValue(subarea.getEndnum());
dataRow.createCell(3).setCellValue(subarea.getPosition());
dataRow.createCell(4).setCellValue(subarea.getRegion().getName());
}
//第三步、使用输出流将excel文件下载到客户端(两头一流)
String filename = "分区数据表.xls";
//获取.xls文件的mime类型
String mimeType = ServletActionContext.getServletContext().getMimeType(filename);
//获取客户端浏览器类型,并对下载的文件名进行编码
String agent = ServletActionContext.getRequest().getHeader("User-Agent");
filename = FileUtils.encodeDownloadFilename(filename, agent);
//设置两头一流
ServletActionContext.getResponse().setContentType(mimeType);
ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + filename);
ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream();
workbook.write(outputStream);
return NONE;
}
3、将工作簿对象以流的形式传送到客户端(俩头一流)
//设置两头一流
ServletActionContext.getResponse().setContentType(mimeType);
ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + filename);
ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream();