2013-08-06 15 views

Odpowiedz

9

Możesz wypróbować następujące metody tworzenia pliku xlsx za pomocą apache-poi.

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

dzięki, ale mój csv to | rozdzielone. kiedy zastępuję przecinek pipi, otrzymuję po jednym znaku na komórkę. co powinienem zrobić?? – v0ld3m0rt

+0

Potwierdź, że użyłeś po prostu "|" lub "\\ |". – Sankumarsingh

+2

rozumiem, użyłem "|" tylko co znaczyło logiczne lub, powinienem był użyć "\\ |". dzięki – v0ld3m0rt

3

Możemy użyć SXSSF Jar, w których możemy analizować długi plik jak poniżej:

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

Znalazłem SXSSFWorkbook naprawdę szybciej niż XSSFWorkbook. Oto zmodyfikowany kod:

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

Spróbuj tego, jeśli masz InputStream public static XSSFWorkbook csvToXLSX (InputStream InputStream) wyrzuca IOException { XSSFWorkbook skoroszyt = 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; 
} 
Powiązane problemy