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);

b66d0c2b1ca54f00865816daf9fd704e.png

如图可以看到方法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");


//将输入流传入Workbook

Workbook 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个sheet

           Sheet sheet0=workBook.createSheet("2022年度报表");

           Sheet sheet1=workBook.createSheet("2021年度报表");

           Sheet sheet2=workBook.createSheet("2020年度报表");
   
           //在sheet0中创建数据行row

           Row 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

8872fad295bc4b20b81959500dc8cf39.png

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是很快的。

 

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值