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

为什么java的saveSpreadsheetRecords方法限制在65535行写一个xls文件?

魏臻
2023-03-14

我正在实现以下片段代码以在Spring应用程序中的浏览器中导出xls文件:

@RequestMapping(method = RequestMethod.POST, value = ResourcesPath.EXCEL,
        consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@ResponseStatus(HttpStatus.OK)
public void loadExcel(ReportFilter filter, HttpServletResponse response) throws
        IOException {

    List<ReportItemVO> result = // list of ReportItemVO ...
    Date today = new Date();
    response.addHeader("Content-Disposition", "attachment; filename=today.getTime() + ".xls");

    BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
    xlsExportService.saveSpreadsheetRecords(ReportItemVO.class, result, outputStream);

    outputStream.flush();
    outputStream.close();
}

public interface XlsExportService extends SpreadsheetService {
}
@Autowired
private XlsExportService xlsExportService;

在这里,导出result.size()的数据时一切正常

我发现 saveSpreadsheetRecords 使用 HSSFSheet,它限制在 65535 行中,并且我需要使用 XSSHSheet,但我没有找到任何线索来使用它(ReportItemVO.class,result,outputStream)作为输入。

有什么想法吗?

共有2个答案

阎庆
2023-03-14

在XLS的旧Excel格式中,最大行数为65535:请参见。

尝试以XLSX格式保存,最多可保存1048576行。

姜松
2023-03-14

您应该实现SpreedsheetService而不是扩展它

@Component
public class XlsExportService implements SpreedsheetService {

}

然后您可以填写使用XSSFSheet而不是HSSFSheet的方法

 类似资料:
  • 当隐藏一个静态字段时,没有限制字段在子类中的访问级别,它甚至可以是非静态的和其他数据类型的。

  • 问题内容: 因此,我正在处理在Websphere 7(JDK 6)上运行的旧servlet代码。开发环境设置使用Tomcat 6(JDK 6)。 为什么它在Websphere 7上而不在Tomcat 6上可以工作? 这与应用程序服务器有关吗? 如果您的回答为“是”,则为“否”。2,除了分解代码或使用动态包含之外,您在Tomcat 6(JDK 6)上是否有解决方法? 该计划与将静态包含更改为动态包含

  • 与HTTP不同,websocket在从HTTP升级后保持长时间连接。 即使操作系统被调优为使用所有端口,总共仍然只有65536个端口。NGINX有可能超过这个限制吗? 一个潜在的解决方案是,但是它缺少文档--至少我没有找到除了下面这段

  • 我对在我想要克隆对象的类中重写克隆方法感到困惑。 因为Java中的每个类都是从Object扩展而来的,所以它应该有clone方法,但是我们仍然被迫重写clone。为什么要求? 另外,我在一些地方阅读了重写克隆对象并将其公之于众的内容。我想知道,为什么会这样? 欢迎提供所有答案。

  • 所以我需要使用Java Dijkstra算法。我在这里找到了Dijkstra的一个有效例子。但在我的例子中,我有大约5000个顶点。我得到了一个错误:main方法(String[])的代码超过了65535字节的限制。在stackoverflow上有一些类似的主题,但我找不到如何解决这个问题的实现。有人能给我一些代码来解决这个问题吗。。 编辑 我试图从MySQL表中获取数据,但在声明vertex时遇

  • 当我们不知道任何给定对象的finalize()方法何时可以运行时,我们需要在java中重写finalize()方法的哪里?我们可以在finalize()中关闭什么类型的资源?GC调用finalize()方法的最佳机会是什么?