使用apache的poi来进行excel的创建和导出等操作
- jar包导入
- 非maven项目:直接去maven中央仓库搜索poi下载jar包,然后添加到项目资源文件即可
- maven项目:在pom文件中导入以下坐标:
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
- 创建excel工作表
public static void main(String[] args) throws Exception{
//定义工作簿对象
Workbook wb = new HSSFWorkbook();
//使用文件输出流来创建工作簿 指定文件名字时不能缺少后缀名
FileOutputStream fos = new FileOutputStream("E://poiDoc//first.xls");
//创建
wb.write(fos);
//关闭输出流
fos.close();
}
- 创建sheet页(分表)
public static void main(String[] args) throws Exception{
//获取工作簿对象
Workbook wb = new HSSFWorkbook();
//创建sheet页
wb.createSheet("第一个sheet页");
wb.createSheet("第二个sheet页");
//获取文件输出流
FileOutputStream fos = new FileOutputStream("E://poiDoc//带有sheet页的工作簿.xls");
//创建文件
wb.write(fos);
//关闭文件输出流
fos.close();
}
- 创建单元格
public static void main(String[] args) throws Exception{
//获取工作簿对象
Workbook wb = new HSSFWorkbook();
//创建sheet页
Sheet sheet = wb.createSheet("第一个单元格");
//sheet页创建第一行
Row row = sheet.createRow(0);
//第一行行创建第一个单元格
Cell cell = row.createCell(0);
//第一行第一个单元格设置值为 "我是值" 字符串
cell.setCellValue("我是值");
//精简写法
row.createCell(1).setCellValue(1.2);//第一行创建第二个单元格设置值为1.2
row.createCell(2).setCellValue(false);//第一行创建第三个单元格设置值为false
row.createCell(3).setCellValue(new Date());//第一行创建第四个单元格设置值为日期
//获取文件输出流
FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格的工作簿.xls");
//创建文件
wb.write(fos);
//关闭文件输出流
fos.close();
}
- 创建带有时间格式(必须做格式化处理,否则日期格式会乱掉)的单元格
public static void main(String[] args) throws Exception{
//获取工作簿对象
Workbook wb = new HSSFWorkbook();
//创建单元格创建帮助对象
CreationHelper creationHelper = wb.getCreationHelper();
//创建单元格格式对象
CellStyle cellStyle = wb.createCellStyle();
//设置单元格日期格式
cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd hh:MM:ss"));
//创建sheet页
Sheet sheet = wb.createSheet("第一个单元格");
//sheet页创建第一行
Row row = sheet.createRow(0);
//创建时间格式单元格 不做格式处理的话 格式会乱掉 导致看不懂数据
row.createCell(0).setCellValue(new Date());//第一行创建第一个单元格设置值为日期
//创建格式化后的日期单元格
Cell cell = row.createCell(1);
cell.setCellValue(new Date());//第一行创建第二个单元格设置值为日期并格式化
cell.setCellStyle(cellStyle);
//获取文件输出流
FileOutputStream fos = new FileOutputStream("E://poiDoc//带有时间格式单元格(格式化)的工作簿.xls");
//创建文件
wb.write(fos);
//关闭文件输出流
fos.close();
}
- 遍历已存在excel的行和列获取值
public static void main(String[] args) throws Exception{
//获取输入流
InputStream is = new FileInputStream("E://poiDoc//员工信息.xls");
//获取POI文件系统
POIFSFileSystem fs = new POIFSFileSystem(is);
//获取已存在的工作簿对象 此处为子类 是为了以防有的方法在子类中有而在父类中没有
HSSFWorkbook wb = new HSSFWorkbook(fs);
//获取sheet表一
HSSFSheet sheet = wb.getSheetAt(0);
//遍历 使用for循环来进行遍历
int rowNum,cellNum;
//遍历行
for(rowNum = 0;rowNum<=sheet.getLastRowNum();rowNum++){
//获取每一行的行对象
HSSFRow row = sheet.getRow(rowNum);
//若行不存在则跳过
if(null == row){
//中间有空行则打印换行并进到下一行
System.out.println();
continue;
}
//遍历列
for(cellNum = 0;cellNum<=row.getLastCellNum();cellNum++){
//获取每一行的对应的列对象
HSSFCell cell = row.getCell(cellNum);
//如果为空则表示该单元格不存在 要与存在但是值为空区别开
if(null == cell){
continue;
}
//输出每一个cell对应的值后添加一个空格
System.out.print(getCellVales(cell) + " ");
}
//每一行结束后添加换行
System.out.println();
}
//关闭输入流
is.close();
}
private static String getCellVales(HSSFCell cell){
//使用switch来判断cell的类型 从而选择使用哪个获取值的api 再转换为String返回
switch (cell.getCellTypeEnum()){
case NUMERIC:
//数值型
return String.valueOf(cell.getNumericCellValue());
case STRING:
//字符串型
return String.valueOf(cell.getStringCellValue());
case BLANK:
//使用 ## 表示空格
return "##";
case BOOLEAN:
//布尔值型
return String.valueOf(cell.getBooleanCellValue());
case ERROR:
//错误型
return String.valueOf(cell.getErrorCellValue());
/*case FORMULA:
//公式型
return String.valueOf(cell.getFor);
break;*/
default:
return String.valueOf(cell.getStringCellValue());
}
}
- 文本提取(只抽取文本,没有格式之类的限制)
public static void main(String[] args) throws Exception{
//获取输入流
InputStream is = new FileInputStream("E://poiDoc//员工信息.xls");
//获取POI文件系统
POIFSFileSystem fs = new POIFSFileSystem(is);
//获取已存在的工作簿对象 此处为子类 是为了以防有的方法在子类中有而在父类中没有
HSSFWorkbook wb = new HSSFWorkbook(fs);
//获取工作簿抽取对象
ExcelExtractor ex = new ExcelExtractor(wb);
//取消显示sheet的名字
ex.setIncludeSheetNames(false);
//输出文件抽取结果
System.out.println(ex.getText());
//关闭输入流
is.close();
}
- 单元格对齐方式
public static void main(String[] args) throws Exception{
//获取工作簿对象
Workbook wb = new HSSFWorkbook();
//获取单元格样式对象
CellStyle cellStyle = wb.createCellStyle();
//创建sheet页
Sheet sheet = wb.createSheet("第一个单元格");
//sheet页创建第三行
Row row = sheet.createRow(2);
//设置行高
row.setHeightInPoints(30);
//创建单元格并指定值
Cell cell = row.createCell(0);
cell.setCellValue("对齐方式");
//设置水平对齐方式
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//设置垂直对齐方式
cellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM);
//给单元格指定单元格样式
cell.setCellStyle(cellStyle);
//获取文件输出流
FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格对齐方式的工作簿.xls");
//创建文件
wb.write(fos);
//关闭文件输出流
fos.close();
}
- 单元格边框处理
public static void main(String[] args) throws Exception{
//获取工作簿对象
Workbook wb = new HSSFWorkbook();
//获取单元格样式对象
CellStyle cellStyle = wb.createCellStyle();
//创建sheet页
Sheet sheet = wb.createSheet("第一个单元格");
//sheet页创建第三行
Row row = sheet.createRow(2);
//创建第二个单元格
Cell cell = row.createCell(1);
//设置值
cell.setCellValue("边框");
//设置顶部边框样式
cellStyle.setBorderTop(BorderStyle.MEDIUM_DASHED);
cellStyle.setTopBorderColor(IndexedColors.YELLOW.getIndex());
//设置底部边框样式
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
//设置右边边框样式
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setRightBorderColor(IndexedColors.GREEN.getIndex());
//设置左边边框样式
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setLeftBorderColor(IndexedColors.BLUE.getIndex());
//给单元格设置样式
cell.setCellStyle(cellStyle);
//获取文件输出流
FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格边框的工作簿.xls");
//创建文件
wb.write(fos);
//关闭文件输出流
fos.close();
}
- 单元格填充色和颜色操作
public static void main(String[] args) throws Exception{
//获取工作簿对象
Workbook wb = new HSSFWorkbook();
//获取单元格样式对象
CellStyle cellStyle = wb.createCellStyle();
//创建sheet页
Sheet sheet = wb.createSheet("第一个单元格");
//sheet页创建第三行
Row row = sheet.createRow(2);
//设置行高
row.setHeightInPoints(30);
//创建第二个单元格
Cell cell = row.createCell(1);
//设置值
cell.setCellValue("背景色");
//设置背景填充
cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
//设置效果
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//给单元格设置样式
cell.setCellStyle(cellStyle);
//获取文件输出流
FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格背景色的工作簿.xls");
//创建文件
wb.write(fos);
//关闭文件输出流
fos.close();
}
- 单元格合并
public static void main(String[] args) throws Exception{
//获取工作簿对象
Workbook wb = new HSSFWorkbook();
//获取单元格样式对象
CellStyle cellStyle = wb.createCellStyle();
//创建sheet页
Sheet sheet = wb.createSheet("第一个单元格");
//sheet页创建第三行
Row row = sheet.createRow(2);
//设置行高
row.setHeightInPoints(30);
//定义单元格
Cell cell = row.createCell(1);
cell.setCellValue("合并单元格");
//合并单元格
sheet.addMergedRegion(new CellRangeAddress(
2//起始行
,2//结束行
,1//起始列
,4//结束列
));
//获取文件输出流
FileOutputStream fos = new FileOutputStream("E://poiDoc//合并单元格的工作簿.xls");
//创建文件
wb.write(fos);
//关闭文件输出流
fos.close();
}
- 字体处理
- 读取和重写工作簿
- 单元格中使用换行
- 创建用户自定义数据格式