使用OPI,excel文件导出

public void exportXls() {
// 两个头 一个流
try {
// 获取要到处到哪里的路径
String filepath = ServletActionContext.getServletContext().getRealPath("/") + "template/subArea.xls";
//得到输入流
InputStream in = new FileInputStream(filepath);
// 得到输出流
HttpServletResponse response = ServletActionContext.getResponse();
ServletOutputStream outputStream = response.getOutputStream();
// 得到响应头 
String agent = ServletActionContext.getRequest().getHeader("User-Agent");
// 校验是火狐还有别的,处理后的文件名
String filename = FileUtils.encodeDownloadFilename("文件下载.xls", agent);
// 响应头 告诉浏览器
response.setHeader("content-disposition", "attachment;fileName=" + filename);
// 调用service
subAreaSerice.exportXls(in, outputStream);
} catch (IOException e) {
e.printStackTrace();
}

}

Service层

@Override
public void exportXls(InputStream in, ServletOutputStream outputStream) throws IOException {
// 从数据库中读取所有数据 实现OPI

// 分拣编号 省 市 区 关键字 起始号 终止号 单双号 辅助关键字
HSSFWorkbook book = new HSSFWorkbook(in);

// 创建table工作薄
HSSFSheet sheet = book.getSheetAt(0); 


// 创建第一行的标题,手动得到值,赋值给我们的第一行标题行
HSSFCellStyle style = book.getSheetAt(1).getRow(0).getCell(0).getCellStyle();


// 第一行设置完成 查询数据库,得到所有(从数据库拿值写出)
List<SubArea> findAll = subAreaDao.findAll();


// 分拣编号 省 市 区 关键字 起始号 终止号 单双号 辅助关键字
int i = 2;//根据格式从第几行书写,就从第几行开始插入
HSSFCell cell = null;
for (SubArea subArea : findAll) {
// 从表中创建一个新列
HSSFRow row = sheet.createRow(i);
// 给每一列赋予样式
cell = row.createCell(0);
cell.setCellValue(subArea.getId());
cell.setCellStyle(style);


cell = row.createCell(1);
cell.setCellValue(subArea.getArea().getProvince());
cell.setCellStyle(style);


cell = row.createCell(2);
cell.setCellValue(subArea.getArea().getCity());

cell.setCellStyle(style);


cell = row.createCell(3);
cell.setCellValue(subArea.getArea().getDistrict());
cell.setCellStyle(style);
i++;
}
// 写出到文档
try {
book.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值