Excel的类、方法和Excel操作
excel主要有四个类:
Workbook.class(整个Excel文件)、
Sheet.class(Excel文件中的每个页)、
Row.class(页的行)、
Cell.class(行的每个单元格)
它们的层次:
由Workbook类对象(如名为workBook)获得/创建Sheet类对象(如名为sheet),
再由Sheet类对象获得/创建Row类对象(如名为row),
由Row类对象获得/创建Cell类对象(如名为cell)
常用的方法如下:
1. Workbook.class
获得sheet
getSheet(String str) //str:sheet名
getSheetAt(int i) //i:sheet所在页数的索引值
创建 sheet
createSheet() //创建默认名的sheet
createSheet(String str) //str:sheet名
得到workBook中的sheet数
getNumberOfSheets()
2. Sheet.class
获得row
getRow(int i) //i:要获取的行的索引值
创建row
createRow(int i) //i:要创建的行的索引值
得到页中的行数
getLastRowNum()
3. Row.class
获得cell
getCell(int i) //i:要获得的单元格的列的索引值
创建cell
createCell(int i) //i:创建的单元格的列的索引值
得到行的单元格的数量
getLastCellNum()
4. Cell.class
获得单元格的值的类型
cell0.getCellType(); //获得单元格中值的类型
cell0.getNumericCellValue(); //获得Numeric类型的值
cell0.getStringCellValue(); //获得String类型的值
创建单元格的值
cell0.setCellValue(T);
如图可以看到方法setCellValue()的参数有不同类型,可以给cell中创建对应类型的值
!!!此外有一种给单元格的值创建特定格式的方法
其中每种格式都有对应的码值,我们在添加格式时需要先获取格式对应的码值
例如:
cell单元格中的内容是日期,要创建"YYYY年MM月dd HH:mm:ss"的格式
代码如下
DataFormat dataFormat=workBook.createDataFormat();//获得"YYYY年MM月dd HH:mm:ss"的格式对应的码值short dataFormatCode=dataFormat.getFormat("YYYY年MM月dd HH:mm:ss");//dataCellStyle数据格式CellStyle dataCellStyle=workBook.createCellStyle();dataCellStyle.setDataFormat(dataFormatCode);Cell cell2=row.createCell(0);cell2.setCellStyle(dataCellStyle);cell2.setCellValue(new Date());
关于Excel的操作分为解析和写入
(1)解析Excel文件
需要通过输入流,并将输入流传入Workbook,再逐层次获取,直到获取到cell单元格的值
代码如下:
//解析一个excel文件//通过输入流,读取excel文件FileInputStream in=new FileInputStream("D:\\Text\\1627356552686.xlsx");//将输入流传入WorkbookWorkbook workBook=new XSSFWorkbook(in);//sheet:工作簿//获取工作簿数量int sheetNum=workBook.getNumberOfSheets();//按照名称获取工作簿Sheet sheet0=workBook.getSheet("sheet0");//按照工作簿位置获取工作簿Sheet sheet1=workBook.getSheetAt(1);//获取工作簿最后一行Row row=sheet0.getRow(sheet0.getLastRowNum());//获得最后一行的第一个单元格Cell cell=row.getCell(0); //在不知道单元格的值的类型的情况下,需要通过判断类型才能知道用哪种方法来获取CellType cellType=cell.getCellType();switch(cellType) {case STRING:String cellVal=cell.getStringCellValue();System.out.println(cellVal);break;case NUMERIC:double cellNum=cell.getNumericCellValue();System.out.println(cellNum);break;}
(2)创建Excel
需要通过输出流,在创建完Workbook对象后,将Workbook对象中包含的数据,通过输出流,传入到Excel文件
代码如下:
public class Text04 {public static void main(String[] args) {try (Workbook workBook = new XSSFWorkbook();FileOutputStream out = new FileOutputStream("D:\\Text\\Test03.xlsx")) {//创建3个sheetSheet sheet0=workBook.createSheet("2022年度报表");Sheet sheet1=workBook.createSheet("2021年度报表");Sheet sheet2=workBook.createSheet("2020年度报表");//在sheet0中创建数据行rowRow row=sheet0.createRow(0);//创建单元格Cell cell=row.createCell(1);cell.setCellValue(Math.random()*1000);//cell单元格中放置随机数//将Workbook对象中包含的数据,通过输出流,传入到Excel文件workBook.write(out);} catch (IOException e) {e.printStackTrace();}}}
此外可以看到创建Workbook对象时,用的是Workbook workBook = new XSSFWorkbook()方法,XSSFWorkbook与HSSFWorkbook不同的是XSSFWorkbook操作的是新版本的Excel,
HSSFWorkbook操作的是旧版本的Excel,我们使用XSSFWorkbook
Excel的新版本和旧版本可存储的容量不同,新版本可存储上万条数据
此外,easyExcel以及poi的SXSSFWorkbook类可以实现对于大量数据的Excel读写,
poi和easyExcel的数据处理能力对比
结构 |
支持Excael版本 |
读写行数 |
读写速度 |
格式 |
内存占用 |
|||
HSSF |
excel2003版本 |
<=65536行 |
快 |
高 |
||||
XSSF |
excel3007版本 |
>=65536行 |
慢 |
microsoft excel ooxml |
高 |
|||
SXSSF |
excel2007版本 |
>=65536行 |
介于XSSF和SXSSF之间 |
microsoft excel ooxml |
比较高 |
|||
easyExcel |
内存占用 |
读写速度 |
读写行数 |
|||||
2.0.0以上版本 |
比较低 |
非常快 |
>65536 |
上手难易程度 |
SXSSFWorkbook 比较难(需要对源码有所研究需要写workbook),使用完必须手动关闭流 |
easyExcel 简单只需要提供数据和模板,不需要关闭流 |
使用SXSSFWorkbook类处理数据的代码与使用XSSFWorkbook类处理数据的代码编写方法一致,easyExcel的使用需要准备相关的实体类和数据等
打开任务管理器我们可以看到代码运行时的cpu和内存占用情况
这是使用easyExcel的情况:
这是使用SXSSFWorkbook的情况:
可见用这两种方法来创建含有大量数据的Excel是很快的。
Excel的类、方法和Excel操作相关推荐
- 用C#生成Excel文件的方法和Excel.dll组件生成的方法
NET Framework1.0和1.1 都没有实现OleContainer组件.查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer.这绝对是一个超重的实现,不过 ...
- Python Excel工具类封装, 实现excel表头加颜色
封装Excel工具类 我们常用的excel工具类,读有xlrd,写有xlwt.有读有写,新一代库有pandas,openpyxl等等. 大家用法都差不多,今天博主就介绍新手最爱,我也爱的xlrd和xl ...
- Python Excel工具类封装, 给excel表头搞点颜色
封装Excel工具类 我们常用的excel工具类,读有xlrd,写有xlwt.有读有写,新一代库有pandas,openpyxl等等. 大家用法都差不多,今天博主就介绍新手最爱,我也爱的xlrd和xl ...
- easyPoi导出excel工具类和设置excel导出样式(边框,背景色,字体)
如有疑问可加easypoi官方群,QQ群号码: 116844390 引入依赖,此样式基于springboot版本.依赖版本如下(maven):<dependency><groupId ...
- 原生js绑定事件的方法和dom操作
1.行内绑定:在标签上写οnclick="事件名" <button onclick="handleClick">Click Me</butto ...
- Java写一个excel工具类_Java中Excel写操作工具类--Java免费学习网
核心提示:package com.common.excel;import com.common.excel.exception.WriteExcelException;import jxl.Workb ...
- C# Excel.Range类实现对Excel单元格文本格式的设置
Excel.Range titleRange_A = newWorksheet.get_Range(newWorksheet.Cells[2, 2], newWorksheet.Cells[2, 2] ...
- java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)
依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...
- php 导出excel类,php 导出excel类
标签: /** * excel导出类 * * 使用方法 $excel=new Excel(); * //设置编码: *$excel->setEncode("utf-8",&q ...
最新文章
- php按每小时显示数据,mysql-PHP按某月统计每个小时生成的数据
- oracle备份集注册,OracleRMAN将备份集重新注册到控制文件说明
- [慢查优化]联表查询注意谁是驱动表 你搞不清楚谁join谁更好时请放手让mysql自行判定...
- pso算法c++语言代码,一C++PSO(PSO)算法
- Day 02 第二天课时总结
- oom 如何避免 高并发_如何设计这样一个高并发系统?
- 项目实训第一周(车道线检测)
- 多路径配置udev_多路径multipath配置,udev绑定
- 吐血推荐珍藏的Chrome插件
- 【LeetCode】59. Spiral Matrix II
- mysql 优化配置 大批量数据插入_MySQL数据库插入100w条数据要花多久?
- MTF直播整合导航网站源码
- js获取当前日期yyyymmdd
- win10有效清理c盘空间: 移动pagefile.sys和删除hiberfil.sys文件
- word修订模式怎么彻底关闭_word修订模式取消不了
- Python爬取NBA球员生涯数据及简单可视化
- 耿丹CS16-2班第七次作业汇总
- Package javax.naming
- 红帽子linux硬盘安装教程,XP下硬盘安装RedHat Enterprise Linux 5.5图文教程
- 英语语法汇总(9.时态)