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操作相关推荐

  1. 用C#生成Excel文件的方法和Excel.dll组件生成的方法

    NET Framework1.0和1.1 都没有实现OleContainer组件.查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer.这绝对是一个超重的实现,不过 ...

  2. Python Excel工具类封装, 实现excel表头加颜色

    封装Excel工具类 我们常用的excel工具类,读有xlrd,写有xlwt.有读有写,新一代库有pandas,openpyxl等等. 大家用法都差不多,今天博主就介绍新手最爱,我也爱的xlrd和xl ...

  3. Python Excel工具类封装, 给excel表头搞点颜色

    封装Excel工具类 我们常用的excel工具类,读有xlrd,写有xlwt.有读有写,新一代库有pandas,openpyxl等等. 大家用法都差不多,今天博主就介绍新手最爱,我也爱的xlrd和xl ...

  4. easyPoi导出excel工具类和设置excel导出样式(边框,背景色,字体)

    如有疑问可加easypoi官方群,QQ群号码: 116844390 引入依赖,此样式基于springboot版本.依赖版本如下(maven):<dependency><groupId ...

  5. 原生js绑定事件的方法和dom操作

    1.行内绑定:在标签上写οnclick="事件名" <button onclick="handleClick">Click Me</butto ...

  6. Java写一个excel工具类_Java中Excel写操作工具类--Java免费学习网

    核心提示:package com.common.excel;import com.common.excel.exception.WriteExcelException;import jxl.Workb ...

  7. C# Excel.Range类实现对Excel单元格文本格式的设置

    Excel.Range titleRange_A = newWorksheet.get_Range(newWorksheet.Cells[2, 2], newWorksheet.Cells[2, 2] ...

  8. 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 ...

  9. php 导出excel类,php 导出excel类

    标签: /** * excel导出类 * * 使用方法 $excel=new Excel(); * //设置编码: *$excel->setEncode("utf-8",&q ...

最新文章

  1. php按每小时显示数据,mysql-PHP按某月统计每个小时生成的数据
  2. oracle备份集注册,OracleRMAN将备份集重新注册到控制文件说明
  3. [慢查优化]联表查询注意谁是驱动表 你搞不清楚谁join谁更好时请放手让mysql自行判定...
  4. pso算法c++语言代码,一C++PSO(PSO)算法
  5. Day 02 第二天课时总结
  6. oom 如何避免 高并发_如何设计这样一个高并发系统?
  7. 项目实训第一周(车道线检测)
  8. 多路径配置udev_多路径multipath配置,udev绑定
  9. 吐血推荐珍藏的Chrome插件
  10. 【LeetCode】59. Spiral Matrix II
  11. mysql 优化配置 大批量数据插入_MySQL数据库插入100w条数据要花多久?
  12. MTF直播整合导航网站源码
  13. js获取当前日期yyyymmdd
  14. win10有效清理c盘空间: 移动pagefile.sys和删除hiberfil.sys文件
  15. word修订模式怎么彻底关闭_word修订模式取消不了
  16. Python爬取NBA球员生涯数据及简单可视化
  17. 耿丹CS16-2班第七次作业汇总
  18. Package javax.naming
  19. 红帽子linux硬盘安装教程,XP下硬盘安装RedHat Enterprise Linux 5.5图文教程
  20. 英语语法汇总(9.时态)

热门文章

  1. 基于翻译模型(Trans系列)的知识表示学习
  2. PCIE——第5章——Montevina 的 MCH 和 ICH
  3. 数据库审计系统提供服务器,数据库审计系统通用解决方案
  4. mysql按工作日查询统计优化_工作日计算问题思路和实现
  5. C#窗体应用程序之设置窗体名称和程序图标
  6. 三角形的几何公式大全_2020高中数学必备公式大全
  7. 企业如何管理特权账号?
  8. 牛客 · 奇♂妙拆分
  9. 一个大二渣渣准程序员的感动
  10. FPGA EMMC HS400模式verilog驱动开发