2017-09-29 24 views
-1

他のセルの色情報を新しいセルにコピーしたいと思います。Apache POIでCellcolorを変更する方法

これはうまくいきますが、私の新しいCellは毎回ブラックインスタットです。ここでは黄色

は、この私のコードです:私がSS usermodelからの細胞のXSSFCellのINSTATを使用する場合、それは修正する場合

private void cellChange(Cell cell, XSSFCell newCell, XSSFCellStyle newCellStyle) { 
try 
{ 

    XSSFCell tt = (XSSFCell) cell; 
    XSSFColor color = tt.getCellStyle().getFillForegroundColorColor(); 
    newCellStyle.setFillForegroundColor(color); 
    newCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    newCellStyle.setFont(newFont); 
    newCell.setCellStyle(newCellStyle); 

} 
// .. catch omitted 

TTは、このケースでテストしました。

この場合、お手伝いできますか?

public class ChangeCell{ 

public ChangeCell(){ 
    try 
    { 
    File file = new File("C:\\ENTWICKLUNG\\testfolder\\out\\test.xlsx"); 
    FileInputStream fis = new FileInputStream(file); 
    XSSFWorkbook wb = new XSSFWorkbook(fis); 
    XSSFWorkbook newWb = new XSSFWorkbook(); 
    XSSFCell oldCell = wb.getSheetAt(0).getRow(0).getCell(0); 

    XSSFSheet newSheet = newWb.createSheet("Test"); 
    XSSFRow newRow = newSheet.createRow(0); 
    XSSFCell newCell = newRow.createCell(0); 
    newCell.setCellValue("TestForCell"); 

    XSSFCellStyle newCellStyle = newWb.createCellStyle(); 

    cellChange(oldCell, newCell, newCellStyle); 
    newWb.write(new FileOutputstream("newTest.xlsx"); 
    newWb.close();  
    } 
    //.. catch omitted 
} 

private void cellChange(Cell cell, XSSFCell newCell, XSSFCellStyle newCellStyle) 
{ 
    try 
    { 

    XSSFCell tt = (XSSFCell) cell; 
    XSSFColor color = tt.getCellStyle().getFillForegroundColorColor(); 
    newCellStyle.setFillForegroundColor(color); 
    newCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    newCell.setCellStyle(newCellStyle); 

    } 
    //.. catch omitted 
} } 

セルA1のtest.xlsxにおける色は赤または黄色であるべきです。

+0

TTは、私は私のポストでそれを固定XSSFCellました。 私のnewStyleはsetfillforgroundcolor(色の色)を持っていないので、セルの中にそのように入れました。私が行って、.indexed()で短い時間で私のColerをtrasformすると、私のセルが黒であるのと同じ理由があります。 私は正しい色がcell.getCellStyle.getFillBackgroundColorColor();でスティッキングしていると思います。 –

+0

はbeforのように動作します、私は私のメインのポストでコードを更新しますが、私は正しい色を得なかった前のような同じ問題があります。 –

+0

またForgroundcolorと私は黄色のcellcolorの黒instatを得る –

答えて

1

あなたが間違っていることはありません。

apache poi現在の安定版3.17を使用すると、次のコードが動作します。 CellStyle.SOLID_FOREGROUNDではなく、FillPatternType.SOLID_FOREGROUNDに注意してください。しかし、それはCellStyle.SOLID_FOREGROUNDを提供する古いバージョンを使用して動作してはならない理由はありません。

test.xlsx:

enter image description here

コード:

import java.io.*; 

import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.xssf.usermodel.*; 

public class ChangeCell{ 

public ChangeCell() throws Exception { 

    File file = new File("test.xlsx"); 
    FileInputStream fis = new FileInputStream(file); 
    XSSFWorkbook wb = new XSSFWorkbook(fis); 
    XSSFWorkbook newWb = new XSSFWorkbook(); 
    XSSFCell oldCell = wb.getSheetAt(0).getRow(0).getCell(0); 

    XSSFSheet newSheet = newWb.createSheet("Test"); 
    XSSFRow newRow = newSheet.createRow(0); 
    XSSFCell newCell = newRow.createCell(0); 
    newCell.setCellValue("TestForCell"); 

    XSSFCellStyle newCellStyle = newWb.createCellStyle(); 

    cellChange(oldCell, newCell, newCellStyle); 
    newWb.write(new FileOutputStream("newTest.xlsx")); 
    newWb.close();  

} 

private void cellChange(Cell cell, XSSFCell newCell, XSSFCellStyle newCellStyle) throws Exception { 

    XSSFCell tt = (XSSFCell) cell; 
    XSSFColor color = tt.getCellStyle().getFillForegroundColorColor(); 
    newCellStyle.setFillForegroundColor(color); 
    newCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 
    newCell.setCellStyle(newCellStyle); 

} 

public static void main(String[] args) throws Exception { 
    ChangeCell changeCell = new ChangeCell(); 
} 
} 

testNew.xlsx:

enter image description here

+0

私は本当に今混乱している、私はあなたが言ったことを変更しましたが、私のケースでは、それは仕事をdosent。 私は10個以上の細胞を繰り返して色を変えていますが、毎回それを上書きしていますが、それは作業量が多いです。 私はpoi-3.8.jarを使っています –

+0

' test.xlsx'。しかし、[apache poi Version 3.8-FINAL](https://poi.apache.org/changes.html#3.8-FINAL)は5年前になり、多くの変更が加えられ、現在のバージョン3.17までバグが修正されました。だから、ソフトウェア開発の点で古くからある。このような古代のソフトウェアを使用することは、古代エジプト人が行ったように銅のチゼルを使用するようなものです。 –

+0

これをもう一度やり直してみてください。今はlib imに従ってください: commons-collections4-4。1 curvesapi-1.04 のdom4j-1.6 POI-3.17 POI-OOXML-3.17 POI-OOXML-スキーマ-3.17 のXMLBeans-2.6.0 –

関連する問題