【发布时间】:2010-10-17 20:04:49
【问题描述】:
如何使用 Apache POI 高效导入 CSV 数据?如果我想将一个非常大的 CSV 文件存储在我的 Excel 电子表格中,那么我认为逐个单元格导入不是最好的方式...?
【问题讨论】:
标签: java excel csv apache-poi
如何使用 Apache POI 高效导入 CSV 数据?如果我想将一个非常大的 CSV 文件存储在我的 Excel 电子表格中,那么我认为逐个单元格导入不是最好的方式...?
【问题讨论】:
标签: java excel csv apache-poi
Apache POI 从未设计为调用 CSV 文件。虽然可以在 Excel 中打开 CSV 文件,但 Excel 有自己的自动导入阅读器。这是假设您的 CSV 具有 .csv 而不是 .txt 后缀。如果它具有.txt 后缀,请将其另存为.csv. 然后您只需右键单击 CSV 并使用 Excel 打开。 Presto,CSV 已导入 Excel。
我假设您希望将 txt 文件中的数据解析为 Excel 文件。如果是这种情况,我建议您使用像 SuperCSV 这样的库,而不是试图让 POI 做一些它从未设计过的事情。它会在解析数据时将其全部加载到您选择的 Bean、Map 或 List 中,然后您可以以您选择的格式将其写回 .csv 文件或使用 JDBC-ODBC Bridge 或 Apache POI直接写成.XLS格式。添加一个额外的步骤,但您可以完全控制数据。
SuperCSV 带有 Apache2 许可证,因此它应该适用于您选择使用它做的任何事情。
或者只使用 Java 中的 split 函数并将 CSV 解析为数组,然后使用 POI 将数组加载到 .xls。
【讨论】:
对 CSV 文件使用 apache commons-csv。使用以下依赖项更新您的 pom.xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.5</version>
</dependency>
您可以从 - click here 找到有用的好例子
【讨论】:
我们根据文件扩展名编写java代码。这里我们处理 .csv 扩展名,这里是处理它的 Apache POI 代码。我们将内容拆分并存储在 Array 中,然后下线使用。
CSVParser parser = new CSVParser(new FileReader("D:/your_file.csv"), CSVFormat.DEFAULT);
List<CSVRecord> list = parser.getRecords();
for (CSVRecord record : list) {
String[] arr = new String[record.size()];
int i = 0;
for (String str : rec) {
arr[i++] = str;
}
}
parser.close();
相关的Maven依赖:
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.2</version>
</dependency>
【讨论】:
向 Excel 电子表格添加信息的最有效方法是使用数组。这段代码:
Sheets(1).Range("A1").Resize(uBound(myArray),uBound(myArray,2)).Value = myArray
从一个二维数组填充工作表范围,其中下限为 1。
在您的情况下,我会先将 CSV 文件读入一个数组,然后使用上述语法将其放在工作表上。
斯坦·斯科特
【讨论】: