2013-08-06 125 views

回答

9

您可以尝试使用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"); 
    } 
} 
+0

谢谢,但我的csv是|分隔。当我用pipi替换逗号时,每个单元格都会得到一个字符。我该怎么办?? – v0ld3m0rt

+0

请确认您使用的是简单的“|”或“\\ |”。 – Sankumarsingh

+2

明白了,我在用“|”只有这意味着逻辑或,我应该使用“\\ |”。谢谢 – v0ld3m0rt

3

我们可以使用SXSSF罐中,我们可以分析如下长文件:

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"); 
    } 
} 
2

我发现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"); 
    } 
0
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(); 
0

试试这一个,如果你有InputStream的 公共静态XSSFWorkbook csvToXLSX(InputStream中的inputStream)抛出IOException异常{ XSSFWorkbook工作簿=新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; 
} 
相关问题