java 利用 poi 生成 Excel文件的例子

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

1. 生成 Excel 文档.

2. 保护生成Excel文档,设置密码访问.

3. 自动对生成的Excel 文档第一行标题栏设置成filter 过滤形式, 方便用户使用.

用 apache  POI 生成 Excel 文档公用类

 程序代码

package com.yihaomen.poi.sample;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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

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

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

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

import org.apache.poi.hssf.util.HSSFColor;

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

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

import org.apache.poi.xssf.usermodel.XSSFSheet;

/**

* Excel util, create excel sheet, cell and style.

* @param <T> generic class.

*/

public class ExcelUtil<T> {

public HSSFCellStyle getCellStyle(HSSFWorkbook workbook,boolean isHeader){

HSSFCellStyle style = workbook.createCellStyle();

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

style.setBorderRight(HSSFCellStyle.BORDER_THIN);

style.setBorderTop(HSSFCellStyle.BORDER_THIN);

style.setLocked(true);

if (isHeader) {

style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);

style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

HSSFFont font = workbook.createFont();

font.setColor(HSSFColor.BLACK.index);

font.setFontHeightInPoints((short) 12);

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

style.setFont(font);

}

return style;

}

public  void generateHeader(HSSFWorkbook workbook,HSSFSheet sheet,String[] headerColumns){

HSSFCellStyle style = getCellStyle(workbook,true);

Row row = sheet.createRow(0);

row.setHeightInPoints(30);

for(int i=0;i<headerColumns.length;i++){

Cell cell = row.createCell(i);

String[] column = headerColumns[i].split("_#_");

sheet.setColumnWidth(i, Integer.valueOf(column[1]));

cell.setCellValue(column[0]);

cell.setCellStyle(style);

}

}

@SuppressWarnings({ "rawtypes", "unchecked" })

public  HSSFSheet creatAuditSheet(HSSFWorkbook workbook,String sheetName,

List<T> dataset,String[] headerColumns,String[] fieldColumns) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

HSSFSheet sheet = workbook.createSheet(sheetName);

sheet.protectSheet("");

generateHeader(workbook,sheet,headerColumns);

HSSFCellStyle style = getCellStyle(workbook,false);

SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");

int rowNum = 0;

for(T t:dataset){

rowNum++ ;

Row row = sheet.createRow(rowNum);

row.setHeightInPoints(25);

for(int i = 0; i < fieldColumns.length; i++){

String fieldName = fieldColumns[i] ;

String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);

try {

Class clazz = t.getClass();

Method getMethod;

getMethod = clazz.getMethod(getMethodName, new Class[]{} );

Object value = getMethod.invoke(t, new Object[]{});

String cellValue = "";

if (value instanceof Date){

Date date = (Date)value;

cellValue = sd.format(date);

}else{

cellValue = null != value ? value.toString() : "";

}

Cell cell = row.createCell(i);

cell.setCellStyle(style);

cell.setCellValue(cellValue);

} catch (Exception e) {

}

}

}

return sheet;

}

}

这一个公用的类,主要生成Excel的头,正文,以及Excel 文档的样式。看方法名称基本就可以知道这个方法是干什么用的.

写一个测试类测试生成Excel文档

 程序代码

package com.yihaomen.poi.test;

import java.io.FileOutputStream;

import java.io.IOException;

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.List;

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

import com.yihaomen.poi.sample.ExcelUtil;

import com.yihaomen.poi.sample.User;

public class PoiTest {

/*excel column formate:column_#_width, excel中每一列的名称*/

public static final String[] USER_RECORES_COLUMNS = new String[]{

"User Name_#_3000",

"Address_#_7000"

};

/*the column will display on xls files. must the same as the entity fields.对应上面的字段.*/

public static final String[] USER_RECORES_FIELDS = new String[]{

"name","address"

};

public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {

List<User> users = new ArrayList<User>();

for(int i=0; i<10;i++){

User u = new User();

u.setAddress("address :" + i);

u.setName("name: "+ i);

u.setAge(i);

users.add(u);

}

//实际项目中,这个list 估计是从数据库中得到的

HSSFWorkbook workbook = new HSSFWorkbook();

ExcelUtil<User> userSheet = new ExcelUtil<User>();

userSheet.creatAuditSheet(workbook, "user sheet xls",

users, USER_RECORES_COLUMNS, USER_RECORES_FIELDS);

FileOutputStream fileOut = new FileOutputStream("d:/yihaomen_user_test.xls");

workbook.write(fileOut);

fileOut.close();

}

}

这里直接保存文件到 D 盘下面,主要是为了自己测试方便. 另外还需要一个测试需要的实体类 User.java:

 程序代码

package com.yihaomen.poi.sample;

public class User {

private String name;

private int age;

private String address;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

}

运行测试类,生成Excel 文档如下:

生成的文档,你是不能修改的,原因很简单,设置了一个空密码,虽然是空密码,Excel 还是会出现提示,当然你可以直接解保护. 实现的主要代码是在 ExcelUtil 中的 creatAuditSheet 方法中的:

 程序代码

sheet.protectSheet(""); // 设置了一个空的密码

如果要实现第一行标题自动过滤怎么处理呢,可以在上面提到的方法中加入如下代码:

 程序代码

char[] endChar = Character.toChars( ‘A‘ + (headerColumns.length - 1) );

String rangeAddress = "A1:" + String.valueOf(endChar) + "1";

sheet.setAutoFilter(CellRangeAddress.valueOf(rangeAddress));

时间: 2024-12-09 19:11:04

java 利用 poi 生成 Excel文件的例子的相关文章

java使用poi生成Excel文件

1. maven导入poi包: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> pom.xml 2. 新建测试数据实体类: package com.clz.testexportexcel; public class Exc

Java利用POI生成Excel强制换行(转载)

使用POI创建一个简单的 myXls.xls 文件 常用的包为 org.apache.poi.hssf.usermodel.*; 例子: import java.io.*; import org.apache.poi.hssf.usermodel.*; public class ZoomSheet { public ZoomSheet() { } public static void main(String args[]) throws IOException { HSSFWorkbook wb

Java利用POI生成Excel强制换行

前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了一下,网上找到的文章都是说在excel里的文字里加上/n,/n/r,/r/n之类,反正各种各样的都有,更奇怪的是还有人说在单元格里加上<br> 后来我试过用/r后的效里是生成的文件里,你用打开时,并不会换行,如果你用鼠标在单元格里点一下之后就会自动换行. 后来我琢磨了一下,可以通过如下方式进行, 

java利用poi读取Excel文件

java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列.那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell.一.实例代码: 只是实现了一种方式,因为依照读取内容的不同,读取的后想要的操作不同,因此不能苟同全部,只是方法是相通的.说道Excel文件的结构,这货从数学的角度来说,绝对是一个二维数组,因此我就拿字符串二维数组接受读取后的内容,并每个单元格每个单元格的打印.当然也可以返回三维数组(包含该单元格的位置坐标)

java利用poi解析excel文件

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

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

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

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

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

POI生成EXCEL文件

POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头(head),数据(data) ,表尾(foot) 明确区分 二.效果预览 三.数据格式 由于是生成Excel文件,这里值考虑生成xlsx格式的Excel文件,数据多表头默认考虑使用 | 表示,不在使用colspan rowspan作为.如需要表示两列两行,第一列合并表头格式为: A|B,A|C生成的

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt