文件类:如何将excel文件转为csv文件(且保留时间格式)?

最近有个场景,在ftp服务器上,读取csv文件并入库,但是客户提供的一部分文件却是xls文件,就得搞个将excel转为csv文件的方法,话不多说直接开干。

方法

    public static void convertExcelToCSV(String excelFilePath, String csvFilePath) throws IOException {
        FileInputStream inputStream = new FileInputStream(excelFilePath);
        Workbook workbook = getWorkbook(inputStream, excelFilePath);
        inputStream.close();

        FileWriter writer = new FileWriter(csvFilePath);

        for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
            Sheet sheet = workbook.getSheetAt(sheetIndex);
            Iterator<Row> rowIterator = sheet.iterator();

            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                Iterator<Cell> cellIterator = row.cellIterator();
                StringBuilder stringBuilder = new StringBuilder();

                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    stringBuilder.append(getCellValue(cell));
                    if (cellIterator.hasNext()) {
                        stringBuilder.append(",");
                    }
                }

                writer.write(stringBuilder.toString() + "\n");
            }

            if (sheetIndex < workbook.getNumberOfSheets() - 1) {
                writer.write("\n"); // 在不同工作表之间添加一个空行
            }
        }

        writer.flush();
        writer.close();
        workbook.close();
    }

    private static Workbook getWorkbook(FileInputStream inputStream, String excelFilePath) throws IOException {
        Workbook workbook = null;
        if (excelFilePath.endsWith("xlsx")) {
            workbook = new XSSFWorkbook(inputStream);
        } else if (excelFilePath.endsWith("xls")) {
            workbook = new HSSFWorkbook(inputStream);
        } else {
            throw new IllegalArgumentException("The specified file is not an Excel file");
        }
        return workbook;
    }

    private static String getCellValue(Cell cell) {
        //DataFormatter formatter = new DataFormatter();
        String formatPattern = "yyyy-MM-dd HH:mm:ss"; // 自定义日期时间格式
        //FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
        switch (cell.getCellType()) {
            case STRING:
                return cell.getRichStringCellValue().getString();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    Date date = cell.getDateCellValue();
                    DateFormat dateFormat = new SimpleDateFormat(formatPattern);
                    return dateFormat.format(date);
                } else {
                    return Double.toString(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return Boolean.toString(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }

测试

    public static void main(String[] args) {
        String excelFilePath = "D:\\我是excel文件.xlsx";
        String csvFilePath = "D:\\我是csv文件.csv";

        try {
            convertExcelToCSV(excelFilePath, csvFilePath);
            System.out.println("Excel file converted to CSV successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

以上为整合保留时间格式需求的全部代码,亲测非常好用!

相关推荐

  1. 如何csv文件转换为markdown表格

    2024-07-14 17:48:02       35 阅读
  2. 把json文件转换excel格式文件

    2024-07-14 17:48:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 17:48:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 17:48:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 17:48:02       62 阅读
  4. Python语言-面向对象

    2024-07-14 17:48:02       72 阅读

热门阅读

  1. Nmap端口扫描工具

    2024-07-14 17:48:02       23 阅读
  2. 如何设计一个C语言面向结构体的内存数据库

    2024-07-14 17:48:02       21 阅读
  3. NSIS 之 NsDialogs 常见问题解答

    2024-07-14 17:48:02       21 阅读
  4. Nginx配置缺少导致CSS不起作用

    2024-07-14 17:48:02       23 阅读
  5. 抽象代数精解【1】

    2024-07-14 17:48:02       21 阅读
  6. c#协变逆变

    2024-07-14 17:48:02       16 阅读
  7. 【每日一练】python函数与装饰器

    2024-07-14 17:48:02       30 阅读
  8. 27 设备流转使用心得 三

    2024-07-14 17:48:02       27 阅读
  9. 删除矩阵中0所在行 matlab

    2024-07-14 17:48:02       21 阅读
  10. 英文论文审稿2

    2024-07-14 17:48:02       25 阅读