3.poi入门操作

  3.1 搭建环境

 1 <dependency>
2 <groupId>org.apache.poi</groupId>
3 <artifactId>poi</artifactId>
4 <version>4.1.0</version>
5 </dependency>
6 <!-- poi2007相应依赖坐标 -->
7 <dependency>
8 <groupId>org.apache.poi</groupId>
9 <artifactId>poi-ooxml</artifactId>
10 <version>4.1.0</version>
11 </dependency>
12 <dependency>
13 <groupId>org.apache.poi</groupId>
14 <artifactId>poi-ooxml-schemas</artifactId>
15 <version>4.1.0</version>
16 </dependency>

3.4基本操作

public class App {
public static void main(String[] args) {
//1.创建工作簿
Workbook wb = new XSSFWorkbook();//2007版
//2.创建sheet
Sheet sheet = wb.createSheet("test");
//3文件流
try (FileOutputStream fos = new FileOutputStream("E:\\poi\\test.xlsx")) {
wb.write(fos);
} catch (IOException e) {
e.printStackTrace();
} }
}

Demo2 设置单元格样式

视频链接

 1 /**
2 * Demo2设置单元格样式
3 */
4 public class Demo2 {
5 public static void main(String[] args) {
6 //1.创建工作簿
7 Workbook wb = new XSSFWorkbook();//2007版
8 //2.创建sheet
9 Sheet sheet = wb.createSheet("test");
10 //创建行对象,参数:索引从0开始
11 Row row = sheet.createRow(2);
12 //创建单元格对象,索引从0开始
13 Cell cell = row.createCell(2);
14 cell.setCellValue("才高八斗");
15
16 //样式处理
17 //创建样式对象
18 CellStyle style = wb.createCellStyle();
19 style.setBorderTop(BorderStyle.THIN);//上边框
20 style.setBorderRight(BorderStyle.THIN);//右边框
21 style.setBorderBottom(BorderStyle.THIN);//下边框
22 style.setBorderLeft(BorderStyle.THIN);//左边框
23
24 //创建字体对象
25 Font font = wb.createFont();
26 font.setFontName("华文行楷");
27 font.setFontHeightInPoints((short) 28);//设置字号
28 style.setFont(font);
29
30 //行高和列宽
31 row.setHeightInPoints(50);//设置行高
32 sheet.setColumnWidth(2, 31 * 256);//第三列,设置列宽需要乘以256
33
34 //设置水平居中
35 style.setAlignment(HorizontalAlignment.CENTER);
36 //设置垂直居中
37 style.setVerticalAlignment(VerticalAlignment.CENTER);
38
39 //向单元格设置样式
40 cell.setCellStyle(style);
41
42 //3文件流
43 try (FileOutputStream fos = new FileOutputStream("E:\\poi\\test3.xlsx")) {
44 wb.write(fos);
45 } catch (IOException e) {
46 e.printStackTrace();
47 }
48
49 }
50 }

Demo3 在Excel中添加图片

视频链接

 1 /**
2 * Demo3在Excel中添加图片
3 */
4 public class Demo1 {
5 public static void main(String[] args) throws IOException {
6 //1.创建工作簿
7 Workbook wb = new XSSFWorkbook();//2007版
8 //2.创建sheet
9 Sheet sheet = wb.createSheet("test");
10
11 //------------------------------------------------------------
12 //1.读取图片流
13 FileInputStream fis = new FileInputStream("E:\\poi\\merry.jpg");
14
15 //2.转化二进制数组
16 byte[] bytes = IOUtils.toByteArray(fis);
17 fis.read(bytes);
18 //3.向poi内存中添加一张图片,返回图片在图片集合中的索引
19 int index = ((XSSFWorkbook) wb).addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
20 //4.绘制图片工具类
21 CreationHelper helper = wb.getCreationHelper();
22 //5.创建一个绘图对象
23 Drawing<?> drawing = sheet.createDrawingPatriarch();
24 //6.创建锚点,设置图片坐标
25 ClientAnchor anchor = helper.createClientAnchor();
26 //设置图片起始位置
27 anchor.setRow1(1);
28 anchor.setCol1(1);
29 ////设置图片结束位置
30 anchor.setRow2(15);
31 anchor.setCol2(15);
32 //7.绘制图片
33 Picture picture = drawing.createPicture(anchor, index);//图片位置,图片的索引
34 // picture.resize();//自适应渲染图片
35 //------------------------------------------------------------
36 //3文件流
37 try (FileOutputStream fos = new FileOutputStream("E:\\poi\\test4.xlsx")) {
38 wb.write(fos);
39 } catch (IOException e) {
40 e.printStackTrace();
41 }
42
43 }
44 }

加载Excel

/**
* Demo4读取Excel并解析
* sheet.getLastRowNum():获取最后一行的索引值
* row.getLastCellNum():获取最后一个单元格的号码
*/
public class Demo4 {
public static void main(String[] args) throws IOException {
//1.根据Excel文件创建工作簿
Workbook wb = new XSSFWorkbook("E:\\poi\\demo2.xlsx");
//2.获取Sheet
Sheet sheet = wb.getSheetAt(0);
//3.获取sheet中的每一行和每一个单元格
for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row row = sheet.getRow(rowNum);//根据索引获取每一行
if (row == null){
continue;
}
StringBuilder sb = new StringBuilder();
for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
//根据索引获取每一个单元格
Cell cell = row.getCell(cellNum);
if(cell == null){
continue;
}
//获取每一个单元格的内容
Object value = getCellValue(cell);
sb.append(value).append("-");
}
System.out.println(sb.toString());
} } private static Object getCellValue(Cell cell) { //1.获取单元格的属性类型
CellType cellType = cell.getCellType();
//2.根据单元格的类型获取时间
Object value = null;
switch (cellType) {
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
//日期格式
value = cell.getDateCellValue();
} else {
value = cell.getNumericCellValue();
}
break;
case STRING:
value = cell.getStringCellValue();
break;
case BOOLEAN:
value = cell.getBooleanCellValue();
break;
case FORMULA://公式类型
value = cell.getCellFormula();
break;
default:
break;
} return value;
}
}

黑马 - poi Excel的更多相关文章

  1. poi 升级至4.x 的问题总结(POI Excel 单元格内容类型判断并取值)

    POI Excel 单元格内容类型判断并取值 以前用 cell.getCachedFormulaResultType() 得到 type 升级到4后获取不到了 换为:cell.getCellType( ...

  2. POI Excel 合并数据相同的行

    import java.io.Serializable; /** * POI Excel报表导出,列合并实体<br> * * @author WQ * */ public class Po ...

  3. poi excel导出,下载

    poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...

  4. poi excel导入

    poi.jar包 import java.io.File;import java.io.FileInputStream;import java.io.IOException; import org.a ...

  5. java, poi, excel

    工作需要用java操作Excel,现在网上搜索了一下,决定选取POI包来操作.pom内容如下: <dependency> <groupId>org.apache.poi< ...

  6. POI/Excel/HTML单元格公式问题

    一.问题描述 使用MyBatis从数据库中获取数据,然后用POI把数据填充到Excel模板中,生成最终的xls文件.把最终的xls文件转换为html文件,并返回给前台显示在Panel中. Excel模 ...

  7. POI excel导出

    ******************************* excel表格导出,使用POI实现 ******************************* 实现导出步骤 --配置导出excel ...

  8. poi excel超出65536行数限制自动扩展Invalid row number (65536) outside allow

    1.xls一个sheet只能装65536行,多余则报错 poi包导出或写入excel超出65536报错: java.lang.IllegalArgumentException: Invalid row ...

  9. poi excel 合并单元格

    结论:final CellRangeAddress cra = new CellRangeAddress(rowId, rowId + rowSkip,        colId, colId + c ...

随机推荐

  1. 关于Python 编码的一点认识

    在计算机中,所有数据的存储.运算以及传输都必须是二进制数字,因为计算机只认识0和1. 当一个人把一份数据传给另一个人时,计算机传递的是其实是二进制数字,但这些数字需要被还原为原始信息. 这个工作当然是 ...

  2. synchronized语法

    synchronized( ){ } synchronized 关键字是加锁的意思,用它来修饰方法就表示给该方法加了锁,从而达到线程同步的效果;用它来修饰代码块就表示给该代码块加了锁,从而达到线程同步 ...

  3. Vue脚手架中默认的margin怎么清除

    问题情景:开发中发现我的项目四周有白边,但是并没有设置样式 问题原因:vue脚手架中静态文件夹public中的index.html造成的 解决方案:找到vue脚手架中index.html页面,设置ma ...

  4. Lambad表达式--Java8新特性

    1.概述 Lambda是一个匿名函数,是java8的一个新特性.可以对接口进行非常简洁的实现.但它要求接口中只能有一个抽象方法,原因是lambda只能实现一个方法.另外,需要在接口上添加注解@Func ...

  5. mysql锁——innodb的行级锁

    [前言]数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应 ...

  6. MYSQL索引优化法则

    目录 一首诗送给各位: 全值匹配我最爱,最左前缀要遵守: 带头大哥不能死,中间兄弟不能断: 索引列上少计算,范围之后全失效: Like百分写最右,覆盖索引不写星: 不等空值还有or,索引失效要少用: ...

  7. 后端程序员之路 44、Redis结合protobuf

    protobuf序列化速度不错,在往Redis里存对象时,用protobuf序列化可以节省内存,省去写序列化反序列化代码的工作. google protocol buffer 与 redis 结合使用 ...

  8. 重复代码的克星,高效工具 VSCode snippets 的使用指南

    为什么要用 snippets(代码段)? 不管你使用何种编程语言,在我们日常的编码工作中,都会存在有大量的重复代码编写,例如: 日志打印: console.log,log.info('...') 输出 ...

  9. Java开发不懂Docker,学尽Java也枉然,阿里P8架构师手把手带你玩转Docker实战

    转: Java开发不懂Docker,学尽Java也枉然,阿里P8架构师手把手带你玩转Docker实战 Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一 ...

  10. URL 地址解析

    //虚拟目录的路径 Response.Write("<strong>Request.ApplicationPath:</strong>" + Request ...