我使用以下api将excel中的数据读取为一个表:https://jtablesaw.github.io/tablesaw/gettingstarted
守则如下:
XlsxReader reader = new XlsxReader();
XlsxReadOptions options = XlsxReadOptions.builder("excel/file_example_XLSX_10.xlsx").build();
try {
tab = reader.read(options);
// System.out.println(tab.print());
} catch (Exception e) {
e.printStackTrace();
}文件file_example_XLSX_10.xlsx的大小约为120 mb,我正在获取OutOfMemoryError。
有没有办法让我只从文件中读取特定的列。
发布于 2020-06-18 09:52:25
我不认为有一种方法只读取某些列,您是否尝试过使用Apache来读取excel?还是在运行时增加内存?
发布于 2020-06-19 13:38:06
我不太熟悉Excel文件的读取,但是如果您可以将其导出为一个或多个CSV,下面是几点需要注意的内容:
1)您可以以最小化内存使用的方式读取文件。为了方便起见,表不使用最小的数字类型。它默认为int和double。您可以指定它尝试使用较少的内存,以便在给定数据合适的情况下使用短内存或浮点数。
Table t = Table.read()
.csv(CsvReadOptions.builder("../myfile.csv")
.minimizeColumnSizes()
);这可能也适用于Excel,因为它是在ReadOptions中定义的,而不是更具体的CsvReadOptions。
2)另外,对于CSV,您可以指定一个ColumnTypes数组,其中一个可以是ColumnType.SKIP,这也可以使用CsvReadOptions完成。
至少对于一个典型的桌面应用程序来说,150 at并不太大。我昨天读取了800 in的文件,没有问题,也没有触及IDEA中的JVM内存设置。OTOH,我不是最新版本的所以YMMV。
https://stackoverflow.com/questions/62447105
复制相似问题