一、导入maven poi包地址和版本。
如果低版本有 问题 可以适当加大版本。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
二、基本代码。
(1)创建工作空间。
HSSFWorkbook workbook = new HSSFWorkbook();
(2)创建sheet页。
一个工作空间可以n(n>0)个sheet页。
//创建一个sheet页面 一个工作空间可以有多个(n+1)个sheet页
HSSFWorkbook workbook = new HSSFWorkbook();
String sheetName1="这是第一个sheet页";
String sheetName2="这是第二个sheet页";
HSSFSheet sheet1 = workbook.createSheet(sheetName1);
HSSFSheet sheet2 = workbook.createSheet(sheetName2);
(3)创建行。
一个sheet可以n(n>0)行。
//创建工作空间
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet页
String sheetName="这是一个sheet页";//sheet页名称
HSSFSheet sheet=workbook.createSheet(sheetName);
int rowIndex=0;//需要创建行的索引 注意行索引从 0 开始
//创建行
HSSFRow row=sheet.createRow(rowIndex);
//获取已创建的行
row=sheet.getRow(rowIndex);
(4)创建单元格。
一行可以n(n>0)个单元格。
//创建工作空间
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet页
String sheetName="这是一个sheet页";//sheet页名称
HSSFSheet sheet=workbook.createSheet(sheetName);
int rowIndex=0;//行索引 注意行索引从 0 开始
//创建行
HSSFRow row=sheet.createRow(rowIndex);
//创建单元格
int columnIndex=0;//列索引 注意行索引从 0 开始
HSSFCell cell=row.createCell(columnIndex);
//给单元格赋值
String cellValue="这是一个单元格";
cell.setCellValue(cellValue);
//获取单元格
cell=row.getCell(columnIndex)
//在sheet里增加合并单元格
//rowIndex1 合并开始行,rowIndex2合并结束行,columnIndex1 合并开始列,columnIndex2 合并结束列
int rowIndex1,rowIndex2,columnIndex1,columnIndex2;
sheet.addMergedRegion(new CellRangeAddress(rowIndex1, rowIndex2, columnIndex1, columnIndex2));
(5)创建样式。
//创建样式
HSSFCellStyle style = workbook.createCellStyle();
//常用的样式设置
//1.设置背景色
style.setFillForegroundColor((short) colorIndex);
//设置背景色需要搭配这个属性来使用
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//2.设置字体样式
//创建字体
HSSFFont font = workbook.createFont();
font.setFontName("宋体");//字体
short fontSize=18;
font.setFontHeightInPoints(fontSize);// 字体大小
short colorIndex=1;
font.setColor(colorIndex);//字体颜色
style.setFont(font);
//3.设置字体水平位置
int centerAddr=2;
style.setAlignment(HorizontalAlignment.forInt(centerAddr)); // 左右居中2 居右3 默认居左
//4.设置字体垂直位置
style.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中1
//5.设置样式边框的大小
style.setBorderRight(BorderStyle.valueOf((short) 2));//右
style.setBorderLeft(BorderStyle.valueOf((short) 2));//左
style.setBorderBottom(BorderStyle.valueOf((short) 2));//下
style.setBorderTop(BorderStyle.valueOf((short) 2));//上
short borderColorIndex=1;
style.setBottomBorderColor(borderColorIndex);//下的边框颜色设置
//设置样式是否设置为锁定 锁定后 在后续的样式操作中就不会将样式去除
style.setLocked(true);
三、测试类
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//创建一个sheet页面 一个工作空间可以有多个(n+1)个sheet页
HSSFWorkbook workbook = new HSSFWorkbook();
String sheetName1="这是第一个sheet页";
String sheetName2="这是第二个sheet页";
HSSFSheet sheet1 = workbook.createSheet(sheetName1);
HSSFSheet sheet2 = workbook.createSheet(sheetName2);
workbook.write(byteArrayOutputStream);
byte[] bytes = byteArrayOutputStream.toByteArray();
InputStream input = new ByteArrayInputStream(bytes);
File f = new File("E:\\excel.xls");
if (f.exists()){
f.delete();
}
f.createNewFile();
FileOutputStream out = new FileOutputStream(f);
HSSFWorkbook book = new HSSFWorkbook(input);
book.write(out);
out.flush();
out.close();
四、工具类
public class Excel {
private final HSSFWorkbook workbook=new HSSFWorkbook();
/**
* 创建行元素
* @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){
//设置从第row1行合并到第row2行,第col1列合并到col2列
//至少得合并两个或以上的单元格
sheet.addMergedRegion(new CellRangeAddress(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);// 字体大小
HSSFCellStyle style = workbook.createCellStyle();
style.setFont(font); //设置字体
style.setAlignment(HorizontalAlignment.forInt((short) align)); // 左右居中2 居右3 默认居左
style.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中1
if (border){
style.setBorderRight(BorderStyle.valueOf((short) 2));
style.setBorderLeft(BorderStyle.valueOf((short) 2));
style.setBorderBottom(BorderStyle.valueOf((short) 2));
style.setBorderTop(BorderStyle.valueOf((short) 2));
style.setLocked(true);
}
return style;
}
/**
* sheetName sheet页名称
* 创建一个sheet页
* return sheet
*/
public HSSFSheet createSheet(String sheetName){
return workbook.createSheet(sheetName);
}
}