1、该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx。

2、首先新建一个实体类,用以存放单个数据

public class Test {
private String x;
private String y;
private String value; public void setX(String x) {
this.x = x;
}
public void setY(String y) {
this.y = y;
}
public void setValue(String value) {
this.value = value;
}
public String getX() {
return x;
}
public String getY() {
return y;
}
public String getValue() {
return value;
}
}

3、将数据合并成一个集合,例如list<Test> list;

4、开始生成excel

//1、创建workbook,对应一个excel
HSSFWorkbook wb = new HSSFWorkbook(); //1.5、生成excel中可能用到的单元格样式
//首先创建字体样式
HSSFFont font = wb.createFont();//创建字体样式
font.setFontName("宋体");//使用宋体
font.setFontHeightInPoints((short) 10);//字体大小
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
//然后创建单元格样式style
HSSFCellStyle style1 = wb.createCellStyle();
style1.setFont(font);//将字体注入
style1.setWrapText(true);// 自动换行
style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
style1.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());// 设置单元格的背景颜色
style1.setFillPattern(CellStyle.SOLID_FOREGROUND);
style1.setBorderTop((short) 1);// 边框的大小
style1.setBorderBottom((short) 1);
style1.setBorderLeft((short) 1);
style1.setBorderRight((short) 1); //2、生成一个sheet,对应excel的sheet,参数为excel中sheet显示的名字
HSSFSheet sheet = wb.createSheet("采集对象一致率");//3、设置sheet中每列的宽度,第一个参数为第几列,0为第一列;第二个参数为列的宽度,可以设置为0。//Test中有三个属性,因此这里设置三列,第0列设置宽度为0,第1~3列用以存放数据
sheet.setColumnWidth(0, 0);
sheet.setColumnWidth(1, 20*256);
sheet.setColumnWidth(2, 20*256);
sheet.setColumnWidth(3, 20*256);//4、生成sheet中一行,从0开始
HSSFRow row = sheet.createRow(0);
row.setHeight((short) 800);// 设定行的高度//5、创建row中的单元格,从0开始
HSSFCell cell = row.createCell(0);//我们第一列设置宽度为0,不会显示,因此第0个单元格不需要设置样式
cell = row.createCell(1);//从第1个单元格开始,设置每个单元格样式
cell.setCellValue("x");//设置单元格中内容
cell.setCellStyle(style1);//设置单元格样式
cell = row.createCell(2);//第二个单元格
cell.setCellValue("y");
cell.setCellStyle(style1);
cell = row.createCell(3);//第三个单元格
cell.setCellValue("value");
cell.setCellStyle(style1);
//6、输入数据
for(int i = 1; i <= list.size(); i++){
cell = row.createCell(i);
……//操作同第5步,通过setCellValue(list.get(i-1).getX())注入数据
……
}
//7、如果需要单元格合并,有两种方式
1、sheet.addMergedRegion(new Region(1,(short)1,1,(short)11));//参数为(第一行,最后一行,第一列,最后一列) 2、sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1));//参数为(第一行,最后一行,第一列,最后一列)
//8、输入excel
FileOutputStream os = new FileOutputStream(path+"test.xls");
wb.write(os);
os.close();
5、执行完上述操作,excel已经生成在服务器的path目录下了,文件名为test。
6、将文件发送至客户端。
注意:在ie浏览器下,如果采用location.href='/ServletDownload.do';方式下载,不能在servlet中使用response.getWriter();输出,而应该用response.getOutputStream();
否则存在下载后的excel直接在浏览器上打开,而不是指定文件路径后下载。其他浏览器未测试过。
服务端代码
1)、设置响应的头文件,会自动识别文件内容
response.setContentType("multipart/form-data");
2)、设置Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename=test.xls");
3)、输出流
OutputStream out = response.getOutputStream();
4)、获取服务端生成的excel文件,这里的path等于4.8中的path
InputStream in = new FileInputStream(new File(path));
5)、输出文件
int b;
while((b=in.read())!=-1){
out.write(b);
}
in.close();
out.close();
客户端代码
location.href='/ServletDownload';

以下记录一些poi常用功能(欢迎大家评论补充):

合并行列:

sheet1.addMergedRegion(new Region(sheet1CurrRow,(short)0,sheet1CurrRow,(short)4));//合并(起始行,起始列,结束行,结束列)

sheet为HSSFSheet对象。里面四个参数依次对应合并的:起始行、起始列、结束行、结束列。

例子:如下图中,数据4占据三列。调用上面方法,参数分别为1,0,1,2。

冻结行列:

sheet1.createFreezePane(0, 4, 0, 4);

sheet1为HSSFSheet对象。里面的四个参数依次对应合并的:要冻结的列数、要冻结的行数、右边区域可见的左边列数,下面区域可见的首行。

常用于对表格表头冻结,下列数据滚动表头仍保持在上方。

设置编码格式:

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

设置cell中格式为utf-16.用以应付可能存在的中文乱码问题。

cell样式:

HSSFCellStyle style = workbook.createCellStyle();//首先创建一个style

style.setAlignment(align);//水平居左、居右、居中。使用HSSFCellStyle自带的参数:HSSFCellStyle.ALIGN_CENTER or ALIGN_LEFT or ALIGN_RIGHT

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居左、居右、居中。使用HSSFCellStyle自带的参数:HSSFCellStyle.VERTICAL_CENTER or VERTICAL_LEFT or VERTICAL_RIGHT

style.setWrapText(true);//自动换行

HSSFFont hssfFont = workbook.createFont();//创建字体
hssfFont.setFontName(font);//字体样式:黑体、宋体等
hssfFont.setFontHeightInPoints((short)size);//字体大小,short格式
hssfFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置粗体,不需要可不设
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//设置左边框
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置下边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//设置上边框
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));//设置数据格式:文本、货币、日期,百分比等
HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)")//创建数字格式,负数则为红色显示。传入的值必须为double等数字类型
HSSFDataFormat.getBuiltinFormat("text")//创建文本格式
HSSFDataFormat.getBuiltinFormat("yyyy-m-d")//创建日期格式,该方式展示的数据必须转为String类型,同时制作出来的excel表仍展示为文本类型,需要双击数据格才转为日期格式。建议采用下一种方法。
HSSFDataFormat.getBuiltinFormat("0.00%")//创建百分比格式
//创建日期格式数据,该方法传入的参数为Date类型,制作excel展示出去即为日期格式。
HSSFDataFormat format= wb.createDataFormat();
style.setDataFormat(format.getFormat("yyyy/m/d"));//括号中参数为指定的日期类型的格式。

java利用poi生成excel文件后下载本地的更多相关文章

  1. Java 利用 poi 生成 Excel文件的通用例子

    在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 生 ...

  2. Java利用POI生成Excel强制换行

    前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了 ...

  3. 【原创】POI 生成Excel文件并下载

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apa ...

  4. Java 利用poi生成excel表格

    所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...

  5. java利用poi解析excel文件

    首先需要引入以下jar包 如果使用maven,需要添加两个依赖 <dependencies> <dependency> <groupId>org.apache.po ...

  6. Java Struts2 POI创建Excel文件并实现文件下载

    Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...

  7. Java利用poi生成word(包含插入图片,动态表格,行合并)

    转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...

  8. POI生成EXCEL文件

    POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头( ...

  9. java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

    需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...

随机推荐

  1. sqlmap常用技巧整理

    言 通过在乌云网上出现的很多SQL注入漏洞,因此来总结一下,大致使用SQLMAP所遇到的参数. 基本结构 基本SQLMAP的使用方式就如下所示,使用参数式的方式,按需求添加. 12 sqlmap.py ...

  2. Hadoop.之.入门部署

    一.课程目标 ->大数据是什么?大数据能做什么? ->什么是Hadoop?Hadoop的设计思想? ->Hadoop如何解决大数据的问题?(什么是hdfs与yarn.MapReduc ...

  3. RN项目中使用react-native-elements报错: Unrecognized font family 'Material Icons'

    查询了一些方案,但各自的环境不尽相同,最后在google中找到了答案.主要问题在于 (1)版本问题 (2)Xcode配置问题 报错如下 解决步骤: 1 . 首先需要正确安装 npm i -S reac ...

  4. Monogdb 按2个字段值之间的比较

    使用 $where BsonDocument query = new BsonDocument("$where", "this.soDate<this.pEffDa ...

  5. (1)打造简单OS-汇编写入引导区,虚拟机启动步骤

    首先需要您在网上下载NASM编译器,可以将汇编编译为二进制文件 1.写一段汇编代码在屏幕上打印一段字符,可以运行的!并进行nasm为二进制文件,如下"test.asm" 该段汇编主 ...

  6. 永恒之蓝msf下 ms17_010 (64位kali下安装wine32)

    本次用到的环境: kali(2016.2)32位系统.ip地址:192.168.1.104 目标靶机为:win7sp1x64系统(关闭防火墙),ip地址:192.168.1.105 ========= ...

  7. 【2017-03-10】T-sql基础语句及条件,高级查询

    一.T-sql基础语句 1.创建数据库:create database 数据库名  (不能中文,不能数字开头,不能符号开头) 2.删除数据库:drop database 数据库名 3.选择数据库:us ...

  8. 使用QFileDiaglog实战designer快速开发

    今天遇到一个大坑很久才解决 使用designer开发出图形界面转换为py文件后,使用QFileDialog对话框第一个参数一定要是当前窗口组件,否则程序直接奔溃(坑:能运行不报错但奔溃) def ge ...

  9. flask模板结构组织(局部模板、宏、模板继承)

    模板结构组织 除了使用函数.过滤器等工具控制模板的输出外,jinja2还提供了一些工具来在宏观上组织模板内容. 局部模板 在Web程序中,我们通常会为每一类页面编写一个独立的模板.比如主页模板.用户资 ...

  10. js中的children实时获取子元素

    先看下面一个小例子的结果 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...