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. hadoop支持lzo完整过程

    简介 启用lzo 启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3.同时解压缩的速度也比较快. 安装lzo lzo并不是linux系统原生支持,所以需要下载安装软件 ...

  2. HTML5中对于块级元素和行内元素的总结

    转自:https://www.cnblogs.com/iverson666/p/9169274.html块级元素:块级大多为结构性标记 <address>...</adderss&g ...

  3. wxWidgets源码分析(5) - 窗口管理

    窗口管理 所有的窗口均继承自wxTopLevelWindows: WXDLLIMPEXP_DATA_CORE(wxWindowList) wxTopLevelWindows; wxTopLevelWi ...

  4. 使用Spark加载数据到SQL Server列存储表

    原文地址https://devblogs.microsoft.com/azure-sql/partitioning-on-spark-fast-loading-clustered-columnstor ...

  5. PAT-1132(Cut Integer )数的拆分+简单题

    Cut Integer PAT-1132 #include<iostream> #include<cstring> #include<string> #includ ...

  6. C语言中储存类别和内存管理

    C语言中储存类别和内存管理 储存类别 C语言提供了多种储存类别供我们使用,并且对应的有对应的内存管理策略,在了解C中的储存类型前,我们先了解一下与储存类型相关的一些概念. 1. 基础概念 对象:不同于 ...

  7. [UNP] IO 复用

    UNP Part-2: Chapter 6. I/O Multiplexing: The select and poll Functions 的读书笔记. 在 这篇博客 的最后,我们对文章中的服务器- ...

  8. Git 常用命令 和 安装

    这年头不会点git还真不能与别人进行代码交流 安装 windowns版下载:https://git-scm.com/download/win ,下载完成后就自己手动安装 ,很简单就不多说. Ubunt ...

  9. httpPost的两种方式

    1,post-Body流和post参数,以下客户端代码和服务端代码可共用 客户端代码 /** * post 方法 * 抛送给EDI * @param url http://127.0.0.1:9003 ...

  10. 读 Kafka 源码写优雅业务代码:配置类

    这个 Kafka 的专题,我会从系统整体架构,设计到代码落地.和大家一起杠源码,学技巧,涨知识.希望大家持续关注一起见证成长! 我相信:技术的道路,十年如一日!十年磨一剑! 往期文章 Kafka 探险 ...