Java使用JavaCSV把CSV流转成Apache POI的EXCEL格式

需求

由于Apache POI不支持CSV格式的文件读取,所以需要在Java程序中手动转一下格式

Maven依赖

Apache POI:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<properties>
<poi.version>3.9</poi.version>
<poi-ooxml.version>3.9</poi-ooxml.version>
</properties>

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi-ooxml.version}</version>
</dependency>

JavaCSV:
1
2
3
4
5
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>

转换方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* csv格式的流转成xls格式的workbook
*/
public static Workbook getWorkbookByCsv(InputStream inputStream) throws IOException {

ArrayList<String[]> dataList = new ArrayList<>();

// 文件的编码,这里设为GB2312
CsvReader reader = new CsvReader(inputStream, ',', Charset.forName("GB2312"));

while (reader.readRecord()) {
dataList.add(reader.getValues());
}
reader.close();

HSSFWorkbook result = new HSSFWorkbook();
HSSFSheet sheet = result.createSheet("new sheet");

for (int rowNum = 0; rowNum < dataList.size(); rowNum++) {
String[] data = dataList.get(rowNum);
HSSFRow row = sheet.createRow(rowNum);
for (int columnNum = 0; columnNum < data.length; columnNum++) {
HSSFCell cell = row.createCell(columnNum);
cell.setCellValue(data[columnNum]);
}
}
return result;
}
  • 注意: 不同的CSV文件编码不同,如果乱码可以改上边的编码
文章目录
  1. 1. 需求
    1. 1.1. Maven依赖
    2. 1.2. 转换方法