POI简介:
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
包名称说明
HSSF提供读写Microsoft Excel XLS格式档案的功能。
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF提供读写Microsoft Word DOC格式档案的功能。
HSLF提供读写Microsoft PowerPoint格式档案的功能。
HDGF提供读Microsoft Visio格式档案的功能。
HPBF提供读Microsoft Publisher格式档案的功能。
HSMF提供读Microsoft Outlook格式档案的功能。
java导出Excel的基本操作
使用的idea是2019 jdk1.8 maven3.1.6
1.创建一个新的工程 导入POI依赖
<!-- poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.15</version>
</dependency>
创建一个普通的类测试
/**
* 生成excel
* 使用的是HSSFWorkbook,仅能生成xls格式的excel
* 在创建存储excel文件流的时候注意不能用.xlsx的扩展名
*/
public class CreateExcel {
//excel表头名称
private static String[] COLUMN_NAMES = {"学号", "姓名", "性别", "年龄"};
//填充数据的key
private static String[] COLUMNS = {"id", "name", "sex", "age"};
public static void main(String[] args) {
JSONArray ary = new JSONArray();
JSONObject obj = new JSONObject();
JSONObject obj2 = new JSONObject();
JSONObject obj3 = new JSONObject();
obj.put("id", "201811111");
obj.put("name", "张三");
obj.put("sex", "男");
obj.put("age", "18");
obj2.put("id", "201822222");
obj2.put("name", "李华");
obj2.put("sex", "男");
obj2.put("age", "20");
obj3.put("id", "201833333");
obj3.put("name", "刘丽");
obj3.put("sex", "女");
obj3.put("age", "18");
ary.add(obj);
ary.add(obj2);
ary.add(obj3);
createExcel(ary, "第一页", "D:/testCreateExcel.xls");
}
/**
* 生成excel表格
* @param jsonArray 填充excel的对象,可以灵活的修改成List<T>
* @param sheetName sheet页的名字
* @param savePath excel保存的路径 D:/text.xls
*/
public static void createExcel(JSONArray jsonArray, String sheetName, String savePath){
FileOutputStream out = null;
try {
//创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet
HSSFSheet sheet = createSheet(workbook, sheetName);
//创建单元格样式
HSSFCellStyle style = createCellStyle(workbook);
//创建头部
createHead(sheet, style);
//创建主体内容
createMainContent(sheet, style, jsonArray);
out = new FileOutputStream(savePath);
workbook.write(out);
} catch (Exception e) {
e.printStackTrace();
System.out.println("======e========" + e.getMessage());
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 创建sheet
* @param workbook 工作簿
* @param sheetName sheet名字
* @return
*/
public static HSSFSheet createSheet(HSSFWorkbook workbook, String sheetName){
HSSFSheet sheet = null;
//2创建sheet表格
sheet = workbook.createSheet(sheetName);
//设置所有的单元格格式
sheet.setDefaultColumnWidth(20);
//单独设置时必须是256的倍数
//sheet.setColumnWidth(0,5120);
//sheet.setColumnWidth(1,5120);
//sheet.setColumnWidth(2,25600);
return sheet;
}
/**
* 创建单元格样式
* @param workbook 工作簿
* @return
*/
public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){
HSSFCellStyle style = null;
//1创建文字样式
HSSFFont font = workbook.createFont();
//设置文字字体
font.setFontName("楷体");
//设置文字大小
font.setFontHeightInPoints((short) 10);
//2.创建单元格样式
style = workbook.createCellStyle();
// 左右居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 上下居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//设置边框大小
// style.setBorderTop(HSSFCellStyle.BORDER_THIN);
// style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
// style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
//3.将文字样式应用到单元格中
style.setFont(font);
return style;
}
/**
* 设置excel头部
* @param sheet
* @param style
*/
public static void createHead(HSSFSheet sheet, HSSFCellStyle style){
HSSFRow row = sheet.createRow(0);
for(int i = 0; i < COLUMN_NAMES.length; i ++){
Cell cell = row.createCell(i);
cell.setCellValue(COLUMN_NAMES[i]);
cell.setCellStyle(style);
}
}
/**
* 创建主题内容
* @param sheet sheet表格
* @param style 单元格样式
* @param jsonArray json数据对象
*/
public static void createMainContent(HSSFSheet sheet, HSSFCellStyle style, JSONArray jsonArray){
/*
* 遍历数据创建相应的行以及单元格
* 第一行已经创建,从第二行开始创建,下标为1
*/
for(int i = 1; i <= jsonArray.size(); i ++){
//创建行
HSSFRow row = sheet.createRow(i);
JSONObject jsonObject = jsonArray.getJSONObject(i - 1);
for(int j = 0; j < COLUMNS.length; j ++){
Cell cell = row.createCell(j);
cell.setCellValue(jsonObject.getString(COLUMNS[j]));
cell.setCellStyle(style);
}
}
}
}
设置单元格 字体 样式在此处
/**
* 创建单元格样式
* @param workbook 工作簿
* @return
*/
public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){
HSSFCellStyle style = null;
//1创建文字样式
HSSFFont font = workbook.createFont();
//设置文字字体
font.setFontName("楷体");
//设置文字大小
font.setFontHeightInPoints((short) 10);
//2.创建单元格样式
style = workbook.createCellStyle();
// 左右居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 上下居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//设置边框大小
// style.setBorderTop(HSSFCellStyle.BORDER_THIN);
// style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
// style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
//3.将文字样式应用到单元格中
style.setFont(font);
return style;
}
运行查看生成表格