2017-04-04 19 views
1

おはよう! 私はLibreofficeまたはExcelでレンダリングされたxlsxを開いたときに、スタイルが正しく適用されていないので、apache poi v。3.14に関するいくつかの問題がありました。Apache POI背景色のスタイルが動作していないようです

私はこのコードを持っている:ロックされたよう

class... { 

private XSSFCellStyle doubleLockStyle; 
/** 
    * Create default cell style. 
    * 
    * @param myWorkBook 
    * @return The cell style. 
    */ 
    private XSSFCellStyle createCell(XSSFWorkbook myWorkBook, boolean locked) { 
     XSSFCellStyle cs = myWorkBook.createCellStyle(); 
     cs.setAlignment(HorizontalAlignment.CENTER); 
     if (locked) { 
      cs.setFillBackgroundColor(LOCKED_COLOR); //rgb from awt colors 
      cs.setFillPattern(FillPatternType.SOLID_FOREGROUND); 
      cs.setLocked(true); 
     } else { 
      cs.setLocked(false); 
     } 
     return cs; 
    } 

    /** 
    * Prepare cell styles. 
    * 
    * @param myWorkBook 
    */ 
    private void initStyles(XSSFWorkbook myWorkBook) { 
    ... 
     short df = myWorkBook.createDataFormat().getFormat("0.00"); 
     doubleLockStyle = createCell(myWorkBook, true); 
     doubleLockStyle.setDataFormat(df); 
    ... 
    } 
    private void writeSheet(XSSFWorkbook myWorkBook, CalendarValueType type, Date startDate, Date endDate) { 
    ... 
    cell.setCellStyle(doubleLockStyle); 
    ... 
    } 
} 

シートが設定されています。 出力に背景色が表示されず、セルがロックされません。 何が問題なのかわかりません。私はそれが既知のバグかどうかを調べようとしましたが、そうではありません。 誰もが同じ問題を抱えていますか? バックグラウンドの塗りつぶしパターンを斜めの線に変更すると、セルがロックされますが、ExcelとLibreオフィスの間でバックグラウンドが正しく表示されません。 ありがとうございました!

答えて

5

背景色の問題は、色が少し直感的ではないということです。セルには3つの色があり、1つはフォント用、2つは塗りつぶし用です。塗りつぶしパターンには、前景色と背景色があります。塗りつぶしは、セルの背景と呼ぶもので、2色のパターンを持つことができます。あなたは塗りつぶしを使用する場合:

cs.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

を使用する唯一の色は、あなたが使用して設定することができ塗りつぶしの前景色です:

cs.setFillForegroundColor(LOCKED_COLOR); 

あなたが固体を使用するときに表示されていない塗りつぶし背景色を使用しましたパターンを埋める。パスワードがnullその後、保護が無効になっている場合は、パスワードを設定する必要があります

Sheet.protectSheet(password) 

:ロックされたセルが経由してあなたがシートの保護を有効にする必要が動作するように

。パスワードを削除するには、

Sheet.setSheetPassword(null, null); 
関連する問題