作者:ke天天_809 | 来源:互联网 | 2023-01-22 20:33
请在下面找到一个代码片段
public class DataDriven_GetDataExcel {
public static void main(String[] args) throws IOException, EncryptedDocumentException, InvalidFormatException {
//1 Getting Control over File
FileInputStream fis = new FileInputStream("C:\\Users\\bewosaurabh\\Documents\\GetDataFile.xlsx");
//2 Creating a Workbook
Workbook wb = WorkbookFactory.create(fis);
//3 Getting Control over Sheet
Sheet sh = wb.getSheet("Sheet1");
.
......
我不明白的是为什么我们需要在读取Excel文件之前创建工作簿?Excel文件也称为工作簿(如下图所示)。
当我们创建一个excel文件时,这意味着我们正在创建一个工作簿。从那里,我们访问表格,然后是行和列。
我不明白为什么我们WorkbookFactory.create(fis);
已经有一个“工作簿”时为什么要写写。我们应该有一些方法来获取已创建的工作簿,就像对Rows(getRow),Sheets(getSheet),Cells(getCell)一样。
你能帮我理解POI吗?
1> Axel Richter..:
什么Workbook wb = WorkbookFactory.create(fis);
是:
从使用文件输入流读取的文件内容中实例化一个Java
实现Workbook的对象。之后,将Workbook
对象放置在内存中。而且只有在访问该Workbook
对象之后,我们才能使用其方法。
如果使用Workbook wb = WorkbookFactory.create(file);
,File
而不是使用InputStream
,则WorkbookFactory
将会Workbook
直接从文件创建对象。这样做的好处是不必将整个文件内容都读入内存。因此,我们的内存占用量较低。缺点是打开供读取的文件不能同时用于写入。因此,我们无法将使用的方法所做的更改写入Workbook
我们从中读取的文件中Workbook
。
如果内存占用是一个更大的问题,那么对于XSSF(*.xlsx
),我们可以获取底层XML数据并使用XSSF和SAX(事件API)对其进行处理。使用此方法,我们无需实例化Workbook
对象。相反,在XSSF()的情况下,我们XML
直接从读取并解析,因为a 只是一个包含目录结构的存档,该目录结构包含文件和其他文件。OPCPackage
ZipPackage
*.xlsx
*.xlsx
ZIP
XML
由于*.xlsx
仅仅是一个ZIP
存档我们还可以打开它的文件系统从得到的文件系统,然后再处理它的内容完全独立的第三方库。但这将是最具挑战性的方法。