Java用POI往execl表格中写数据,并下载下来有两种方式

1、用poil的API创建表格,并设计好表格格式,然后往里面写数据

 /**
* execl导出 创建表格式,并写入数据
* @param sheetNmae sheet名
* @param tiltle 表头
* @param values 内容
* @param workbook
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetNmae,
String []tiltle,String[][] values,HSSFWorkbook workbook){ //创建一个Hssfworkbook 对应一个execl文件
if(workbook==null){
workbook=new HSSFWorkbook();
}
//在workbook中添加一个sheet,对应execl文件中的sheet
HSSFSheet sheet=workbook.createSheet(sheetNmae);
sheet.setDefaultColumnWidth((short)13);
//在sheet中添加表头第0行
HSSFRow row=sheet.createRow(0);
//创建单元格,设置表头
HSSFCellStyle style=(HSSFCellStyle)workbook.createCellStyle();
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
//字体样式
HSSFFont font=workbook.createFont();
font.setFontName("微软雅黑");
style.setFont(font); //声明列对象
HSSFCell cell=null; //创建标题
for(int i=0;i<tiltle.length;i++){
cell=row.createCell(i);
cell.setCellValue(tiltle[i]);
cell.setCellStyle(style);
}
//创建内容
//声明列对象
HSSFCell cell2=null;
for(int i=0;i<values.length;i++){
row = sheet.createRow(i + 1);
for(int j=0;j<values[i].length;j++){
//将内容按顺序赋给对应的列对象
cell2=row.createCell(j);
cell2.setCellValue(values[i][j]);
cell2.setCellStyle(style);
}
} return workbook;
}
  /**
*
* @param response
* @param companyCostVo 前端传过来的对象
* @throws Exception
*/
@RequestMapping("/download")
public void download(HttpServletResponse response, CompanyCostVo companyCostVo) throws Exception { Integer year=Integer.valueOf(redisService.valueOperations().get("audityear").toString());
companyCostVo.setYear(year);
//获取数据
List<CompanyCostVo> companyCostVos=companyCostService.selectCompanyCost(companyCostVo);
//exexl标题
String[]title={"序号","公司名称","公交总车辆数","公交收费车辆数","公交收费单价","公交实收金额","公交应收金额",
"农客总车辆数","农客收费车辆数","农客收费单价","农客实收金额","农客应收金额","总实收金额","总应收金额"};
//execl文件名
String fileName=year+"年企业审计费用清算信息表.xls";
//sheetming
String sheetName="费用清算信息";
int len=companyCostVos.size();
String [][] content=new String[len][14];
for(int i=0;i<len;i++){
//content[i]=new String[len];
CompanyCostVo cCostVo=companyCostVos.get(i);
content[i][0]=(i+1)+"";
content[i][1]=cCostVo.getCompanyName();
content[i][2]="无";
if(cCostVo.getVehicleNumGj()!=null){
content[i][2]=cCostVo.getVehicleNumGj().toString();
}
content[i][3]="无";
if(cCostVo.getVehicleNumChargGj()!=null){
content[i][3]=cCostVo.getVehicleNumChargGj().toString();
}
content[i][4]="无";
if(cCostVo.getUnitPriceGj()!=null){
content[i][4]=cCostVo.getUnitPriceGj().toString();
}
content[i][5]="无";
if(cCostVo.getAccountAmountGj()!=null){
content[i][5]=cCostVo.getAccountAmountGj().toString();
}
content[i][6]="无";
if(cCostVo.getAccountPayableGj()!=null){
content[i][6]=cCostVo.getAccountPayableGj().toString();
}
content[i][7]="无";
if(cCostVo.getVehicleNumNk()!=null){
content[i][7]=cCostVo.getVehicleNumNk().toString();
}
content[i][8]="无";
if(cCostVo.getVehicleNumChargNk()!=null){
content[i][8]=cCostVo.getVehicleNumChargNk().toString();
}
content[i][9]="无";
if(cCostVo.getUnitPriceNk()!=null){
content[i][9]=cCostVo.getUnitPriceNk().toString();
}
content[i][10]="无";
if(cCostVo.getAccountAmountNk()!=null){
content[i][10]=cCostVo.getAccountAmountNk().toString();
}
content[i][11]="无";
if(cCostVo.getAccountPayableNk()!=null){
content[i][11]=cCostVo.getAccountPayableNk().toString();
}
content[i][12]="无";
if(cCostVo.getAccountAmount()!=null){
content[i][12]=cCostVo.getAccountAmount().toString();
}
content[i][13]="无";
if(cCostVo.getAccountPayable()!=null){
content[i][13]=cCostVo.getAccountPayable().toString();
} } //创建hssfworkbook
HSSFWorkbook workbook=ExcelUtils.getHSSFWorkbook(sheetName, title, content, null);
//相应到客户端
try{
this.setResponseHeader(response, fileName);
OutputStream osStream=response.getOutputStream();
workbook.write(osStream);
osStream.flush();
osStream.close();
}catch(Exception e){
e.printStackTrace();
}
}
 //发送响应流方法
public void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}

2、自己创建好Execl表的模板,然后直接往里面写入数据

  /**
* 导出异常车辆Ecexl
* @param response
* @param materialGjChangeDetailVo
* @throws Exception
*/
@RequestMapping("/downloadEcexl")
@ResponseBody
public void downloadExecl(HttpServletResponse response, MaterialGjChangeDetailVo materialGjChangeDetailVo) throws Exception{
// 所属公司
SysUser sysUser = (SysUser) SecurityUtils.getSubject().getPrincipal();
if(!"1".equals(sysUser.getType())) {
materialGjChangeDetailVo.setCompanyId(sysUser.getCompanyInfoId());
materialGjChangeDetailVo.setYear(Integer.valueOf(redisService.valueOperations().get("audityear").toString()));
}
//模板地址,项目的根目录
String filePathName = "/templates/新增及更换公交车异常车辆明细表.xls";
InputStream in=this.getClass().getResourceAsStream(filePathName);
POIFSFileSystem poifsFileSystem=new POIFSFileSystem(in);
HSSFWorkbook workbook=new HSSFWorkbook(poifsFileSystem);
HSSFSheet sheet=workbook.getSheet("Sheet1");
sheet.setForceFormulaRecalculation(true);
//设置模板中的一些格式,这里主要是处理某些表格高亮
HSSFCellStyle style=(HSSFCellStyle)workbook.createCellStyle();
style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND); List<MaterialGjChangeDetailVo> ts = materialGjChangeDetailService.selectMaterialGjChangeDetail(materialGjChangeDetailVo);
String companyName=null;
if(ts!=null&& ts.size()!=0){
companyName=ts.get(0).getCompanyName();
//从第一行第一列开始写入数据,列与行的下标都是从0开始的
sheet.getRow(0).getCell(0).setCellValue("新增及更换公交车明细表("+materialGjChangeDetailVo.getYear()+"年度)");
sheet.getRow(2).getCell(0).setCellValue("被审计单位:"+companyName);
for(int i=0,len1=ts.size();i<len1;i++){
String falg=null;
if(ts.get(i).getFlag()!=null){
falg=ts.get(i).getFlag();
}
for(int j=0,len=falg.length();j<len;j++){
sheet.getRow(5+i).getCell(0).setCellValue(i+1);//第5+i行 第i列 从0开始 0
if(ts.get(i).getPlateNumber()!=null){
sheet.getRow(5+i).getCell(1).setCellValue(ts.get(i).getPlateNumber());//
if(falg!=null&&falg!=null&&falg.charAt(1)=='0'){
sheet.getRow(5+i).getCell(1).setCellStyle(style);
}
}
if(ts.get(i).getPlateColor()!=null){
if (ts.get(i).getPlateColor().equals("100201")) {
sheet.getRow(5+i).getCell(2).setCellValue("黄色");//
} else if (ts.get(i).getPlateColor().equals("100202")) {
sheet.getRow(5+i).getCell(2).setCellValue("蓝色");//
} else if (ts.get(i).getPlateColor().equals("100203")) {
sheet.getRow(5+i).getCell(2).setCellValue("其他");//
} if(falg!=null&&falg.charAt(2)=='0'){
sheet.getRow(5+i).getCell(2).setCellStyle(style);
}
}
if(ts.get(i).getVehicleBrandRegDate()!=null){
sheet.getRow(5+i).getCell(3).setCellValue(ts.get(i).getVehicleBrandRegDate());//
if(falg!=null&&falg.charAt(3)=='0'){
sheet.getRow(5+i).getCell(3).setCellStyle(style);
}
}
if(ts.get(i).getVehicleModel()!=null){
sheet.getRow(5+i).getCell(4).setCellValue(ts.get(i).getVehicleModel());//
if(falg!=null&&falg.charAt(4)=='0'){
sheet.getRow(5+i).getCell(4).setCellStyle(style);
}
}
if(ts.get(i).getManufacturers()!=null){
sheet.getRow(5+i).getCell(5).setCellValue(ts.get(i).getManufacturers());//
if(falg!=null&&falg.charAt(5)=='0'){
sheet.getRow(5+i).getCell(5).setCellStyle(style);
}
}
if(ts.get(i).getBrand()!=null){ sheet.getRow(5+i).getCell(6).setCellValue(ts.get(i).getBrand());//
if(falg!=null&&falg.charAt(6)=='0'){
sheet.getRow(5+i).getCell(6).setCellStyle(style);
}
}
if(ts.get(i).getVehicleLength()!=null){ sheet.getRow(5+i).getCell(7).setCellValue(ts.get(i).getVehicleLength());//
if(falg!=null&&falg.charAt(7)=='0'){
sheet.getRow(5+i).getCell(7).setCellStyle(style);
}
}
if(ts.get(i).getVehicleType()!=null){
if (ts.get(i).getVehicleType().contains("100701")) {
sheet.getRow(5+i).getCell(8).setCellValue("纯电动");//
} else if (ts.get(i).getVehicleType().contains("100702")) {
sheet.getRow(5+i).getCell(8).setCellValue("燃料电池");//
} else if (ts.get(i).getVehicleType().contains("100703")) {
sheet.getRow(5+i).getCell(8).setCellValue("超级电容");//
} else if (ts.get(i).getVehicleType().contains("100704")) {
sheet.getRow(5+i).getCell(8).setCellValue("插电式");//
} else if (ts.get(i).getVehicleType().contains("100705")) {
sheet.getRow(5+i).getCell(8).setCellValue("非插电式");//
} else if (ts.get(i).getVehicleType().contains("100706")) {
sheet.getRow(5+i).getCell(8).setCellValue("其他");//
}
if(falg!=null&&falg.charAt(8)=='0'){
sheet.getRow(5+i).getCell(8).setCellStyle(style);
}
} if(ts.get(i).getExtendInfo()!=null){
if (ts.get(i).getExtendInfo()) {
sheet.getRow(5+i).getCell(9).setCellValue("是");//
} else{
sheet.getRow(5+i).getCell(9).setCellValue("否");//
}
if(falg!=null&&falg.charAt(9)=='0'){
sheet.getRow(5+i).getCell(9).setCellStyle(style);
}
}
if(ts.get(i).getPurchaseInvoiceInfo()!=null){
if (ts.get(i).getPurchaseInvoiceInfo()) {
sheet.getRow(5+i).getCell(10).setCellValue("是");//
} else{
sheet.getRow(5+i).getCell(10).setCellValue("否");//
} if(falg!=null&&falg.charAt(10)=='0'){
sheet.getRow(5+i).getCell(10).setCellStyle(style);
}
}
break;
}
}
}
try{
this.setResponseHeader(response, companyName+"-新增及更换公交车异常车辆明细表.xls");
OutputStream osStream=response.getOutputStream();
workbook.write(osStream);
osStream.flush();
osStream.close();
}catch(Exception e){
e.printStackTrace();
}
}
 /**
*
* @param response
* @param fileName 文件名
*/
public void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(),"ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}

以上就是使用poi往execl表中写入数据的两种方式,需要注意的是,前端过来的请求不能是ajax请求,因为ajax无法解析二进制流的输出。具体原因客参考:https://www.cnblogs.com/houqx/p/10106562.html

Java下载execl表格的更多相关文章

  1. Java读取Execl表格数据

    在前面提到用java代码新建一个Execl 表格并添加数据到表格中, 这次写了一个读取Execl表格数据并添加导数据库中的案列 给定对方一个Execl模板表格,如果导入的Execl表格和预订的表格不相 ...

  2. java利用poi来读取execl表格返回对象

    利用poi来读取execl表格,返回一个对象(可能有点不完善,但是应该能满足平常的所用),用到了反射等等; 使用的jar包有: commons-collections4-4.1.jar poi-3.1 ...

  3. java的excel表格的导出与下载

    今天做一个java对excel表格的导出和下载的时候,从网络上搜寻了下载的模板,代码如下: 控制层: @RequestMapping(value = "excelOut_identifier ...

  4. java用jxl实现导出execl表格

    //先将需要导出的数据放到list中 //然后将list中的数据放到execl表中 @RequestMapping(params="exportExecl") public Str ...

  5. ajax请求下载Execl表

    Execl表是经常要用到的存放二位数据的表格,Java也可以直接操作Execl表,经常用到的方式就是jxl和poi. 在这次项目中,我用到的poi往Execl中写数据,刚开始设计的是前端发送一个aja ...

  6. 如何轻松的把图片导入execl表格中

    在项目中有时候会遇到往数据库中导数据的时候,往往需要把图片也一起导入execl表格中,那怎么才能把图片一块导入至execl中呢?那么今天我们就来看看怎么实现吧! 如何实现?今天我们就来用jxl和poi ...

  7. java下载安装,环境变量,hello world

    1.Java下载安装 网址:http://java.sun.com/javase/downloads/index.jsp win7 64位选择jdk-8u11-windows-x64.exe. 2.环 ...

  8. java导出excel表格

    java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...

  9. Java读取excel表格

    Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建, ...

随机推荐

  1. 第二节:创建模型,使用Code First,配置映射关系

    这一节,实现模型的创建,配置映射关系 使用Code First数据迁移. 创建模型 一,首先创建几个接口:实体接口,聚合根接口,值对象接口 1,实体接口: 2,聚合根接口: 3,值对象接口: 二,模型 ...

  2. ConcurrentHashMap源码解析(1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:在看这篇文章之前,如果对HashMap的层不清楚的话,建议先去看看HashMap源码解析. http:/ ...

  3. Oracle死锁查询及批量处理

    一.数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错. 二.死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做 ...

  4. (转)Python3之shutil模块

    原文:https://www.cnblogs.com/wang-yc/p/5625046.html 一. 简介 shutil 是高级的文件,文件夹,压缩包处理模块. 二. 使用 shutil.copy ...

  5. godaddy 问题

    1. 域名被锁,打电话咨询后.说发送被锁的域名到: change@secureserver.net 去解锁.

  6. Android之apk优化

    公司的apk越做越大...作为一个有追求的程序员,我觉得有必要给apk瘦身了... 优化之前,先来分析一下apk结构,下面附上一张apk结构图: apk结构.png 由于我这个项目集成了百度地图.百度 ...

  7. Android分组子级的不同视图布局之BUG奇遇记

    Android分组子级的不同视图布局之BUG奇遇记 最近在使用按日期分类列表,二级条目可能不一样,于是就想到了ExpandableListView. ExpandableListView的布局显示分割 ...

  8. Attr类中进行类型推断

    涉及到重要的类的继承关系如下图所示. 关于抛出的异常继承体系:

  9. 记住,永远不要在MySQL中使用“utf8”编码[转载]

    记住,永远不要在MySQL中使用“utf8”编码 原创: 无明.Adam 聊聊架构 6月15日 最近工作中我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一 ...

  10. SHELL脚本编程的常识和VI常用技巧

    来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc3751808 ...