spring 使用 Apache poi 将 csv 转换为 xls/xlsx?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18077264/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 06:08:42  来源:igfitidea点击:

Convert csv to xls/xlsx using Apache poi?

springspring-mvcapache-poixssfpoi-hssf

提问by v0ld3m0rt

I need to convert csv to xls/xlsx in my project? How can i do that? Can anyone post me some examples? I want to do it with Apache poi. I also need to create a cell from java side.

我需要在我的项目中将 csv 转换为 xls/xlsx 吗?我怎样才能做到这一点?任何人都可以给我发一些例子吗?我想用 Apache poi 来做。我还需要从 java 端创建一个单元格。

回答by Sankumarsingh

You can try following method to create xlsx file using apache-poi.

您可以尝试以下方法使用 apache-poi 创建 xlsx 文件。

public static void csvToXLSX() {
    try {
        String csvFileAddress = "test.csv"; //csv file address
        String xlsxFileAddress = "test.xlsx"; //xlsx file address
        XSSFWorkbook workBook = new XSSFWorkbook();
        XSSFSheet sheet = workBook.createSheet("sheet1");
        String currentLine=null;
        int RowNum=0;
        BufferedReader br = new BufferedReader(new FileReader(csvFileAddress));
        while ((currentLine = br.readLine()) != null) {
            String str[] = currentLine.split(",");
            RowNum++;
            XSSFRow currentRow=sheet.createRow(RowNum);
            for(int i=0;i<str.length;i++){
                currentRow.createCell(i).setCellValue(str[i]);
            }
        }

        FileOutputStream fileOutputStream =  new FileOutputStream(xlsxFileAddress);
        workBook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("Done");
    } catch (Exception ex) {
        System.out.println(ex.getMessage()+"Exception in try");
    }
}

回答by sunderam

We can use SXSSF Jar in which we can parse a long file as below:

我们可以使用 SXSSF Jar 来解析一个长文件,如下所示:

public static void main( String[] args ) {
  try {

    //   String fName = args[ 0 ];

    String csvFileAddress = "C:\Users\psingh\Desktop\test\New folder\GenericDealerReport - version6.txt"; //csv file address
    String xlsxFileAddress = "C:\Users\psingh\Desktop\trial\test3.xlsx"; //xlsx file address

    SXSSFWorkbook workBook = new SXSSFWorkbook( 1000 );
    org.apache.poi.ss.usermodel.Sheet sheet = workBook.createSheet( "sheet1" );
    String currentLine = null;
    int RowNum = -1;
    BufferedReader br = new BufferedReader( new FileReader( csvFileAddress ) );
    while ( ( currentLine = br.readLine() ) != null ) {
      String str[] = currentLine.split( "\|" );
      RowNum++;
      Row currentRow = sheet.createRow( RowNum );
      for ( int i = 0; i < str.length; i++ ) {
        currentRow.createCell( i )
                .setCellValue( str[ i ] );
      }
    }
    DateFormat df = new SimpleDateFormat( "yyyy-mm-dd-HHmmss" );
    Date today = Calendar.getInstance()
                       .getTime();
    String reportDate = df.format( today );
    FileOutputStream fileOutputStream = new FileOutputStream( xlsxFileAddress );
    workBook.write( fileOutputStream );
    fileOutputStream.close();
    //System.out.println( "Done" );
  }
  catch ( Exception ex ) {
    System.out.println( ex.getMessage() + "Exception in try" );
  }
}

回答by Superb Saif

I have found SXSSFWorkbookreally faster then XSSFWorkbook. Here is the modified code:

我发现SXSSFWorkbook那时真的快了XSSFWorkbook。这是修改后的代码:

try {
        String csvFileInput = "inputFile.csv";
        String xlsxFileOutput ="outputFile.xls";

        LOGGER.error(csvFileInput);
        LOGGER.error( xlsxFileOutput);
        SXSSFWorkbook workBook = new SXSSFWorkbook();
        Sheet sheet = workBook.createSheet(transformBean.getOutputFileName());
        String currentLine = null;
        int RowNum = 0;
        BufferedReader br = new BufferedReader(new FileReader(csvFileInput));
        while ((currentLine = br.readLine()) != null) {
            String str[] = currentLine.split(",");
            RowNum++;
            Row currentRow = sheet.createRow(RowNum);
            for (int i = 0; i < str.length; i++) {
                currentRow.createCell(i).setCellValue(str[i]);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream(xlsxFileOutput);
        workBook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("Done");
    } catch (Exception ex) {
        System.out.println(ex.getMessage() + "Found Exception");
    }

回答by Harvey

public static void convertCsvToXlsx(String xlsLocation, String csvLocation) throws Exception {
    SXSSFWorkbook workbook = new SXSSFWorkbook();
    SXSSFSheet sheet = workbook.createSheet("Sheet");
    AtomicReference<Integer> row = new AtomicReference<>(0);
    Files.readAllLines(Paths.get(csvLocation)).forEach(line -> {
        Row currentRow = sheet.createRow(row.getAndSet(row.get() + 1));
        String[] nextLine = line.split(",");
        Stream.iterate(0, i -> i + 1).limit(nextLine.length).forEach(i -> {
            currentRow.createCell(i).setCellValue(nextLine[i]);
        });
    });
    FileOutputStream fos = new FileOutputStream(new File(xlsLocation));
    workbook.write(fos);
    fos.flush();
}

回答by Kreedz Zhen

if(new File(newFileName).isFile()) return;
    @SuppressWarnings("resource")
    HSSFWorkbook wb = new HSSFWorkbook();
    Row xlsRow;
    Cell xlsCell;
    HSSFSheet sheet = wb.createSheet("sheet1");
    int rowIndex = 0;
    for(CSVRecord record : CSVFormat.EXCEL.parse(new FileReader(fileName))) {
        xlsRow = sheet.createRow(rowIndex);
        for(int i = 0; i < record.size(); i ++){
            xlsCell = xlsRow.createCell(i);
            xlsCell.setCellValue(record.get(i));
        }
        rowIndex ++;
    }
    FileOutputStream out = new FileOutputStream(newFileName);
    wb.write(out);
    out.close();

回答by Ravi Wadje

Try this one if you have inputstream public static XSSFWorkbook csvToXLSX(InputStream inputStream) throws IOException { XSSFWorkbook workBook = new XSSFWorkbook();

如果你有 inputstream public static XSSFWorkbook csvToXLSX(InputStream inputStream) throws IOException { XSSFWorkbook workBook = new XSSFWorkbook();

    try(BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
        Sheet sheet = workBook.createSheet("sheet1");
        String currentLine=null;
        int rowNum=0;

        while ((currentLine = br.readLine()) != null) {
            String[] str = currentLine.split(",");
            rowNum++;
            Row currentRow=sheet.createRow(rowNum);
            for(int i=0;i<str.length;i++){
                currentRow.createCell(i).setCellValue(str[i]);
            }
        }

        log.info("CSV file converted to the workbook");
        return workBook;
    } catch (Exception ex) {
        log.error("Exception while converting csv to xls {}",ex);
    }finally {
        if (Objects.nonNull(workBook)) {
            workBook.close();
        }
    }
    return workBook;
}