2016-09-15 2 views
0

hereから受け入れられた回答を使用しています。基本的に、私は.XLSXするcsvファイルを変換しています、その溶液は、バッファリーダーを使用して、1行の中に、個々の細胞のすべてを引っ張るように見えますし、次に使用する:CSVをXLSXに変換しようとしましたが、間違ったカンマで列が分割されています

String str[] = currentLine.split(","); 

...文字列が別々に分割され各列の配列の一部。私の問題は、私のデータの中にはコンマがあるので、アルゴリズムが混乱して、必要以上に多くの列を作成して、文章を別の列に分割して実際にはうまくいきません。おそらく文章を分割する別の方法はありますか?私はうまくいけば別の一意の文字(おそらく|?)を使用して文字列を分割したいと思いますが、私はどのようにbufferedreaderによって提供されるコンマを置き換えるか分からない。どんな助けも素晴らしいだろう。コード私は参照のために以下を使用しています:

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

これは、 'RowNum'ではなく' rowNum'を意味します。 'String [] str'はむしろString str [] 'より[JLS 7](http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf)を参照してください。 –

+0

使用されている慣例は、受け入れられた回答にありましたが、感謝しています。 – jimjamian

答えて

0

まあ、CSVはカンマで区切られた行のテキストファイル以外のものです。

たとえば、CSVの一部のフィールドは引用できます。これはカンマが1つのフィールド内でエスケープされる方法です。

引用符も二重引用符で囲みます。

また、1つのCSV行内に改行がある可能性もあります。また、改行も引用符で囲む必要があります。

したがって、要約するために、CSV線

1,"2,3","4 
5",6,7,"""" 

は "7"、 "6"、 "N5 \ 4" "1"、 "2,3" の配列に解析されるべきです、 "\" "(これはCSVテーブルの1行です)。

ご覧のとおり、すべての行をカンマで区切っても意味がありません。 http://www.liquibase.org/javadoc/liquibase/util/csv/opencsv/CSVReader.htmlはうまく動作します

+0

さて、私はこのライブラリを使用しようとしていますが、この問題を回避することが明らかになっているかどうかはわかりません。私はすべてを読むことができますが、列を正しく生成するためには、コンマをエスケープして他のものを考慮する方法を見つける必要があります。問題を回避するためにライブラリで何ができるのですか? – jimjamian

関連する問題