Java中操作Excel有两种比较主流的工具包:JXL和POI,JXL只能操作后缀为.xls的Excel,POI可以操作后缀为.xls和.xlsx的Excel。(Excel2007之前的后缀为xls,之后的为xlsx)
一、 什么是poi
poi是Apache软件基金会的开源函数库,poi提供给java程序api对Microsoft Office格式文档操作功能
结构:
1)HSSF 提供操作后缀为xls的Excel的功能
2)XSSF 提供操作后缀为xlsx的Excel的功能
3)HWPF 提供操作Word文档的功能
4)HSLF 提供操作ppt的功能
5)HDGF 提供操作Visio格式的功能
二、POI Excel 文档结构类
1)HSSFWorkbook excel文档对象
2)HSSFSheet sheet页
3)HSSFRow excel行
4)HSSFCell excel单元格
5)HSSFFont excel字体
6)HSSFName 名称
7)HSSFDataFormat 日期格式
8)HSSFHeader sheet头
9)HSSFFooter sheet尾
10)HSSFDateUtil 日期
11)HSSFPrintSetup 打印
12)HSSFErrorConstants 错误信息表
三、代码编写
1)导入jar包
后两个jar用来操作后缀为xlsx的Excel
2)写入操作
public static void main(String[] args) throws IOException {
//1、创建excel文档对象
HSSFWorkbook workbook = new HSSFWorkbook();
//2、创建sheet页
HSSFSheet sheet = workbook.createSheet("第一页");
//3、创建头部第一行
//3.1列标题样式
HSSFCellStyle colStyle = createCellStyle(workbook,(short)13);
HSSFRow headRow = sheet.createRow(0);
HSSFCell cell;
String[] header = new String[] {"id","名字","年龄"};
for (int i = 0; i < header.length; i++) {
cell = headRow.createCell(i);
//加载单元格样式
cell.setCellStyle(colStyle);
cell.setCellValue(header[i]);
}
//4、填写数据
HSSFRow dataRow;
HSSFCell dataCell;
for (int i = 0; i < 4; i++) {
dataRow = sheet.createRow(i+1);
dataCell = dataRow.createCell(0);
dataCell.setCellValue(i+1);
dataCell = dataRow.createCell(1);
dataCell.setCellValue("zhy"+i);
dataCell = dataRow.createCell(2);
dataCell.setCellValue(20+i);
}
//5、写入
OutputStream fos = new FileOutputStream("C:\\Users\\13422\\Desktop\\test.xls");
workbook.write(fos);
}
/**
*
* @param workbook
* @param fontsize
* @return 单元格样式
*/
private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short fontsize) {
// TODO Auto-generated method stub
HSSFCellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
//创建字体
HSSFFont font = workbook.createFont();
font.setBold(true);//加粗
font.setFontHeightInPoints(fontsize);
//加载字体
style.setFont(font);
return style;
}
3)读取
public static void main(String[] args) throws IOException {
//1、从流中读取并创建excel对象
File file = new File("C:\\Users\\13422\\Desktop\\test.xls");
FileInputStream in = new FileInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(in);
Sheet sheet = workbook.getSheet("第一页");
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; i < lastRowNum+1; i++) {
Row row = sheet.getRow(i);
short lastCellNum = row.getLastCellNum();
for (int j = 0; j < lastCellNum; j++) {
Cell cell = row.getCell(j);
CellType cellTypeEnum = cell.getCellTypeEnum();
switch (cellTypeEnum) {
case NUMERIC:
System.out.print(cell.getNumericCellValue()+"\t");
break;
case STRING:
System.out.print(cell.getStringCellValue()+"\t");
break;
default:
break;
}
}
System.out.println("");
}
}