2017-08-09 57 views
0

apache poiを使用してExcelファイルでページレイアウトを設定しようとしています。私は次のコードを使用しています:XSSFSheetのApache poi setページレイアウト

FileInputStream fs = new FileInputStream("Test.xlsx"); 
    xssfWorkbook = new XSSFWorkbook(fs); 
    XSSFSheet sheet = xssfWorkbook.getSheetAt(0); 
    CTSheetView view = sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0); 
    view.setView(STSheetViewType.PAGE_LAYOUT); 

私は新しいシートを作成し、その上で関数を呼び出すとうまく動作します。ただし、既存のExcelファイルを開いて、ページレイアウトですべてのシートを設定しようとすると、例外が発生します。そのため、sheet.getCTWorksheet()。getSheetViews()はnullを返します。どのように既存のExcelファイルのページレイアウトを達成するには?私は大いに助けていただければ幸いです。前もって感謝します。

+1

これは奇妙です。各シートにはシートビュー設定が必要です。しかし、あなたは 'null'を取得したかどうか、そして適切な' addNew ... 'メソッドを使用しているかどうかを調べることができます。 [CTWorksheet.addNewSheetViews](http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/ooxml-schemas/1.1/org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorksheet)。 java#CTWorksheet.addNewSheetViews%28%29)と[CTSheetViews.addNewSheetView](http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/ooxml-schemas/1.1/org/openxmlformats /schemas/spreadsheetml/x2006/main/CTSheetViews.java#CTSheetViews.addNewSheetView%28%29)。 –

+0

@AxelRichterあなたの提案によると、今すぐ 'if(sheet.getCTWorksheet()。getSheetViews()== null){sheet.getCTWorksheet()。addNewSheetViews()。addNewSheetView();を追加しました。 } '' CTSheetView'にアクセスする直前です。今、 'xssfWorkbook.write(outputStream)'を呼んで新しいExcelファイルを保存すると、ファイルが壊れています。助言がありますか? – Masum

+0

シートにはシートがないというのは奇妙なことです。 'Test.xlsx'はどこから来たのですか?解凍して、 '/ xl/worksheets/sheet1.xml'を見ましたか?そこに 'XML'の上部がどのように見えますか?あなたの質問に ' 'まで表示してください。 –

答えて

0

基本的にはCTSheetViewがない場合は追加し、WorkbookViewIdも設定する必要があります。変更されたコードは以下の通りです:

CTSheetView view; 
    if(sheet.getCTWorksheet().getSheetViews() == null){ 
     sheet.getCTWorksheet().addNewSheetViews().addNewSheetView(); 
     view = sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0); 
     view.setWorkbookViewId((long)0); 
    } 
    else { 
     view = sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0); 
    } 
    view.setView(STSheetViewType.PAGE_LAYOUT); 

ありがとうアクセルリヒター。