一、创建Excel单元格
我们如何使用代码的方式,代替我们平常新建的excel文档?
1.首先按照我们的需要选择POI的结构
2.使用POI提供的API进行创建即可
//测试创建excel文件
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb = new XSSFWorkbook();
//2.创建表单Sheet
Sheet sheet = wb.createSheet("test");
//3.文件流
FileOutputStream fos = new FileOutputStream("E:\\test.xlsx");
//4.写入文件
wb.write(fos);
fos.close();
}
这时我们允许main 方法,找到excel文档查看我们刚刚进行的操作
二、单元格填充数据
如果将数据写入到单元格中呢?
主要分几步:创建工作簿、创建表单Sheet、创建row、创建单元格cell
//测试创建单元格
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb = new XSSFWorkbook();
//2.创建表单Sheet
Sheet sheet = wb.createSheet("test");
//3.创建行对象,从0开始
Row row = sheet.createRow(3);
//4.创建单元格,从0开始
Cell cell = row.createCell(0);
//5.单元格写入数据
cell.setCellValue("单元格01");
//6.文件流
FileOutputStream fos = new FileOutputStream("E:\\test.xlsx");
//7.写入文件
wb.write(fos);
fos.close();
}
这时我们允许main 方法,找到excel文档查看我们刚刚进行的操作
三、单元格的样式
在excel文档中,我们可以设置字体、大小、单元格的宽度高度、居中显示、合并单元格等样式的操作,那么在poi中我们如何进行呢?
//测试创建单元格
public static void main(String[] args) throws Exception {
//省略其他关键性代码......
//5.单元格写入数据
cell.setCellValue("传智播客");
//6.创建单元格样式对象
CellStyle cellStyle = wb.createCellStyle();
//设置边框
cellStyle.setBorderBottom(BorderStyle.DASH_DOT);//下边框
cellStyle.setBorderTop(BorderStyle.HAIR);//上边框
//设置字体
Font font = wb.createFont();//创建字体对象
font.setFontName("华文行楷");//设置字体
font.setFontHeightInPoints((short)28);//设置字号
cellStyle.setFont(font);
//设置居中显示
cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
//设置单元格样式
cell.setCellStyle(cellStyle);
//合并单元格
CellRangeAddress region = new CellRangeAddress(0, 3, 0, 2);
sheet.addMergedRegion(region);
}
四、绘制图形
在excel中,我们有时候会插入一些图片,那么在poi中会怎么做呢?
1.首先我们需要将需要放入的图片转为二进制数组
2.excel会在内存中统一集中管理图片,所以我们向POI内存中添加一张图片
3.向POI内存添加图片时,会返回该图片的下标,方便使用管理需要操作的图片
4.通过绘制图片工具类进行绘制,需要先获取一个绘图对象开始绘画
5.通过图片工具类,创建瞄点设置图片的位置坐标
6.使用绘图对象进行操作图片的绘画
//绘制图形
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb = new XSSFWorkbook();
//2.创建表单Sheet
Sheet sheet = wb.createSheet("test");
//读取图片流
FileInputStream stream=new FileInputStream("e:\\logo.jpg");
byte[] bytes= IOUtils.toByteArray(stream);
//读取图片到二进制数组
stream.read(bytes);
//向Excel添加一张图片,并返回该图片在Excel中的图片集合中的下标
int pictureIdx = wb.addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);
//绘图工具类
CreationHelper helper = wb.getCreationHelper();
//创建一个绘图对象
Drawing<?> patriarch = sheet.createDrawingPatriarch();
//创建锚点,设置图片坐标
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(0);//从0开始
anchor.setRow1(0);//从0开始
//创建图片
Picture picture = patriarch.createPicture(anchor, pictureIdx);
picture.resize();
//6.文件流
FileOutputStream fos = new FileOutputStream("E:\\test.xlsx");
//7.写入文件
wb.write(fos);
fos.close();
}
参考资料
黑马程序员:基于SaaS平台的iHRM刷脸登录实战开发(报表相关视频)