java使用POI操作excel

学习目标:

在java掌握poi,操作excel或者是word


一、POI 是什么?

Apache POI 是Apache的开源项目,POI提供API给Java程序对Microsoft Offic 格式文档读和写的功能。
官网地址:POI官网
目前已经更新到5.2版本是java中很好用绘制excel的项目

二、Excel包名称说明

HSSFXSSFSXSSF
对应Excel版本2003及2003版本以前2007后版本2007后版本
扩展名.xls.xlsx.xlsx
区别最常用的方式,但是不能超过65535行,超出65536条就会报错,此方式因不足7万行所以一般不会内存溢出(OOM)突破HSSF 65535行的局限(1048576行,16384列),不过就伴随着一个问题内存溢出,原因是你创建的是存在内存的并没有持久化POI 3.8 开始,提供基于XSSF低内存占用的SXSSF方式。它只会保存最新的excel rows在内存里供查看,在此之前的都会被写入到硬盘里。被写入硬盘的rows是不可见/不可访问的。只有内存里才可以访问到
XSSFSXSSF
访问量访问全部访问一定数量的数据
Sheet.clone()支持不支持
更换表头可以不可,因为已经提前把数据写入硬盘就不能修改
公式求值支持不支持

二、使用步骤

1.引入库

代码如下(示例):

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-excelant</artifactId>
    <version>4.1.2</version>
</dependency>

2.使用方式

基础流程

//1. 创建工作空间Workbook
Workbook workbook=new SXSSFWorkbook();
//2.根据workbook创建sheet
//请注意,工作表名称不能超过31个字符,且不能包含以下字符:
//0x0000、0x0003、冒号(:)、反斜杠(\)、星号(*)、问号(?)、正斜杠(/)、方括号([])
//WorkbookUtil.createSafeSheetName(sheetName) 此方法可以将无效字符转化为空格
//已存在就不能创建,只能 workbook.getSheet("sheet")
Sheet sheet = workbook.createSheet("测试列表");
//3.根据sheet创建row
Row row1 = sheet.createRow(0);
//4.根据row创建cell
Cell cell1 = row1.createCell(0);
//5.向cell里面设置值
cell1.setCellValue("日期");

//写入文件 文件需要存在
FileOutputStream fos=new FileOutputStream("C:\\Users\\admin\\Desktop\\test.xlsx");
workbook.write(fos);
fos.close();

设置单元格(cell)样式

//创建样式
CellStyle style = workbook.createCellStyle();

//启用样式
cell.setCellStyle(cellStyle);


//设置下边框和颜色
style.setBorderBottom(BorderStyle.THIN);
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
//设置左边框和颜色
style.setBorderLeft(BorderStyle.THIN);
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
//设置右边框和颜色
style.setBorderRight(BorderStyle.THIN);
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
//设置上边框边框和颜色
style.setBorderTop(BorderStyle.THIN);
style.setTopBorderColor(IndexedColors.BLACK.getIndex());


//水平对齐方式 [GENERAL(常规),LEFT(左对齐),CENTER(水平居中),RIGHT(右对齐),FILL(填充对齐),JUSTIFY(两端对齐),CENTER_SELECTION(跨列居中),DISTRIBUTED(分散对齐)]
style.setAlignment(HorizontalAlignment.CENTER);
//垂直对齐方式 [TOP(顶部对齐),CENTER(垂直居中),BOTTOM(底部对齐),JUSTIFY(两端对齐),DISTRIBUTED(分散对齐)]
style.setVerticalAlignment(VerticalAlignment.CENTER);

//设置文本是否换行
style.setWrapText(true);

//设置单元格时间展示格式
style.setDataFormat(creationHelper.createDataFormat().getFormat("m/d/yy h:mm"));

常用的单元格的样式,更详细的设置单元格方式可以通过官方提供api文档进行查看。

CellStyle(4.1.X版本)
注:有部分方法在4.2版本已经被弃用

设置单元格文本样式

//创建文本Font
Font font = workbook.createFont();


//设置字号
font.setFontHeightInPoints((short)11);
//设置字体
font.setFontName("宋体");
//设置黑体
font.setBold(false);
//设置斜体
font.setItalic(false);
//设置删除线
font.setStrikeout(false);

//设置字体颜色
//IndexedColors类中提供了我们设置excel使用的颜色也可以自己设置颜色GRB
font.setColor(IndexedColors.RED.getIndex());

合并单元格

//合并单元格
//如下合并 坐标 A1:B1的单元格
sheet.addMergedRegion(new CellRangeAddress(
                0, // 开始的列坐标 0表示A1 1表示A2
                0, // 结束的列坐标 0表示A1 1表示A2 2表示A3
                0, // 开始的行坐标 0表示A1 1表示B1
                1  // 结束的行坐标 0表示A1 1表示B1
        ));
        

如果我们对于单元格有一些样式要求比如表格的边框等等,那么在合并前我们需要为每一个单元格创建对于的表格style,在执行CellRangeAddress()方法,才能保证合并以后的样式是我们所需要的。
我们需要注意的就是,在合并的时候并不是合并后成为一个单元格,旧的单元格还是依旧存在,如A1和B1合并,A1的样式会覆盖于B1上(文本、背景色等),但是边框并不会

List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();

通过sheet.getMergedRegions()我们可以获取到当前需要合并单元格的信息 A1:B1就是合并A1和B1单元格。

单元格自动填充

//参数1 表示对于的列
//参数2 true使用合并后的单元格扩充 false设置的对应行单元格扩充
sheet.autoSizeColumn(0,false);

//如果使用的是SXSSFWorkbook,是不可读取的有一部分,所有需要设置为允许
((SXSSFSheet)sheet).trackColumnsForAutoSizing(Lists.newArrayList(0,1));
//或者
((SXSSFSheet)sheet).trackColumnForAutoSizing(1);
//对应的参数表示对于的某列设置完以后再执行autoSizeColumn即可。

总结

也是今天才认真看poi有记录一下使用上的方法。 有时间的话可以先学习easyPoi在自己封装一些东西。学而时习之不亦说乎!!!!!


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值