杰瑞科技汇

Java如何将CSV文件转换为XLS格式?

Java CSV 转 XLS 实现

在 Java 中将 CSV 文件转换为 XLS (Excel 97-2003 格式) 文件,可以使用 Apache POI 库,以下是完整的实现步骤和代码示例。

添加依赖

确保你的项目中包含 Apache POI 依赖,如果你使用 Maven,在 pom.xml 中添加:

<dependencies>
    <!-- Apache POI for Excel operations -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
</dependencies>

CSV 转 XLS 实现代码

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class CsvToXlsConverter {
    public static void convertCsvToXls(String csvFilePath, String xlsFilePath) throws IOException {
        // 1. 创建新的 Excel 工作簿
        Workbook workbook = new HSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        // 2. 读取 CSV 文件
        try (BufferedReader br = new BufferedReader(new InputStreamReader(
                new FileInputStream(csvFilePath), StandardCharsets.UTF_8))) {
            String line;
            int rowNum = 0;
            // 3. 逐行处理 CSV 数据
            while ((line = br.readLine()) != null) {
                String[] values = line.split(",");
                Row row = sheet.createRow(rowNum++);
                for (int i = 0; i < values.length; i++) {
                    Cell cell = row.createCell(i);
                    cell.setCellValue(values[i]);
                }
            }
        }
        // 4. 自动调整列宽
        for (int i = 0; i < sheet.getRow(0).getPhysicalNumberOfCells(); i++) {
            sheet.autoSizeColumn(i);
        }
        // 5. 写入 XLS 文件
        try (FileOutputStream fos = new FileOutputStream(xlsFilePath)) {
            workbook.write(fos);
        }
        // 6. 关闭工作簿
        workbook.close();
    }
    public static void main(String[] args) {
        String csvFile = "input.csv";
        String xlsFile = "output.xls";
        try {
            convertCsvToXls(csvFile, xlsFile);
            System.out.println("CSV 文件已成功转换为 XLS 文件: " + xlsFile);
        } catch (IOException e) {
            System.err.println("转换过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

代码说明

  1. 创建 Excel 工作簿:使用 HSSFWorkbook 创建一个 Excel 97-2003 格式的工作簿。
  2. 读取 CSV 文件:使用 BufferedReader 逐行读取 CSV 文件。
  3. 处理 CSV 数据
    • 使用 split(",") 分割每行的 CSV 数据
    • 为每个值创建 Excel 单元格
  4. 格式调整

    自动调整列宽以适应内容

  5. 写入文件:将工作簿写入输出文件
  6. 资源清理:确保所有流和资源正确关闭

高级功能扩展

如果需要更复杂的功能,可以考虑以下扩展:

处理包含逗号的 CSV 字段

CSV 文件中的字段可能包含逗号(用引号括起来),可以使用正则表达式改进分割逻辑:

String[] values = line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

设置单元格样式

// 创建单元格样式
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
// 应用样式到单元格
Cell cell = row.createCell(0);
cell.setCellValue("Header");
cell.setCellStyle(style);

处理大文件

对于非常大的 CSV 文件,可以考虑使用 SXSSFWorkbook (流式 API) 来避免内存问题:

// 替换 HSSFWorkbook 为 SXSSFWorkbook
Workbook workbook = new SXSSFWorkbook(100); // 在内存中保留100行

注意事项

  1. 编码问题:确保 CSV 文件使用正确的编码(如 UTF-8)读取
  2. 路径问题:处理文件路径时注意跨平台兼容性
  3. 内存使用:对于非常大的文件,考虑分批处理或使用流式 API
  4. 异常处理:添加适当的异常处理以确保程序健壮性

代码提供了基本的 CSV 转 XLS 功能,你可以根据实际需求进行扩展和优化。

分享:
扫描分享到社交APP
上一篇
下一篇