在项目开中,我们经常需要用excel来导入导出数据,而POI技术是实现我们需求的一个选择。
以下是利用POI生成excel文件的简单实例:
package cn.test;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
public class test {
public static void main(String[] args) {
//第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook(); //创建Excel文件(Workbook)
//第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("成绩表"); //创建工作表(Sheet)
sheet.setColumnWidth(0, 20 * 256); // 设置工作表中第1列列宽
sheet.setColumnWidth(1, 20 * 256); // 设置工作表中第2列列宽
sheet.setColumnWidth(2, 20 * 256); // 设置工作表中第3列列宽
//第三步,创建第一行:标题行,合并单元格(先设置标题行数据,再合并单元格及设置单元格边框。防止边框不生效)
HSSFRow row1 = sheet.createRow((int) 0);// 创建行,从0开始
//创建单元格样式
HSSFCellStyle style1 = wb.createCellStyle();
style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格内容居中
HSSFCell cell1 = row1.createCell(0);// 创建行的单元格,也是从0开始
cell1.setCellValue("成绩一览表");// 设置单元格内容
cell1.setCellStyle(style1);// 设置单元格格式
//合并单元格
CellRangeAddress cra = new CellRangeAddress(0, 0, 0, 2);
// firstRow 区域中第一个单元格的行号
// lastRow 区域中最后一个单元格的行号
// firstCol 区域中第一个单元格的列号
// lastCol 区域中最后一个单元格的列号
sheet.addMergedRegion(cra);//创建这个合并单元格
// 设置合并单元格边框
RegionUtil.setBorderTop(HSSFCellStyle.BORDER_THIN,cra, sheet, wb); //上边框
RegionUtil.setBorderBottom(HSSFCellStyle.BORDER_THIN,cra, sheet, wb); //下边框
RegionUtil.setBorderLeft(HSSFCellStyle.BORDER_THIN,cra, sheet, wb); //左边框
RegionUtil.setBorderRight(HSSFCellStyle.BORDER_THIN,cra, sheet, wb); //右边框
// 第四步,创建第二行数据标题
HSSFRow row2 = sheet.createRow((int) 1);
//创建单元格样式
HSSFCellStyle style2 = wb.createCellStyle();
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格内容居中
// 设置单元格边框
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
HSSFCell cell2 = row2.createCell(0);
cell2.setCellValue("班级");
cell2.setCellStyle(style2);
cell2 = row2.createCell(1);
cell2.setCellValue("姓名");
cell2.setCellStyle(style2);
cell2 = row2.createCell(2);
cell2.setCellValue("成绩");
cell2.setCellStyle(style2);
// 第五步,写入数据(从第三行开始写入数据,写入三行)
for(int i = 2; i < 5; i++) {
// 创建内容行
HSSFRow row3 = sheet.createRow(i);
//创建单元格样式
HSSFCellStyle style3 = wb.createCellStyle();
style3.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 设置单元格内容居左
HSSFCell cell3 = row3.createCell(0);
cell3.setCellValue("一班");
cell3.setCellStyle(style3);
cell3 = row3.createCell(1);
cell3.setCellValue("张三");
cell3.setCellStyle(style3);
cell3 = row3.createCell(2);
cell3.setCellValue("98");
cell3.setCellStyle(style3);
}
// 第六步,通过输出流将excel对象输出到指定文件
FileOutputStream fos = null;
try {
fos = new FileOutputStream("d:/test.xls");
wb.write(fos);
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
// 关闭输出流
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}
}
生成的excel文件效果如下: