2012-10-31 68 views
11

Apache POIを使用してデータを.xlsxファイルにエクスポートしています。ファイルに含まれる行とセルの一部をスタイルする必要があります。Apache POI、新しいセルを作成すると行のスタイルが上書きされます

ファイルがExcel 2007以降で読み込まれるため、XSSFを使用しています。

基本的に私の問題は、次の例のように、インデックス0の行全体に黒の前景色を設定するような行スタイルを設定しようとしていることです。新しく作成されたセルには、指定した行スタイルをオーバーライドするようなスタイルはありません。

は、ここで私がやっている実証するコードスニペットです:私も* row.createCell(0、Cell.CELL_TYPE_STRING)しようとした

XSSFWorkbook wb = new XSSFWorkbook(); 
XSSFSheet sheet = wb.createSheet("mySheet"); 
XSSFRow row = sheet.createRow(0); 

XSSFCellStyle myStyle = wb.createCellStyle();   

myStyle.setFillForegroundColor(new XSSFColor(new Color(255, 255, 255))); 
myStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 

row.setRowStyle(myStyle); //This works, the whole row is now black 

row.createCell(0); // This cell doesn't have a style, the rest of the line stays stylized 
row.getCell(0).setCellValue("Test"); 

; *を、それは何も変更しませんでした。

私がしたいことを達成する正しい方法は何ですか?私はこのようにしたいので、同じ行のすべてのセルが同じスタイルを持っているので、作成した後に各セルのスタイルを設定する必要はありませんでした。

+0

_row.createCellを(呼び出してみてください)私自身の機能を作成し; _ –

+1

うん私はすでにそれを試してみましたが、それは問題ではありません。 –

+0

_row.setCellValue( "Test"); _私にコンパイル時のエラーチェックを与える! –

答えて

10

新しく作成されたセルにもスタイルを設定します。次のようになります。

XSSFCell newCell = row.createCell(0); 
    newCell.setCellStyle(myStyle); 
+8

を参照してください私は私の質問で言及したように私はそれを行うことができますが、私は実際に行のスタイルを設定する点とにかく後で各セルのスタイルを手動で設定する必要がある場合。 –

+1

@AdamSmith:新しく作成されたセルが親からプロパティを継承するかどうかは疑問です。 –

+0

私はこのようにしなければならないと思います。 Excelで手動で行う場合(全行の色を設定してから、スタイルが保持されているセルにデータを配置する場合)のように機能すると思いました。ご回答有難うございます!私が尋ねていることは、ただ可能ではないと思います。 –

9

スタイルを使用して行を作成しても、作成されたセルには影響しません。作成セルには独自のセルスタイルがあります。 row styleは自動的にcell styleに上書きされません。セルで行スタイルを使用する場合は、再度設定する必要があります。

最後にrow styleを設定しても、セルには影響しません。私は

CreationHelper createHelper = wb.getCreationHelper(); 
Sheet sheet = wb.createSheet("new sheet"); 
Row r = sheet.createRow(0); 
r.setRowStyle(rowStyle); 

Cell c1 = r.createCell(0); 
c1.setCellValue("Test 1"); 
c1.setCellStyle(rowStyle); 
+2

'setRowStyle'のポイントは何ですか? –

+0

@ mateus-viccari 'setRowStyle'は' setDefaultColumnStyle'と同じ働きをします:これは、ワークブックが既に*(つまり人間によって)書き出された後、手動で追加されたセルのスタイルを実際に設定します。 – Auke

0

はそれがあるべきとして "setRowStyle" は動作しないことに同意します。

範囲にスタイルを適用するために、私は_row.setRowStyle(MyStyleは)前に_(行または複数行することができる)

public void applyStyleToRange(Sheet sheet, CellStyle style, int rowStart, int colStart, int rowEnd, int colEnd) { 
    for (int r = rowStart; r <= rowEnd; r++) { 
     for (int c = colStart; c <= colEnd; c++) { 
      Row row = sheet.getRow(r); 

      if (row != null) { 
       Cell cell = row.getCell(c); 

       if (cell != null) { 
        cell.setCellStyle(style); 
       } 
      } 
     } 
    } 
} 
関連する問題