14

如何使用 Apache POI 高效导入 CSV 数据?如果我有一个非常大的 CSV 文件要存储在我的 Excel 电子表格中,那么我不认为逐个单元格是导入的最佳方式......?

4

4 回答 4

16

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 将数组加载到其中。

于 2009-07-06T16:42:47.737 回答
2

对 CSV 文件使用 apache commons-csv。使用以下依赖项更新您的 pom.xml

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>

您可以从中找到有用的好例子 -点击这里

于 2018-03-15T11:05:07.603 回答
1

我们根据文件扩展名编写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>
于 2018-07-27T06:07:57.657 回答
0

向 Excel 电子表格添加信息的最有效方法是使用数组。这段代码:

Sheets(1).Range("A1").Resize(uBound(myArray),uBound(myArray,2)).Value = myArray

从二维数组填充工作表范围,其中下限为 1。

在您的情况下,我会先将 CSV 文件读入一个数组,然后使用上述语法将其放在工作表上。

斯坦·斯科特

于 2009-04-07T14:12:36.937 回答