如何使用 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 许可证,因此它应该适用于您选择使用它做的任何事情。
或者只是使用split
Java 中的函数并将 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 文件读入一个数组,然后使用上述语法将其放在工作表上。
斯坦·斯科特