首页 > 编程语言 >Java读写Excel文件的框架POI

Java读写Excel文件的框架POI

时间:2024-09-30 22:50:50浏览次数:3  
标签:cellStyle Java wb poi Excel POI sheet

Excel的两种形式

目前世面上的Excel分为两个大的版本Excel2003和Excel2007及以上两个版本,两者之间的区别如下:


Excel 2003

Excel 2007

后缀

xls

xlsx

结构

二进制格式,其核心结构是复合文档类型的结构

XML类型结构

单sheet数据量

行:65535;列:256

行:1048576;列:16384

特点

存储容量有限

基于xml压缩,占用空间小操作效率高

Excel2003是一个特有的二进制格式,其核心结构是复合文档类型的结构,存储数据量较小;Excel2007 的核心结构是 XML 类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小,操作效率更高

Java 常见excel操作工具

Java中常见的用来操作Excl的方式一般有2种:JXL和POI。

JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护。 POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007。poi现在 一直有更新。所以现在主流使用POI。

POI的概述

Apache POI是Apache软件基金会的开源项目,由Java编写的免费开源的跨平台的 Java API,Apache POI提供API

给Java语言操作Microsoft Office的功能。

POI的应用场景

  1. 数据报表生成
  2. 数据备份
  3. 数据批量上传

POI的入门操作

搭建环境

1、导包

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>4.0.1</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>4.0.1</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml-schemas</artifactId>
	<version>4.0.1</version>
</dependency>

API说明

HSSF提供读写Microsoft Excel XLS格式档案的功能。 2003版本
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。2007版本

名称

说明

workbook

Excel的文档对象,针对不同的Excel类型分为:HSSFWorkbook(2003)和XSSFWorkbool(2007)

Sheet

Excel的表单

Row

Excel的行

Cell

Excel的子单元格

Font

Excel的字体

CellStyle

单元格样式

POI的使用

创建Excel

public class PoiTest {
/**
	* 创建excel:
	* 1.创建工作簿
	* 2.创建sheet
	* 3.创建行对象
	* 4.创建单元格
	* 5.对单元格赋值
	* 6.设置样式
	* 7.下载
*/
@Test
public void test() throws Exception {
	//1.创建一个工作簿
	//Workbook wb = new HSSFWorkbook(); //处理excel2003版本 .xls
	Workbook wb = new XSSFWorkbook();//处理excel2007及以上版本 .xlsx
	//new SXSSFWorkbook();// 处理大数据量excel报表对象
	//2.创建sheet
	Sheet sheet = wb.createSheet("test");
	//3.创建行对象
	Row row = sheet.createRow(1);//接受参数 ,数组下标
	//4.创建单元格
	Cell cell = row.createCell(1);//数组下表
	//5.设置单元格内容
	cell.setCellValue("test");
	//设置样式
	/**
		* 1.创建样式对象
		* 2.通过样式对象指定样式
		* 3.配置单元个样式
	*/
	CellStyle cellStyle = wb.createCellStyle();
	//通过样式对象指定样式
	cellStyle.setBorderTop(BorderStyle.THIN); //细线
	cellStyle.setBorderBottom(BorderStyle.THIN); //细线
	cellStyle.setBorderLeft(BorderStyle.THIN); //细线
	cellStyle.setBorderRight(BorderStyle.THIN); //细线
	//字体 对象
	Font font = wb.createFont();
	font.setFontName("华文行楷");
	font.setFontHeightInPoints((short)26);//字号
	cellStyle.setFont(font);
	cell.setCellStyle(cellStyle);
	//指定行高和列宽
	sheet.setColumnWidth(1,20*256); //列宽 不准确!!!
	row.setHeightInPoints(30);
	//6.将excel保存到本地磁盘中
	FileOutputStream fos = new FileOutputStream("D:\\poitest.xlsx");
	wb.write(fos);
	fos.close();
	}
}

读取Excel

public class PoiTest02 {
	@Test
	public void test() throws Exception {
		//1.根据excel文件加载工作簿
		Workbook wb = new XSSFWorkbook("D:\\poitest.xlsx");
		//2.读取第一个sheet
		Sheet sheet = wb.getSheetAt(0);//数组下标
		//3.循环sheet中的每一行
		//sheet.getLastRowNum 获取最后一行的数组下标
		for(int i=0;i<sheet.getLastRowNum()+1;i++) {
			Row row = sheet.getRow(i);
			//row.getLastCellNum() 获取最大行数
			//4.读取行中的每一个单元格
			String str = "";
			for(int j=0;j<row.getLastCellNum();j++) {
				Cell cell = row.getCell(j);
				//5.获取单元格中的数据
				if(cell != null) {
					str += getCellValue(cell);
				}
			}
			System.out.println(str);
		}
	}
	public Object getCellValue(Cell cell) {
		//获取单元格的类型
		CellType type = cell.getCellType();
		Object result = null;
		switch (type) {
			case STRING:{
				result = cell.getStringCellValue();//获取string类型数据
				break;
			}
			case NUMERIC:{
				//判断
				if(DateUtil.isCellDateFormatted(cell)) { //日期格式
					result = cell.getDateCellValue();
				}else{
					//double类型
					result = cell.getNumericCellValue(); //数字类型
				}
				break;
			}
			case BOOLEAN:{
				result = cell.getBooleanCellValue();//获取boolean类型数据
				break;
			}
			default:{
				break;
			}
		}
		return result;
	}
}

标签:cellStyle,Java,wb,poi,Excel,POI,sheet
From: https://blog.51cto.com/tntxia/12155812

相关文章

  • Java项目:223基于Springboot + vue实现的蜗牛兼职网(含论文+答辩PPT)
    作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍基于Springboot+vue实现的蜗牛兼职网本系统包含管理员、用户两个角色。管理员角色:用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理。 用......
  • Excel启动报错ntdll.dll?Excel ntdll.dll错误解决方案汇总
    当您在启动MicrosoftExcel时遇到“找不到ntdll.dll”或“ntdll.dll缺失/损坏”的错误提示,这意味着您的计算机上缺少或损坏了一个重要的系统文件。ntdll.dll文件是Windows操作系统中的核心文件之一,用于支持许多底层的系统功能和服务。缺失或损坏该文件会导致包括Excel在内的多......
  • javascript-Web APLs (一)
    WebAPl基本认知变量声明const优先,如果变量会改变,就用letconst声明的值不能更改,而且const声明变量的时候需要里面进行初始化l但是对于引用数据类型,const声明的变量,里面存的不是值,不是值,不是值,是地址比如://错误写法constgirlfriend=[]girlfr......
  • 高级java每日一道面试题-2024年9月30日-算法篇-LRU是什么?如何实现?
    如果有遗漏,评论区告诉我进行补充面试官:LRU是什么?如何实现?我回答:LRU(LeastRecentlyUsed)是一种常用的缓存淘汰策略,用于在缓存满时决定哪些数据应该被移除。LRU算法的基本思想是:当缓存达到其容量上限时,最近最少使用的数据会被优先淘汰。这种策略假设最近使用的数据在......
  • 高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?
    如果有遗漏,评论区告诉我进行补充面试官:Redis持久化有几种方式?我回答:Redis是一个高性能的键值存储系统,常用于缓存、消息队列和实时数据分析等场景。为了保证数据的持久性,Redis提供了两种主要的持久化方式:RDB(RedisDatabaseBackup)和AOF(AppendOnlyFile)。这两种方......
  • JavaSE的小结10
    第1章-第10节一、知识点网络编程。二、目标理解前后端交互过程。掌握网络编程的基本概念。三、内容分析重点网络编程基本概念。前后端交互过程。难点前后端交互过程。四、内容1、网络编程网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过......
  • Java学习第七天--面向对象
    目录1.学什么 2.类2.1类的组成2.2类与对象的关系3.对象内存图 4.成员变量和局部变量5.this关键字6.构造方法6.1构造器6.2格式:6.3执行时机:6.4构造方法作用6.5构造方法注意事项6.5.1构造方法的创建6.5.2构造方法的重载6.5.3推荐的使用方式7.封装7.1合理隐藏,......
  • java计算机毕业设计社区食堂就餐管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人口老龄化的加剧,社区作为居民生活的基本单元,其服务功能的重要性日益凸显。社区食堂作为连接居民日常生活的重要一环,不仅承载......
  • Java 中的5个代码性能提升技巧,最高提升近10倍
    Java中的5个代码性能提升技巧,最高提升近10倍 文章持续更新,可以关注公众号程序猿阿朗或访问未读代码博客。本文 Github.com/niumoo/JavaNotes 已经收录,欢迎Star。这篇文章介绍几个Java开发中可以进行性能优化的小技巧,虽然大多数情况下极致优化代码是没有必要的,但是作......
  • C++ Data Member Pointers 和 Member Function Pointers
    https://itanium-cxx-abi.github.io/cxx-abi/abi.html#member-pointers2.3MemberPointers2.3.1DataMemberPointersThebasicABIpropertiesofdatamemberpointertypesarethoseofptrdiff_t.Adatamemberpointerisrepresentedasthedatamember's......