如何使用 Apache POI 高效导入 CSV 数据?如果我有一个非常大的 CSV 文件要存储在我的 Excel 电子表格中,那么我不认为逐个单元格是导入的最佳方式......?
4 回答
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 许可证,因此它应该适用于您选择使用它做的任何事情。
或者只是使用splitJava 中的函数并将 CSV 解析为数组并.xls使用 POI 将数组加载到其中。
对 CSV 文件使用 apache commons-csv。使用以下依赖项更新您的 pom.xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.5</version>
</dependency>
您可以从中找到有用的好例子 -点击这里
我们根据文件扩展名编写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 文件读入一个数组,然后使用上述语法将其放在工作表上。
斯坦·斯科特