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. 基于tcp的应用层消息边界如何定义

    聊聊基于tcp的应用层消息边界如何定义 背景 2018年笔者有幸接触一个项目要用到长连接实现云端到设备端消息推送,所以借机了解过相关的内容,最终是通过rabbitmq+mqtt实现了相关功能,同时在心 ...

  2. KMP算法,你想知道的都在这里!

    简洁 我相信很多人都听说过KMP算法(PS:在上数据结构的时候,这个算法自始至终都没想明白) 大家也知道KMP算法是用来寻找目标子串的算法,但是都没有真正搞懂KMP.之前,我也是如此,我疑惑的有: N ...

  3. 安装mysql报错

    原文链接:https://blog.csdn.net/bao19901210/article/details/51917641 二进制安装 1.添加mysql组和mysql用户,用于设置mysql安装 ...

  4. 微信小程序:数据绑定

    data中的数据不仅仅可以当成文本来显示,还可以当成属性来显示. 注意:属性值要用单引号或双引号引起来. 在微信开发者工具的控制台中点击Wxml会看到 使用Boolean类型充当属性的时候,字符串和花 ...

  5. 元类、orm

    目录 一.内置函数exec 二.元类 1. 什么是元类 2. 元类的作用 3. 创建类的两种方法 4. 怎么自定义创建元类 三.ORM 1. ORM中可能会遇到的问题 2. ORM中元类需要解决的问题 ...

  6. python:虚拟环境与pip

    原生pip镜像下载速度较慢,配置使用国内镜像.这里选择清华镜像,文档地址:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ pip 镜像配置 临时使用: ...

  7. Kafka集群消息积压问题及处理策略

    通常情况下,企业中会采取轮询或者随机的方式,通过Kafka的producer向Kafka集群生产数据,来尽可能保证Kafka分区之间的数据是均匀分布的. 在分区数据均匀分布的前提下,如果我们针对要处理 ...

  8. 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历

    剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...

  9. HDOJ-1260(动态规划水题)

    Tickets HDOJ-1260 #include<bits/stdc++.h> using namespace std; const int maxn=2003; int n; int ...

  10. CMU数据库(15-445)Lab3- QUERY EXECUTION

    Lab3 - QUERY EXECUTION 实验三是添加对在数据库系统中执行查询的支持.您将实现负责获取查询计划节点并执行它们的executor.您将创建执行下列操作的executor Access ...