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学习笔记]组织文件

    shutil 模块 shutil 模块可以让我们很方便的在Python程序中复制.移动.改名和删除文件. 复制文件和文件夹 使用shutil.copy()来复制文件,该函数含两个参数,均为字符串格式的 ...

  2. 学习一下 SpringCloud (五)-- 配置中心 Config、消息总线 Bus、链路追踪 Sleuth、配置中心 Nacos

    (1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...

  3. 基于QT的全自动超声波焊接机上位机追溯系统(已经在设备上应用)

    应用说明: 本上位机程序是我在做锂电池产线项目的时候开发的,用于采集设备数据以及实现设备自动控制,下位机采用基恩士PLC,超声波机采用上海一家的超声波焊接机,实现电芯极耳的自动焊接,上位在设备焊接过程 ...

  4. Python函数注解

    目录 函数注解概述 实际应用 inspect模块 业务代码 总结 以下内容基于Python 3x 涉及的知识前提: 建议理解Python装饰器后学习此内容 函数注解概述 函数注解可以针对函数的参数.返 ...

  5. 记录mysql查询数据遇到的一个小问题

    今天在测试的时候,需要使用mysql对插入的数据进行检验,但是写完查询语句的时候执行会报错.原因很简单,这个表名是order(订单),在MySQL语言中order是用来排序的关键字,原则上讲是不能作为 ...

  6. ajax请求添加自定义header参数

    beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("X-Auth0-Token", g ...

  7. 解决springboot项目打成jar包部署到linux服务器后上传图片无法访问的问题

    前言:目前大三,自己也在学习和摸索的阶段.在和学校的同学一起做前后端分离项目的时候,我们发现将后端打包成jar,然后部署到服务器中通过java -jar xxx.jar运行项目以后,项目中存在文件上传 ...

  8. MongoDB4.2 副本集扫盲说明

    说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...

  9. redis过期key监听事件

    目录 redis安装 docker拉取 启动 redis 配置 命令监听 问题 程序监听 具体监听类 效果 总结 redis常用语缓存操作,但是redis功能不仅仅于此.今天我们来看看redis的ke ...

  10. 【python+selenium的web自动化】- 元素的常用操作详解(一)

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html ​ 本篇主要内容:1.元素 ...