当前位置: 首页 > 知识库问答 >
问题:

为什么我们需要在使用ApachePOI读取Excel文件之前创建工作簿?

勾安翔
2023-03-14

请在下面找到代码片段

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文件时,这意味着我们正在创建工作簿。从那里,我们访问表格,然后是行和列。

我不明白为什么我们写写WorkbookFactory.create(fis);当我们已经有一个'Workbook'我们应该有一些方法来获取我们已经创建的工作簿,就像我们为行(getRow),工作表(getSheet),细胞(getcell)所做的那样。

你能帮我理解POI吗?

共有1个答案

何向荣
2023-03-14

Workbook wb=WorkbookFactory.create(fis);做的是:

从使用文件输入流读取的文件内容实例化实现工作簿的Java对象。之后,工作簿对象就位于内存中。只有在访问了这个工作簿对象之后,我们才能使用它的方法。

如果我们使用Workbook wb=WorkbookFactory。创建(文件),即使用文件而不是输入流,然后WorkbookFactory将直接从该文件创建工作簿对象。这样做的好处是,不必将整个文件内容读入内存。因此,我们有一个较低的内存占用。缺点是,为读取而打开的文件不能同时用于写入。因此,我们不能将使用工作簿方法所做的更改写入我们从中读取工作簿的同一个文件中。

如果内存占用是一个更大的问题,那么对于XSSF(*. xlsx),我们可以获取底层的XML数据,并使用XSSF和SAX(事件应用编程接口)处理它。使用这个,我们不需要实例化一个Workbook对象。相反,我们直接从OPCPackage中读取和解析XML,对于XSSF(*. xlsx),它是一个ZipPackage,因为*. xlsx只是一个ZIP< /code>存档,包含包含XML文件和其他文件的目录结构。

由于*. xlsx只是一个ZIP归档文件,我们也可以将其作为FileSystem从FileSystems获得的文件打开,然后完全独立于第三方库处理其内容。但这将是最具挑战性的方法。

 类似资料:
  • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观

  • 在创建密钥库之前,它需要我创建应用程序Active Directory。我们为什么需要它?它甚至不是我的实际应用程序(即,我没有将我的应用程序上传到Azure,而是只在我的visual studio web应用程序中使用密钥库中的秘密)。我还是不明白那部分。

  • 问题内容: 基数实际上是什么意思?我们为什么需要它? 问题答案: 您可能并不总是希望将整数解析为以10为底的数字,因此提供基数可以指定其他数字系统。 基数是一位数字的值数。十六进制为16。八进制为8,二进制为2,依此类推… 在该函数中,您可以执行一些操作来提示基数而不提供基数。如果用户输入的字符串与其中一个规则匹配,但没有明确规定,则这些方法也可能对您不利。例如:

  • 问题内容: 好的,假设我们有两个表,和。在评论中,我们有一列,它表示哪个用户键入了该特定评论。为什么我们需要将其指定为外键?如果我们不这样做,它将仍然有效。我们指定主键,因为据我所知,它可以使查询速度更快(我们只需要搜索一行,而当我们没有主键/索引时,则必须遍历所有行)。这只是一种良好的编码习惯吗? 问题答案: 使用外键时,您将获得: 数据的完整性 更快的查询。 用户: 用户ID: 1个 2个 3

  • 问题内容: 我一直在研究,发现从2.1开始就可以使用实体图。 但是我还不了解实体图的优点。 我知道使用实体图的优点之一是我们只能在整个实体中指定要获取的数据,但是如果我们要整个实体,还有其他理由使用实体图吗?还是仅在要检索部分数据时才应使用实体图? 当我们使用实体图时,它还有其他目的或优点,我想知道。 问题答案: 在Jpa中,休眠与关联关系一直是性能的问题。 一次又一次地在事务中延迟加载关联会导致

  • 问题内容: Angular应用使用属性而不是事件。 为什么是这样? 问题答案: ng-click包含一个角度表达式。Angular表达式是在Angular 范围的上下文中求值的,该范围绑定到具有ng- click属性的元素或该元素的祖先。 Angular表达式语言不包含流控制语句,也不能声明变量或定义函数。这些限制意味着模板只能访问由控制器或指令提供的变量和运行功能。