黑马 - poi Excel




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的更多相关文章
- poi 升级至4.x 的问题总结(POI Excel 单元格内容类型判断并取值)
POI Excel 单元格内容类型判断并取值 以前用 cell.getCachedFormulaResultType() 得到 type 升级到4后获取不到了 换为:cell.getCellType( ...
- POI Excel 合并数据相同的行
import java.io.Serializable; /** * POI Excel报表导出,列合并实体<br> * * @author WQ * */ public class Po ...
- poi excel导出,下载
poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...
- poi excel导入
poi.jar包 import java.io.File;import java.io.FileInputStream;import java.io.IOException; import org.a ...
- java, poi, excel
工作需要用java操作Excel,现在网上搜索了一下,决定选取POI包来操作.pom内容如下: <dependency> <groupId>org.apache.poi< ...
- POI/Excel/HTML单元格公式问题
一.问题描述 使用MyBatis从数据库中获取数据,然后用POI把数据填充到Excel模板中,生成最终的xls文件.把最终的xls文件转换为html文件,并返回给前台显示在Panel中. Excel模 ...
- POI excel导出
******************************* excel表格导出,使用POI实现 ******************************* 实现导出步骤 --配置导出excel ...
- poi excel超出65536行数限制自动扩展Invalid row number (65536) outside allow
1.xls一个sheet只能装65536行,多余则报错 poi包导出或写入excel超出65536报错: java.lang.IllegalArgumentException: Invalid row ...
- poi excel 合并单元格
结论:final CellRangeAddress cra = new CellRangeAddress(rowId, rowId + rowSkip, colId, colId + c ...
随机推荐
- 关于Python 编码的一点认识
在计算机中,所有数据的存储.运算以及传输都必须是二进制数字,因为计算机只认识0和1. 当一个人把一份数据传给另一个人时,计算机传递的是其实是二进制数字,但这些数字需要被还原为原始信息. 这个工作当然是 ...
- synchronized语法
synchronized( ){ } synchronized 关键字是加锁的意思,用它来修饰方法就表示给该方法加了锁,从而达到线程同步的效果;用它来修饰代码块就表示给该代码块加了锁,从而达到线程同步 ...
- Vue脚手架中默认的margin怎么清除
问题情景:开发中发现我的项目四周有白边,但是并没有设置样式 问题原因:vue脚手架中静态文件夹public中的index.html造成的 解决方案:找到vue脚手架中index.html页面,设置ma ...
- Lambad表达式--Java8新特性
1.概述 Lambda是一个匿名函数,是java8的一个新特性.可以对接口进行非常简洁的实现.但它要求接口中只能有一个抽象方法,原因是lambda只能实现一个方法.另外,需要在接口上添加注解@Func ...
- mysql锁——innodb的行级锁
[前言]数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应 ...
- MYSQL索引优化法则
目录 一首诗送给各位: 全值匹配我最爱,最左前缀要遵守: 带头大哥不能死,中间兄弟不能断: 索引列上少计算,范围之后全失效: Like百分写最右,覆盖索引不写星: 不等空值还有or,索引失效要少用: ...
- 后端程序员之路 44、Redis结合protobuf
protobuf序列化速度不错,在往Redis里存对象时,用protobuf序列化可以节省内存,省去写序列化反序列化代码的工作. google protocol buffer 与 redis 结合使用 ...
- 重复代码的克星,高效工具 VSCode snippets 的使用指南
为什么要用 snippets(代码段)? 不管你使用何种编程语言,在我们日常的编码工作中,都会存在有大量的重复代码编写,例如: 日志打印: console.log,log.info('...') 输出 ...
- Java开发不懂Docker,学尽Java也枉然,阿里P8架构师手把手带你玩转Docker实战
转: Java开发不懂Docker,学尽Java也枉然,阿里P8架构师手把手带你玩转Docker实战 Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一 ...
- URL 地址解析
//虚拟目录的路径 Response.Write("<strong>Request.ApplicationPath:</strong>" + Request ...