git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1666736 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_12_FINAL
_cellXf = CTXf.Factory.parse( | _cellXf = CTXf.Factory.parse( | ||||
src.getCoreXf().toString() | src.getCoreXf().toString() | ||||
); | ); | ||||
// bug 56295: ensure that the fills is available and set correctly | |||||
CTFill fill = CTFill.Factory.parse( | |||||
src.getCTFill().toString() | |||||
); | |||||
addFill(fill); | |||||
// Swap it over | // Swap it over | ||||
_stylesSource.replaceCellXfAt(_cellXfId, _cellXf); | _stylesSource.replaceCellXfAt(_cellXfId, _cellXf); | ||||
} catch(XmlException e) { | } catch(XmlException e) { | ||||
} | } | ||||
} | } | ||||
private void addFill(CTFill fill) { | |||||
int idx = _stylesSource.putFill(new XSSFCellFill(fill)); | |||||
_cellXf.setFillId(idx); | |||||
_cellXf.setApplyFill(true); | |||||
} | |||||
/** | /** | ||||
* Get the type of horizontal alignment for the cell | * Get the type of horizontal alignment for the cell | ||||
* | * | ||||
* @return XSSFColor - fill color or <code>null</code> if not set | * @return XSSFColor - fill color or <code>null</code> if not set | ||||
*/ | */ | ||||
public XSSFColor getFillBackgroundXSSFColor() { | public XSSFColor getFillBackgroundXSSFColor() { | ||||
if(!_cellXf.getApplyFill()) return null; | |||||
// bug 56295: handle missing applyFill attribute as "true" because Excel does as well | |||||
if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return null; | |||||
int fillIndex = (int)_cellXf.getFillId(); | int fillIndex = (int)_cellXf.getFillId(); | ||||
XSSFCellFill fg = _stylesSource.getFillAt(fillIndex); | XSSFCellFill fg = _stylesSource.getFillAt(fillIndex); | ||||
* @return XSSFColor - fill color or <code>null</code> if not set | * @return XSSFColor - fill color or <code>null</code> if not set | ||||
*/ | */ | ||||
public XSSFColor getFillForegroundXSSFColor() { | public XSSFColor getFillForegroundXSSFColor() { | ||||
if(!_cellXf.getApplyFill()) return null; | |||||
// bug 56295: handle missing applyFill attribute as "true" because Excel does as well | |||||
if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return null; | |||||
int fillIndex = (int)_cellXf.getFillId(); | int fillIndex = (int)_cellXf.getFillId(); | ||||
XSSFCellFill fg = _stylesSource.getFillAt(fillIndex); | XSSFCellFill fg = _stylesSource.getFillAt(fillIndex); | ||||
* @see org.apache.poi.ss.usermodel.CellStyle#DIAMONDS | * @see org.apache.poi.ss.usermodel.CellStyle#DIAMONDS | ||||
*/ | */ | ||||
public short getFillPattern() { | public short getFillPattern() { | ||||
if(!_cellXf.getApplyFill()) return 0; | |||||
// bug 56295: handle missing applyFill attribute as "true" because Excel does as well | |||||
if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return 0; | |||||
int fillIndex = (int)_cellXf.getFillId(); | int fillIndex = (int)_cellXf.getFillId(); | ||||
XSSFCellFill fill = _stylesSource.getFillAt(fillIndex); | XSSFCellFill fill = _stylesSource.getFillAt(fillIndex); | ||||
ptrn.setBgColor(color.getCTColor()); | ptrn.setBgColor(color.getCTColor()); | ||||
} | } | ||||
int idx = _stylesSource.putFill(new XSSFCellFill(ct)); | |||||
_cellXf.setFillId(idx); | |||||
_cellXf.setApplyFill(true); | |||||
addFill(ct); | |||||
} | } | ||||
/** | /** | ||||
ptrn.setFgColor(color.getCTColor()); | ptrn.setFgColor(color.getCTColor()); | ||||
} | } | ||||
int idx = _stylesSource.putFill(new XSSFCellFill(ct)); | |||||
_cellXf.setFillId(idx); | |||||
_cellXf.setApplyFill(true); | |||||
addFill(ct); | |||||
} | } | ||||
/** | /** | ||||
*/ | */ | ||||
private CTFill getCTFill(){ | private CTFill getCTFill(){ | ||||
CTFill ct; | CTFill ct; | ||||
if(_cellXf.getApplyFill()) { | |||||
// bug 56295: handle missing applyFill attribute as "true" because Excel does as well | |||||
if(!_cellXf.isSetApplyFill() || _cellXf.getApplyFill()) { | |||||
int fillIndex = (int)_cellXf.getFillId(); | int fillIndex = (int)_cellXf.getFillId(); | ||||
XSSFCellFill cf = _stylesSource.getFillAt(fillIndex); | XSSFCellFill cf = _stylesSource.getFillAt(fillIndex); | ||||
if(fp == NO_FILL && ptrn.isSetPatternType()) ptrn.unsetPatternType(); | if(fp == NO_FILL && ptrn.isSetPatternType()) ptrn.unsetPatternType(); | ||||
else ptrn.setPatternType(STPatternType.Enum.forInt(fp + 1)); | else ptrn.setPatternType(STPatternType.Enum.forInt(fp + 1)); | ||||
int idx = _stylesSource.putFill(new XSSFCellFill(ct)); | |||||
_cellXf.setFillId(idx); | |||||
_cellXf.setApplyFill(true); | |||||
addFill(ct); | |||||
} | } | ||||
/** | /** |
import java.io.FileInputStream; | import java.io.FileInputStream; | ||||
import java.io.FileOutputStream; | import java.io.FileOutputStream; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.InputStream; | |||||
import java.io.OutputStream; | import java.io.OutputStream; | ||||
import java.util.Calendar; | import java.util.Calendar; | ||||
import java.util.List; | import java.util.List; | ||||
// TODO Re-check sheet contents | // TODO Re-check sheet contents | ||||
// TODO Re-check formula evaluation | // TODO Re-check formula evaluation | ||||
} | } | ||||
@Test | |||||
public void testBug56295_MergeXlslsWithStyles() throws IOException { | |||||
XSSFWorkbook xlsToAppendWorkbook = XSSFTestDataSamples.openSampleWorkbook("56295.xlsx"); | |||||
XSSFSheet sheet = xlsToAppendWorkbook.getSheetAt(0); | |||||
XSSFRow srcRow = sheet.getRow(0); | |||||
XSSFCell oldCell = srcRow.getCell(0); | |||||
XSSFCellStyle cellStyle = oldCell.getCellStyle(); | |||||
checkStyle(cellStyle); | |||||
// StylesTable table = xlsToAppendWorkbook.getStylesSource(); | |||||
// List<XSSFCellFill> fills = table.getFills(); | |||||
// System.out.println("Having " + fills.size() + " fills"); | |||||
// for(XSSFCellFill fill : fills) { | |||||
// System.out.println("Fill: " + fill.getFillBackgroundColor() + "/" + fill.getFillForegroundColor()); | |||||
// } | |||||
XSSFWorkbook targetWorkbook = new XSSFWorkbook(); | |||||
XSSFSheet newSheet = targetWorkbook.createSheet(sheet.getSheetName()); | |||||
XSSFRow destRow = newSheet.createRow(0); | |||||
XSSFCell newCell = destRow.createCell(0); | |||||
//newCell.getCellStyle().cloneStyleFrom(cellStyle); | |||||
CellStyle newCellStyle = targetWorkbook.createCellStyle(); | |||||
newCellStyle.cloneStyleFrom(cellStyle); | |||||
newCell.setCellStyle(newCellStyle); | |||||
checkStyle(newCell.getCellStyle()); | |||||
newCell.setCellValue(oldCell.getStringCellValue()); | |||||
// OutputStream os = new FileOutputStream("output.xlsm"); | |||||
// try { | |||||
// targetWorkbook.write(os); | |||||
// } finally { | |||||
// os.close(); | |||||
// } | |||||
XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(targetWorkbook); | |||||
XSSFCellStyle styleBack = wbBack.getSheetAt(0).getRow(0).getCell(0).getCellStyle(); | |||||
checkStyle(styleBack); | |||||
} | |||||
private void checkStyle(XSSFCellStyle cellStyle) { | |||||
assertNotNull(cellStyle); | |||||
assertEquals(0, cellStyle.getFillForegroundColor()); | |||||
assertNotNull(cellStyle.getFillForegroundXSSFColor()); | |||||
XSSFColor fgColor = cellStyle.getFillForegroundColorColor(); | |||||
assertNotNull(fgColor); | |||||
assertEquals("FF00FFFF", fgColor.getARGBHex()); | |||||
assertEquals(0, cellStyle.getFillBackgroundColor()); | |||||
assertNotNull(cellStyle.getFillBackgroundXSSFColor()); | |||||
XSSFColor bgColor = cellStyle.getFillBackgroundColorColor(); | |||||
assertNotNull(bgColor); | |||||
assertEquals("FF00FFFF", fgColor.getARGBHex()); | |||||
} | |||||
} | } |
package org.apache.poi.xssf.usermodel; | package org.apache.poi.xssf.usermodel; | ||||
import java.io.IOException; | |||||
import junit.framework.TestCase; | import junit.framework.TestCase; | ||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle; | import org.apache.poi.hssf.usermodel.HSSFCellStyle; | ||||
stylesTable.putCellStyleXf(cellStyleXf); | stylesTable.putCellStyleXf(cellStyleXf); | ||||
stylesTable.putCellXf(cellXf); | stylesTable.putCellXf(cellXf); | ||||
cellStyle = new XSSFCellStyle(1, 1, stylesTable, null); | cellStyle = new XSSFCellStyle(1, 1, stylesTable, null); | ||||
assertNotNull(stylesTable.getFillAt(1).getCTFill().getPatternFill()); | |||||
assertEquals(STPatternType.INT_DARK_GRAY, stylesTable.getFillAt(1).getCTFill().getPatternFill().getPatternType().intValue()); | |||||
} | } | ||||
public void testGetSetBorderBottom() { | public void testGetSetBorderBottom() { | ||||
assertEquals(IndexedColors.AUTOMATIC.getIndex(), cellStyle.getFillBackgroundColor()); | assertEquals(IndexedColors.AUTOMATIC.getIndex(), cellStyle.getFillBackgroundColor()); | ||||
} | } | ||||
public void testDefaultStyles() { | |||||
public void testDefaultStyles() throws IOException { | |||||
XSSFWorkbook wb1 = new XSSFWorkbook(); | XSSFWorkbook wb1 = new XSSFWorkbook(); | ||||
assertEquals(style2.getBorderLeft(), style1.getBorderLeft()); | assertEquals(style2.getBorderLeft(), style1.getBorderLeft()); | ||||
assertEquals(style2.getBorderRight(), style1.getBorderRight()); | assertEquals(style2.getBorderRight(), style1.getBorderRight()); | ||||
assertEquals(style2.getBorderTop(), style1.getBorderTop()); | assertEquals(style2.getBorderTop(), style1.getBorderTop()); | ||||
wb2.close(); | |||||
} | } | ||||
public void testGetFillPattern() { | public void testGetFillPattern() { | ||||
assertEquals(CellStyle.NO_FILL, cellStyle.getFillPattern()); | |||||
assertEquals(STPatternType.INT_DARK_GRAY-1, cellStyle.getFillPattern()); | |||||
int num = stylesTable.getFills().size(); | int num = stylesTable.getFills().size(); | ||||
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); | cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); |