之前在项目中会用到在java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了。于是乎我在学会用Java在后台利用Apache poi 生成excel文档提供前台下载之后就想着来写一篇姊妹篇啦。

在生成Excel文档的时候我采用了和生成Word时的不同方法,Apache poi。它是用Java编写的免费开源的跨平台的 Java API,提供API给Java程式对Microsoft Office格式档案读和写的功能。想要实现这个功能,就按照下面的步骤来做吧,为了方便起见,我直接拿项目中遇到的实例来举例说明,是的,我在写这篇博客的时候同时也在完成手上的项目。

step1:创建xls格式的模板

表头含有我的甲方信息就打码了,可以看到我搞了一个空的模板文件,现在有很多东西需要在后台填入

step2:前台触发事件

搞一个按钮,用户点击的时候用javascript的window.location.href将页面重定向到你处理下载的URL去

比方说,这是我项目的前台,看到那个表面质量按钮吗,来看一下当它被点击的时候调用的函数

function exportBatch() {

//get请求,可以传递参数,比方说我这里就传了一堆卷号,我只生成传过去的这堆卷号的检验记录

//参数rollNumbers的细节就不展示了,业务相关

window.location.href = '../ir/exportSurface?rollNumberList=' + rollNumbers;

}

有朋友可能想用什么Ajax来发送请求,我反正是没搞出来,挺麻烦的,网上找的相关解决方案也都比较蛋疼,因此不传什么复杂的敏感的参数,就这么写就可以。

step3:后台处理

首先你当然要把Apache poi那一套东西引入你的项目啦,我的项目是Maven项目,添加依赖很容易

org.apache.poi

poi

3.14

然后,为了方便导出Excel,在项目中建了一个ExcelUtils工具类,后面给出源码,这么一来导出Excel会变得更简单。ExcelUtils里面rXogrNBYP除了一些既定的方法外,还有就是你具体怎么去操作模板的方法了。当然你用的少的话可以不用我这工具类,而是在你需要的时候import相关的类,然后在你处理的时候就把操作模板的逻辑写进去也可以。但我这个项目很多次用到导出Excel,所以抽象出一个工具类是很有必要的,符合设计模式。

我的项目是基于SpringMVC的,来看看我后台接收到请求以后做了些什么吧

Controller:

/***

* 批量导出表面质量检验记录

*

* @return

* @throws Exception

*/

@RequestMapping(value = "exportSurface", method = RequestMethod.GET)

@ResponseBody

public void exportSurface(HttpServletRequest request,

HttpServletResponse response) throws Exception {

//参数获取及处理,业务相关不展示

//把要填写的数据放在一个map里

Map map = new HashMap();

map.put("sequence", "0001");//mock编号

map.put("date", DateUtils.toDateStr(new Date(), DateUtils.DEFAULT_DATE_PATTERN_CHINES

最后调用ExcelUtils里的相关导出方法,这个方法是自定义的,它定义的是怎样去操作模板

自定义的方法:

public static void exportInspectionRecordSurface(HttpServletRequest request, HttpServletResponse response, Map map) throws IOException {

//模板的路径,这个在自己的项目中很容易弄错,相对位置一定要写对啊

String prXogrNBYPsth = request.getRealPath("/") + INSPECTIONRECORD_SURFACE_TEMPLET_PATH;

Workbook webBook = readExcel(psth);

createCellStyle(webBook);

Sheet sheet = webBook.getSheetAt(0);

//开始操作模板,找到某行某列(某个cell),需要注意的是这里有个坑,行和列的计数都是从0开始的

//一次数据插入的位置不对,别灰心,多试几次就好啦,你要是能看懂我下面的代码,数据插在了什么位置,你就明白了

int rows = 1;

Row row = sheet.getRow(rows);

row.createCell(1).setCellValue((String) map.get("sequence"));

row.createCell(3).setCellValue((String) map.get("date"));

row.createCell(9).setCellValue((String) map.get("chetaihao"));

rows = 2;

row = sheet.getRow(rows);

row.createCell(1).setCellValue((String) map.get("productName"));

row.createCell(3).setCellValue((String) map.get("specification"));

row.createCell(9).setCellValue((String) map.get("memo"));

//检验记录的插入业务相关,不展示,其实就是for循环在合适的行合适的列插入一个个对象的属性即可,你这么聪明,没问题的

writeExcel(response, webBook, "表面质量检验记录");

}

ExcelUtils:

//这里得有你自己的package名

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFRichTextString;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.*;

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

/**

* Created by bwju on 2016/12/06.

*/

public class ExcelUtils {

private static final String INSPECTIONRECORD_SURFACE_TEMPLET_PATH = "/asserts/templete/InspectionRecordSurface.xls";

private static HSSFCellStyle cellstyle = null;

public static void exportInspectionRecordSurface(HttpServletRequest request, HttpServletResponse response, Map map) throws IOException {

//实现上文里有,改个函数名,写你的操作模板函数吧!

}

private static Workbook readExcel(String filePath) {

InputStream in = null;

Workbook work = null;

try {

in = new FileInputStream(filePath);

work = new HSSFWorkbook(in);

} catch (FileNotFoundException e) {

System.out.println("文件路径错误");

e.printStackTrace();

} catch (IOException e) {

System.out.println("文件输入流错误");

e.printStackTrace();

}

return work;

}rXogrNBYP

private static void writeExcel(HttpServletResponse response, Workbook work, String fileName) throws IOException {

OutputStream out = null;

try {

out = response.getOutputStream();

response.setContentType("application/ms-excel;charset=UTF-8");

response.setHeader("Content-Disposition", "attachment;filename="

.concat(String.valueOf(URLEncoder.encode(fileName + ".xls", "UTF-8"))));

work.write(out);

} catch (IOException e) {

System.out.println("输出流错误");

e.printStackTrace();

} finally {

out.close();

}

}

private static Cell setCellStyleWithStyleAndValue(CellStyle style, Cell cell, String value) {

cell.setCellStyle(style);

cell.setCellValue(value);

return cell;

}

private static Cell setCellStyleWithValue(Cell cell, String value) {

cell.setCellStyle(cellstyle);

cell.setCellValue(value);

return cell;

}

private static Cell setCellStyleWithStyleAndValue(CellStyle style, Cell cell, RichTextString value) {

cell.setCellStyle(style);

cell.setCellValue(value);

return cell;

}

private static Cell setCellStyleWithValue(Cell cell, int value) {

cell.setCellStyle(cellstyle);

cell.setCellValue(value);

return cell;

}

private static Cell setCellStyleWithValue(Cell cell, double value) {

cell.setCellStyle(cellstyle);

cell.setCellValue(value);

return cell;

}

private static HSSFCellStyle createCellStyle(Workbook wb) {

cellstyle = (HSSFCellStyle) wb.createCellStyle();

cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENwww.cppcns.comTER);

cellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);

cellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);

cellstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);

cellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);

cellstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

return cellstyle;

}

}

step4:启动项目,然后测试一下,看!完美的导出了。。。有图为证

嗯嗯,文章写到这里就结束啦,Apache poi还提供了很多API在本例中为得到展示,比如能够指定样式等等。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: java后台利用Apache poi 生成excel文档提供前台下载示例

本文地址: http://www.cppcns.com/ruanjian/java/190786.html

java后台处理excel_java后台利用Apache poi 生成excel文档提供前台下载示例相关推荐

  1. java后台利用模板生成Word文档提供前台下载

    2016.12.06更新,java后台利用Apache poi生成Excel文档提供前台下载,博客链接http://blog.csdn.net/u010251278/article/details/5 ...

  2. 关于Apache / poi 生成word文档之后不能正常换行的问题

    近期公司项目有个把文本转成word文档的功能,开始使用io操作输出文件的方式(后缀名是docx),使用手机自带的文档浏览工具打开是没有问题的,但是在电脑上用微软office就打开有问题了,于是找了三方 ...

  3. [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)

    [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...

  4. Java自定义导出列_后台生成EXCEL文档,自定义列

    后台生成EXCEL文档,自定义列 //response输出流处理 //设置编码.类型.文件名 getResponse().reset(); getResponse().setCharacterEnco ...

  5. Java实战—POI操作Excel文档、读取、写入、合并单元格

    一.POI项目简介 POI全称 Poor Obfuscation Implementation,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:http: ...

  6. Aspose-Cells结合Apache POI生成excel文件以及转换为pdf

    最近有个需求是需要将数据库中的符合条件的交易流水导出生成为excel,并转换为pdf,提供给客户下载,客户下载核对并签章. 需要用到的jar包依赖: <dependency><gro ...

  7. Java教程:使用POI读取excel文档(根据BV1bJ411G7Aw整理)

    Java教程:使用POI读取excel文档(根据BV1bJ411G7Aw整理) 最近公司需要我做一个导出Excel表格的功能,为此来学习一下POI,在这里记录一下学习笔记.B站直接搜BV1bJ411G ...

  8. 使用Java POI读取excel文档

    Java使用POI读取excel文档教程 一:Poi的介绍 1.简介 1.由apache公司提供 2.Java编写的免费开源的跨平台的Java API 3.提供API给Java程序对Microsoft ...

  9. poi生成word文档,插入图片,echar报表生成到word,word表格

    poi生成word文档,word表格,将echar报表生成到word 项目中用到生成word报表,报表中有表格的合并 .页眉.表格中会有报表图片.然后查找了网上的资料,利用echar生成柱状图,然后已 ...

最新文章

  1. 通过url,获取html内容,并解析
  2. Cuyahoga的安装及结构
  3. STM32(四)--------按键控制LED灯
  4. 1.10.返回四舍五入后的值.round()
  5. Pentium II Pentium III架构/微架构/流水线 (1) - 架构概述
  6. [ExtJS6]Combobox的值的绑定
  7. EXCEL VLOOKUP函数的使用
  8. rush learn note
  9. 原来射极跟随器还有这个应用
  10. 【华为OD机试真题 python】连续出牌数量【2022 Q4 | 200分】
  11. Windows使用命令关闭一键关闭所有程序
  12. springboot项目导出excel 合并单元格表格
  13. 如何在lion系统下安装Xcode 3.2.x版本
  14. 1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)
  15. ios11.2计算机更新,iOS11.2.2正式版怎么样、更新了什么?iOS11.2.2降频吗?
  16. 如何查看 ananconda 的环境(虚拟环境)安装包位置
  17. 米什金版货币金融学简答及一些知识点
  18. linux echo 命令,Linux echo 命令
  19. 2022最新nft数字藏品系统源码,商业运营版
  20. 自定义流式布局View

热门文章

  1. springmvc在controller和视图之间传递参数
  2. xftp如何搜索文件_头条搜索站长平台如何添加网站和sitemap文件?附图文教程
  3. 如何安装python3.8.1_python3.8.1 安装
  4. appium和airtest_关于Airtest自动化测试工具
  5. vqa mcb_MCB的完整形式是什么?
  6. Java PipedOutputStream close()方法与示例
  7. 多选取值_机制砂如何控制MB值和石粉含量
  8. Java StringBuilder reverse()方法与示例
  9. java 方法 示例_Java语言环境getDisplayVariant()方法与示例
  10. 不要再用main方法测试代码性能了,用这款JDK自带工具