web-dev-qa-db-ja.com

Apache POI、新しいセルの作成は行スタイルをオーバーライドします

Apache POIを使用してデータを.xlsxファイルにエクスポートしていて、ファイルに含まれている行とセルの一部のスタイルを設定したいと思います。

ファイルはExcel2007以降で読み取られるため、XSSFを使用しています。

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

これが私がしていることを示すためのコードスニペットです:

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");

* row.createCell(0、Cell.CELL_TYPE_STRING); *も試しましたが、何も変わりませんでした。

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

13
Adam Smith

新しく作成したセルにもスタイルを設定します。例:未満:

    XSSFCell newCell = row.createCell(0);
    newCell.setCellStyle(myStyle);
11
Yogendra Singh

スタイルで行を作成しても、その作成されたセルには影響しません。作成セルには独自のセルスタイルがあります。 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);
9
Zaw Than oo

「setRowStyle」が正常に機能しないことに同意します。

範囲にスタイルを適用する独自の関数を作成しました(1行または複数行の場合があります)

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);
                }
            }
        }
    }
}
2
amdev