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. 试着用java实现DNS(一)——DatagramSocket, DatagramPacket, Message

    一般来说,自己编写DNS是没有必要的,目前开源的dns服务软件很多,功能也很强大.但是,有时候又是很有必要的,有着诸多好处.比如说,用于企业内网,简化DNS配置,可以根据企业需求添加新的功能,非常灵活 ...

  2. django -- 美多订单分表

    订单分表: 随着公司业务增长,如果每天1000多万笔订单的话,3个月将有约10亿的订单量,之前数据库采用单表的形式已经不满足于业务需求,数据库改造迫在眉睫. 解决思路: 按月分表,将原订单表拆分为 o ...

  3. tkinter如何设置界面消失 当制作一个登陆界面时,登陆成功之后,如何让登陆界面本身消失

    tkinter如何设置界面消失 当制作一个登陆界面时,登陆成功之后,如何让登陆界面本身消失 if querySQL.checkAll():#用户名和密码都输入正确 self.root.withdraw ...

  4. [Leetcode]下一个更大元素II

    题目 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地 ...

  5. WebDriver高级应用实例(10)

    10.1控制HTML5语言实现的视频播放器 目的:能够获取html5语言实现的视频播放器视频文件的地址.时长.控制进行播放暂停 被测网页的网址: http://www.w3school.com.cn/ ...

  6. [Umbraco] DocumentType设计指南

    1. 命名规则 1.1. 文档类型(DocumentType)命名规则 图 1. Document Type命名示例 名称(Name)   采用帕斯卡命名法 如:TextPage 别名(Alias)  ...

  7. ES配置文件中文版

    ##################### Elasticsearch Configuration Example ##################### # This file contains ...

  8. JAVA面试精选【Java算法与编程二】

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来.算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时 ...

  9. Microsoft Azure存储架构设计

    SQL Azure简介 SQL Azure是Azure存储平台的逻辑数据库,物理数据库仍然是SQL Server.一个物理的SQL Server被分成多个逻辑分片(partition),每一个分片成为 ...

  10. ADO.NET 4.5中的异步与流特性

    .NET 4.5为仍在选择直接与DataReader系列类打交道的.NET开发人员带来了一些新的异步与流特性支持.SqlDataReader允许开发人员在减少一些便利性的基础上获得更好的性能.例如,该 ...