一个简单的例子,实现一个没有内容的workbook.xls文件
利用Maven引入相关的jar包
org.apache.poi
poi
3.16
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class NewWorkbook{
publicstaticvoid main(String[] args)throws IOException{
HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook对象
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);//把Workbook对象输出到文件workbook.xls中
fileOut.close();
}
}
HSSF提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excell对象,样式和格式,还有辅助操作。有以下几种对象:
HSSFWorkbook excell的文档对象
HSSFSheet excell的表单
HSSFRow excell的行
HSSFCell excell的格子单元
HSSFFont excell字体
HSSFName 名称
HSSFDataFormat 日期格式
在该基础上对上面的文件进行设置样式及添加内容
package jakarta;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class Excel {
private HSSFWorkbook workbook;
private HSSFSheet sheet;
private String bDate;
private int year;
/**
* 创建行元素
* @param style 样式
* @param height 行高
* @param value 行显示的内容
* @param row1 起始行
* @param row2 结束行
* @param col1 起始列
* @param col2 结束列
*/
private void createRow(HSSFCellStyle style, int height, String value, int row1, int row2, int col1, int col2){
sheet.addMergedRegion(new CellRangeAddress(row1, row2, col1, col2)); //设置从第row1行合并到第row2行,第col1列合并到col2列
HSSFRow rows = sheet.createRow(row1); //设置第几行
rows.setHeight((short) height); //设置行高
HSSFCell cell = rows.createCell(col1); //设置内容开始的列
cell.setCellStyle(style); //设置样式
cell.setCellValue(value); //设置该行的值
}
/**
* 创建样式
* @param fontSize 字体大小
* @param align 水平位置 左右居中2 居右3 默认居左 垂直均为居中
* @param bold 是否加粗
* @return
*/
private HSSFCellStyle getStyle(int fontSize,int align,boolean bold,boolean border){
HSSFFont font = workbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) fontSize);// 字体大小
if (bold){
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
}
HSSFCellStyle style = workbook.createCellStyle();
style.setFont(font); //设置字体
style.setAlignment((short) align); // 左右居中2 居右3 默认居左
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中1
if (border){
style.setBorderRight((short) 2);
style.setBorderLeft((short) 2);
style.setBorderBottom((short) 2);
style.setBorderTop((short) 2);
style.setLocked(true);
}
return style;
}
/**
* 根据数据集生成Excel,并返回Excel文件流
* @param data 数据集
* @param sheetName Excel中sheet单元名称
* @param headNames 列表头名称数组
* @param colKeys 列key,数据集根据该key进行按顺序取值
* @return
* @throws IOException
*/
private InputStream getExcelFile(List