很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。现在常用的解析excel的API主要有jxl和 poi ,本文主要研究关于poi的相关知识。
POI简介
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
Apache POI组件
Apache POI包含类和方法,来将MS Office所有OLE 2文档复合。此API组件的列表如下。
POIFS (较差混淆技术实现文件系统) : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。
HSSF (电子表格格式) : 它被用来读取和写入MS-Excel文件的xls格式。
XSSF (XML格式) : 它是用于MS-Excel中XLSX文件格式。
HPSF (属性设置格式) : 它用来提取MS-Office文件属性设置。
HWPF (字处理器格式) : 它是用来读取和写入MS-Word的文档扩展名的文件。
XWPF (XML字处理器格式) : 它是用来读取和写入MS-Word的docx扩展名的文件。
HSLF (幻灯片版式格式) : 它是用于读取,创建和编辑PowerPoint演示文稿。
HDGF (图表格式) : 它包含类和方法为MS-Visio的二进制文件。
HPBF (出版商格式) : 它被用来读取和写入MS-Publisher文件。
HSSF概况
HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
POI EXCEL文档结构类
HSSFWorkbook excel文档对象
HSSFSheet excel的sheet HSSFRow excel的行
HSSFCell excel的单元格 HSSF font excel字体
HSSFName 名称 HSSFDataFormat 日期格式
HSSFHeader sheet 头
HSSFFooter sheet尾
HSSFCellStyle cell样式
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表
知识体系
EXCEL常用操作方法
1、 得到Excel常用对象
POIFSFileSystem fs=newPOIFSFileSystem(new file InputStream(“d:/test.xls”));
//得到Excel 工作簿 对象
HSSFWorkbook wb = new HSSFWorkbook(fs);
//得到Excel工作表对象
HSSFSheet sheet = wb.getSheetAt(0);
//得到Excel工作表的行
HSSFRow row = sheet.getRow(i);
//得到Excel工作表指定行的单元格
HSSFCell cell = row.getCell(( short ) j);
cellStyle = cell.getCellStyle();//得到单元格样式
2、建立Excel常用对象
HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
HSSFSheet sheet = wb.createSheet(“new sheet”);//创建Excel工作表对象
HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
cellStyle = wb.createCellStyle();//创建单元格样式
row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
row.createCell((short)0).setCellValue(1); //设置Excel工作表的值
3、设置列宽、行高
sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);
4、保存Excel文件
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut);
5、常用单元格边框格式
HSSFCellStyle style = wb.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
6.设置不显示excel网格线
sheet.setDisplayGridlines(false);其中sheet是Sheet对象
7.设置excel单元格中的内容换行
cellStyle.setWrapText(true);其中cellStyle是WorkBook创建的CellStyle对象,然后将cellStyle设置到要换行的Cell对象,最后在要换行的对象(一般为字符串)加入”/r/n”。如
topTile.append(“/r/n” +”cellContent”);
8.单元格的合并
sheet.addMergedRegion(new CellRangeAddress(0, 4, 0, 2));本示例为合并4行2列
示例代码
package com.company.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
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.util.CellRangeAddress;
public class MergedCells
{
public static void main(String[] args)
throws IOException
{
//创建工作簿
HSSFWorkbook wb = new HSSFWorkbook();
//创建工作表
HSSFSheet sheet = wb.createSheet(“new sheet”);
for(int i=0;i<3;i++){
//设置列宽
sheet.setColumnWidth(i, 3000);
}
//创建行
HSSFRow row = sheet.createRow(0);
row.setHeightInPoints(30);//设置行高
//创建单元格
HSSFCell cell = row.createCell(0);
cell.setCellValue(“用户信息表”);
//标题样式
// 创建单元格样式
HSSFCellStyle cellStyle = wb.createCellStyle();
// 设置单元格的背景颜色为淡蓝色
cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 设置单元格居中对齐
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置单元格垂直居中对齐
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 创建单元格内容显示不下时自动换行
cellStyle.setWrapText(true);
// 设置单元格字体样式
HSSFFont font = wb.createFont();
// 设置字体加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(“宋体”);
font.setFontHeight((short) 200);
cellStyle.setFont(font);
// 设置单元格边框为细线条
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
//设置单元格样式
cell.setCellStyle(cellStyle);
//合并单元格
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
HSSFRow row1 = sheet.createRow(1);
//标题信息
String[] titles = {“ID”,”用户名”,”密码”};
for(int i=0;i<3;i++){
HSSFCell cell1 = row1.createCell(i);
cell1.setCellValue(titles[i]);
//设置单元格样式
cell1.setCellStyle(cellStyle);
}
//模拟数据,实际情况下String[]多为实体bean
List<String[]> list = new ArrayList<String[]>();
list.add(new String[]{“1″,”zhangsan”,”111″});
list.add(new String[]{“2″,”lisi”,”222″});
list.add(new String[]{“3″,”wangwu”,”333″});
///内容样式
// 创建单元格样式
HSSFCellStyle cellStyle2 = wb.createCellStyle();
// 设置单元格居中对齐
cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置单元格垂直居中对齐
cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 创建单元格内容显示不下时自动换行
cellStyle2.setWrapText(true);
// 设置单元格字体样式
HSSFFont font2 = wb.createFont();
// 设置字体加粗
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font2.setFontName(“宋体”);
font2.setFontHeight((short) 200);
cellStyle2.setFont(font2);
// 设置单元格边框为细线条
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
//循环赋值
for(int i=0;i<list.size();i++){
HSSFRow row2 = sheet.createRow(i+2);
for(int j=0;j<3;j++){
HSSFCell cell1 = row2.createCell(j);
cell1.setCellValue(list.get(i)[j]);
//设置单元格样式
cell1.setCellStyle(cellStyle2);
}
}
File file = new File(“D://a.xls”);
if(!file.exists()){
file.createNewFile();
}
FileOutputStream fileOut = new FileOutputStream(file);
wb.write(fileOut);
fileOut.close();
}
}
运行结果
本文简单介绍了poi的相关知识,并主要研究了使用poi导出excel的相关知识,关于使用poi读取excel以及使用poi操作其他office文件,比如doc的相关知识,留待以后研究。