2017-07-11 6 views
0

Jakarta Poiを使用して、Excel/Officeで開くことができるJavaから.xlsxファイルを作成しています。いくつかのセルは複数の値を表し、元々はヌルに区切られています。たとえば、セルに設定すると 'fred/u000/tom'となります。ヌル文字を '\ n'で置き換えます。Apache PoiでOpenOfficeだけでなくMS Excelで正しく表示されるように多値表計算セルを作成するには

これはすべてOpenOfficeでうまくいきます。複数の行に対応するためにこれらの行の高さ。しかし、私はOpenOfficeがxlsx形式からxls形式でファイルを開くのにかなり長い時間を要していたので、Microsoft Excelに投資したので、すべての値が同じファイルがすべて1行に表示されていました。

Open Office

MS Excel

あなたが編集に行けば値はExcelが複数の値を収容するために、高さを増すが、なぜそれが読み取りでそれを行うことはありません。

MS Excel Edit スプレッドシートを編集する必要はありませんので、私は「\ n」は、ファイルを表示するには、Excelを強制的にいくつかのオプションのOpenOffice

よう

コードエキス

private void addFieldValue(Session session, Worksheet sheet, Row r, int spreadsheetIndex, SongFieldNameColumnWidth sfncw, SongChanges fieldChanges, Song song) 
{ 
    SongFieldName songFieldName = sfncw.getSongFieldName(); 
    String   value = ""; 
    org.apache.poi.ss.usermodel.Cell c ; 
    c=r.createCell(spreadsheetIndex); 

    //Chnanges have been made to this field 
    if(fieldChanges!=null) 
    { 
     if (changeType == SongChangeType.ADD) 
     { 
      value = fieldChanges.getNewValue().replace('\u0000', '\n'); 
      c.setCellValue(value); 
      c.setCellStyle(fieldAddedStyle); 

     } 
     else if (changeType == SongChangeType.EDIT) 
     { 
      value = fieldChanges.getNewValue().replace('\u0000', '\n'); 
      c.setCellValue(value); 
      c.setCellStyle(fieldChangedStyle); 
      //addCellComment(r, c, sheet, fieldChanges.getOriginalValue()); 
     } 
     else if (changeType == SongChangeType.DELETE) 
     { 
      c.setCellStyle(fieldDeletedStyle); 
     } 
    } 
    sfncw.setColumnWidthFromValue(value); 
} 
の代わりに使用することができる何か他のものがあります
+0

あなたの世代のコードを見てなければ、我々はあなたの間違いを見ることができるという希望をたくさん持っていない... – Gagravarr

+0

@Gagravarr私は今いくつかのコードを追加しましたが、実際に私はすでに質問にデータを設定していた方法を説明しました。 –

+0

Excelに表示する値を入力し、Apache POIからその値を読み込んだ場合、POIはセルの値をどのように見ていますか?たぶん '\ r'か' \ r \ n'ですか? – Gagravarr

答えて

2

あなたのコードから間違っていることは明らかではありませんが、私のコメントで述べたように、setWrapTextは、行の折り返しを持つセルの場合はCellStyleにtrueに設定する必要があります。

例:

import java.io.FileOutputStream; 

import org.apache.poi.ss.usermodel.*; 

import org.apache.poi.xssf.usermodel.XSSFWorkbook; 


public class CreateExcelCellWrapText { 

public static void main(String[] args) throws Exception { 
    XSSFWorkbook workbook = new XSSFWorkbook(); 

    Sheet sheet = workbook.createSheet(); 
    Row row = sheet.createRow(0); 

    CellStyle cellstyle = workbook.createCellStyle(); 
    cellstyle.setWrapText(true); 

    Cell cell = row.createCell(0); 
    cell.setCellValue("String cell content\nhaving line wrap."); 
    cell.setCellStyle(cellstyle); 

    sheet.autoSizeColumn(0); 

    workbook.write(new FileOutputStream("CreateExcelCellWrapText.xlsx")); 
    workbook.close(); 
} 
} 

結果:

enter image description here

+0

sheet.autoSizeColumn(0); –

+0

ああ、申し訳ありませんが私の部分で間違って、コードは変更されていないフィールドを表示しません変更されていないフィールドはcellstyleを持っていなかったと私はすべてのフィールドが変更されなかったので、私はそれが今、うまく動作することを確認することができます。 –

関連する問題