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

Apache POI getRow() 返回 null 且 .createRow 失败

傅涵忍
2023-03-14

我使用Apache POI v3.12有以下问题:我需要使用49行[0…48]的XLSX文件作为模板,用数据填充它的单元格并将其写成不同的文件,这样我就可以再次重用模板。我正在做的大约是这样的:

XSSFWorkbook wbk_template = new XSSFWorkbook(new FileInputStream    (f_wbk_template));
SXSSFWorkbook wbk = new SXSSFWorkbook(wbk_template, 50, true);

Sheet sheet = wbk.getSheet(STR_SHEET_NAME);

/稍后/

Row row = sheet.getRow(rownum);
if (null == row) {
    row = sheet.createRow(rownum);
}

经过调试,getRow()返回null,但是尝试。createRow()失败,原因是:

java.lang.IllegalArgumentException: Attempting to write a row[2] in the range [0,48] that is already written to disk.
    at org.apache.poi.xssf.streaming.SXSSFSheet.createRow(SXSSFSheet.java:122)
...

我在这里错过了什么吗?据我在 Apache 文档和论坛中读到的,如果 getRow() 返回 null,我需要创建 row()。工作表不包含任何符合 .getPhysicalRows()、.getFirstRowNum() 和 .getLastRowNum() 的行

谢谢。

共有3个答案

穆高澹
2023-03-14
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(exportExcelTo));
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook, -1, Boolean.FALSE, Boolean.TRUE);
幸乐湛
2023-03-14

如果您想读取或编辑存在的行,您可以首先在xssf类型中执行,然后在xssf文件上创建sxssf文件库。
代码如下…

XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));

//do the read and edit operation with xssf......
......
......

SXSSFWorkbook sXSSFbook = new SXSSFWorkbook(xssfWorkbook); 

//do the write operation with sxssf......
......
......
齐建安
2023-03-14

请参阅以XSSFWorkbook为参数的SXSSFWorkbook构造函数的文档。不能覆盖或访问模板文件中的初始行。您正在尝试覆盖现有行,但API不支持此操作。您的异常消息反映了这一点。

https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html#SXSSFWorkbook(org.apache.poi.xssf.usermodel.XSSFWorkbook)

对于您的用例,您可能想尝试http://jxls.sourceforge.net.

 类似资料:
  • 我正在尝试使用数据库的第一个图像设置ImageView。由于某种原因,它不起作用,我不知道为什么。方法loadImage在不同的类中调用。 我还试着用一个单独的方法设置图像,但我需要在创建整个舞台场景等的同时调用它,即使从第二个方法那样调用它,它也不起作用。 这是持有setImage的类 当调用时,设置图像会给我一个null值,imageview的默认值为null,但实际上我正在加载一个图像,甚至

  • 我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。 适配器: 第一项活动: 第二项活动: 错误: 我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null

  • 问题内容: 我正在使用Servlets&Struts2的混合情况下工作。 我正在调用HTTPServlet,并且正在处理数据。 然后,我需要调用struts API在DB中插入数据。 在那我也使用HTTPSession。 所以我打电话 要获取HttpRequest,然后在该struts动作类中进行会话。 Servlet正在调用Struts Action类。 但 始终返回NULL。 是因为它没有被网

  • 问题内容: 我使用osgi + cdi,并且有以下代码: 而且我有以下tasklist.fxml 但是parent.lookup(“#testComboBox”)返回null。怎么解释呢?我已经多次检查ID的名称。 问题答案: 您可以将所需的逻辑放入控制器类中,而不必使用仅在渲染场景之后才能使用的查找。您可以通过注释将元素从FXML文件注入到控制器类中。 查询通常不可靠,我建议避免使用它们。如果您

  • 问题内容: 这是我的课程正在测试: 现在我要模拟第1和2行,并返回模拟HttpResponse和代码。 我已经尝试过但是失败了: 始终返回null。我希望它返回的模拟对象。我已经阅读了与此错误相关的其他帖子,但不确定该如何处理。有人可以帮忙吗? 问题答案: 代替 你应该使用 您的测试中还存在一些问题:模拟构造函数不正确,并且根本不需要httpResponse。 更新 此代码对我而言正常工作:

  • 问题内容: 我知道这听起来很蠢,但是当我使用 它输出NULL。我在Ubuntu 12.04 64位环境中使用MySQL Workbench,它可以在其他笔记本电脑/操作系统中使用(也使用MySQL Workbench)。 问题答案: 如果您尚未将时区表加载到mysql中,则会发生这种情况。