シートに対する各操作について説明をします。
シートに対する各操作について説明をします。
シートの新規作成
→ サンプルソース( Sample_04_01.java )
ワークブックにシートを新規作成して追加するには、XSSFWorkbookクラスの
createSheetメソッドを使用します。
記述
XSSFWorkbook wb = new Workbook( );
XSSFSheet sheet = wb.createSheet( );
なお呼び出し時に引数としてシート名を設定することができます。
記述
XSSFSheet sheet = wb.createSheet( "sheet01" );
シート名は全角文字でも問題なく使用することができます。
記述
XSSFSheet sheet = wb.createSheet( "シート01" );
作成済みのシートを読み込み
→ サンプルソース( Sample_04_02.java )
作成済みのシートを読み込むには、XSSFWorkbookクラスのgetSheetメソッド
を使用します。
記述
InputStream in = new FileInputStream( "sampleRead.xlsx" );
XSSFWorkbook wb = ( XSSFWorkbook ) WorkbookFactory.create( in );
XSSFSheet sheet = wb.getSheet( "sheet01" );
なお引数には読み込みたいシート名を渡します。またシート名ではなく、インデ
ックスを引数とする方法もあります。
記述
XSSFSheet sheet = wb.getSheetAt( 1 );
getSheetAtメソッドならば、引数にインデックスを渡すことで○番目のシートと
いった形で作成済みのシートを読み込むことができます。
なお、インデックスはワークブック内シートの並びに沿って0から順に割り当て
られます。ワークブックをExcelで開いたときにウィンドウ下部に表示されるタ
ブの中で一番左のタブのシートの0番として以降右方向に1ずつインデックスが
増えていきます。
作成済みのシートの複製
→ サンプルソース( Sample_04_03.java )
すでにワークブックに存在するシートを複製し、新たなシートとして追加するに
はWorkbookクラスのcloneSheetメソッドを使用します。
InputStream in = new FileInputStream( "sampleRead.xlsx" );
XSSFWorkbook wb = ( XSSFWorkbook ) WorkbookFactory.create( in );
XSSFSheet sheet1 = wb.getSheet( "sheet01" );
XSSFSheet sheet2 = wb.cloneSheet( 0 );
引数には複製するシートのインデックスを渡します。複製したシートは最後尾に
追加されます。
シート名の設定
→ サンプルソース( Sample_04_04.java )
シート名を設定するときは、XSSFWorkbookクラスのsetSheetNameメソッドを
使用します。
InputStream in = new FileInputStream( "sampleRead.xlsx" );
XSSFWorkbook wb = ( XSSFWorkbook ) WorkbookFactory.create( in );
wb.setSheetName( 0, "Sample" );
引数は変更するシートのインデックスと変更後のシート名の2つです。なお変更後
のシート名は全角文字も使用可能です。
記述
wb.setSheetName( 1, "サンプル" );
ただし全半角問わず31文字までしか入力できず、「 / ¥ ? * [ ] 」などの記号も
使用できません。
シートの並び順の変更
→ サンプルソース( Sample_04_06.java )
ワークブック内でのシートの並び順を変更するには、WorkbookクラスのsetSh
eetOrderメソッドを使用します。
InputStream in = new FileInputStream( "sampleRead.xlsx" );
XSSFWorkbook wb = ( XSSFWorkbook ) WorkbookFactory.create( in );
wb.setSheetOrder("sheet03", 0);
上記はワークブックと3つのシートを新規作成した後、「sheet03」をインデッ
クス0番に挿入するサンプルです。setSheetOrderの引数は、並び順を変更した
いシート名と挿入したい場所の2つです。なお、○番目のシートを○番目に変更
したいというときは
記述
wb.setSheetOrder( getSheetName( 2 ), 0 )
というように、getSheetNameメソッドを使用します。このメソッドは指定し
たインデックスのシート名を返すので、これで変更したい順番のシート名を取得
するのです。
指定列の幅設定
→ サンプルソース( Sample_04_07.java )
指定列の幅を設定するには、XSSFSheetクラスのsetColumnWidthメソッドを使
用します。
XSSFWorkbook wb = new Workbook( );
XSSFSheet sheet = wb.createSheet( "sheet01" );
sheet.setColumnWidth( 0, 2048 );
引数には設定する列番号と幅を渡します。列番号は再左列が0で右方向に1ずつ増
えていきます。幅の単位は32分の1ピクセルとなっています。半角1文字に必要
なピクセル数は13で以降1文字につき8ピクセルずつ増えていきます。
文字数 | ピクセル数 | 設定値 |
---|---|---|
1 | 13 | 416 |
2 | 21 | 672 |
3 | 29 | 928 |
4 | 37 | 1184 |
文字式で表現すると以下のようになります。
x = 32 * ( 8n + 5 ) xが設定値でnが表示したい文字数です。
他サイトでは単位が256分の1文字幅という情報もありますが、実際に
記述
sheet.setColumnWidth( 0, 1024 );
というサンプルを実行してみると、結果は以下のようになってしまいます。なお結
果を分かりやすくするためにA1セルには1234を設定しています。
1024つまり4文字分を設定したにもかかわらず、実際には3.38文字分と設
定されています。その結果、A1セルに設定された1234が表示しきれずに##
#と省略されてしまいました。
表示拡大率の変更
→ サンプルソース( Sample_04_08.java )
表示拡大率を変更するには、XSSFSheetクラスのsetZoomメソッドを使用しま
す。
記述
XSSFWorkbook wb = new Workbook( );
XSSFSheet sheet = wb.createSheet( "sheet01" );
sheet.setZoom( 2, 1 );
引数は2つで、拡大倍率の分子と分母になります。上記のサンプルなら1分の2
ということで、200%となり、下記のサンプルなら3分の1ということで33
%となります。
印刷範囲の設定
→ サンプルソース( Sample_04_09.java )
印刷範囲を設定するときは、XSSFWorkbookクラスのsetPrintAreaメソッドを使
用します。
記述
XSSFWorkbook wb = new Workbook( );
wb.setPrintArea( 0, 0, 5, 0, 20 );
引数は5つで左から順に、設定するシートのインデックス、開始列、終了列、開
始行、終了行となっています。
記述
wb.setPrintArea( 0, "$A$1:$F$21" );
またこちらの書き方でも印刷範囲を設定できます。どちらも設定している範囲は
同じです。
改ページの設定
→ サンプルソース_改ページ設定( Sample_04_10a.java )
→ サンプルソース_改ページ削除( Sample_04_10b.java )
改ページの設定は、水平方向と垂直方向それぞれにメソッドが用意されていま
す。
水平方向に改ページを行う場合はXSSFSheetクラスのsetRowBreakメソッド
を、垂直方向に改ページを行う場合は同じくXSSFSheetクラスのsetColumn
Breakメソッドを使用します。
XSSFWorkbook wb = new Workbook( );
XSSFSheet sheet = wb.createSheet( "sheet01" );
sheet.setRowBreak( 20 );
sheet.setColumnBreak( 5 );
引数はsetRowBreakが行番号でsetColumnBreakが列番号となっています。
どちらも設定した行列とその次の行列の間に改ページが設定されるようにな
っています。
逆に改ページ設定を解除する場合は、同じXSSFSheetクラスのremoveRow
BreakメソッドとremoveColumnBreakを使用します。引数も同じでそれぞ
れ行番号と列番号を指定します。