1066 lines
43 KiB
Java
1066 lines
43 KiB
Java
/* ====================================================================
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
==================================================================== */
|
|
|
|
package org.apache.poi.xssf.usermodel;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertFalse;
|
|
import static org.junit.Assert.assertNotEquals;
|
|
import static org.junit.Assert.assertNotNull;
|
|
import static org.junit.Assert.assertNull;
|
|
import static org.junit.Assert.assertSame;
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
import java.io.IOException;
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
import org.apache.poi.ss.usermodel.*;
|
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
|
import org.apache.poi.xssf.model.StylesTable;
|
|
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
|
|
import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellXfs;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTStylesheet;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STHorizontalAlignment;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
|
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignment;
|
|
|
|
public class TestXSSFCellStyle {
|
|
private StylesTable stylesTable;
|
|
private CTBorder ctBorderA;
|
|
private CTFill ctFill;
|
|
private CTFont ctFont;
|
|
private CTXf cellStyleXf;
|
|
private CTXf cellXf;
|
|
private CTCellXfs cellXfs;
|
|
private XSSFCellStyle cellStyle;
|
|
private CTStylesheet ctStylesheet;
|
|
|
|
@Before
|
|
public void setUp() {
|
|
stylesTable = new StylesTable();
|
|
|
|
ctStylesheet = stylesTable.getCTStylesheet();
|
|
|
|
ctBorderA = CTBorder.Factory.newInstance();
|
|
XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA);
|
|
long borderId = stylesTable.putBorder(borderA);
|
|
assertEquals(1, borderId);
|
|
|
|
XSSFCellBorder borderB = new XSSFCellBorder();
|
|
assertEquals(1, stylesTable.putBorder(borderB));
|
|
|
|
ctFill = CTFill.Factory.newInstance();
|
|
XSSFCellFill fill = new XSSFCellFill(ctFill);
|
|
long fillId = stylesTable.putFill(fill);
|
|
assertEquals(2, fillId);
|
|
|
|
ctFont = CTFont.Factory.newInstance();
|
|
XSSFFont font = new XSSFFont(ctFont);
|
|
long fontId = stylesTable.putFont(font);
|
|
assertEquals(1, fontId);
|
|
|
|
cellStyleXf = ctStylesheet.addNewCellStyleXfs().addNewXf();
|
|
cellStyleXf.setBorderId(1);
|
|
cellStyleXf.setFillId(1);
|
|
cellStyleXf.setFontId(1);
|
|
|
|
cellXfs = ctStylesheet.addNewCellXfs();
|
|
cellXf = cellXfs.addNewXf();
|
|
cellXf.setXfId(1);
|
|
cellXf.setBorderId(1);
|
|
cellXf.setFillId(1);
|
|
cellXf.setFontId(1);
|
|
stylesTable.putCellStyleXf(cellStyleXf);
|
|
stylesTable.putCellXf(cellXf);
|
|
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());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderBottom() {
|
|
//default values
|
|
assertEquals(BorderStyle.NONE, cellStyle.getBorderBottomEnum());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
cellStyle.setBorderBottom(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderBottomEnum());
|
|
//a new border has been added
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(STBorderStyle.MEDIUM, ctBorder.getBottom().getStyle());
|
|
|
|
num = stylesTable.getBorders().size();
|
|
//setting the same border multiple times should not change borderId
|
|
for (int i = 0; i < 3; i++) {
|
|
cellStyle.setBorderBottom(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderBottomEnum());
|
|
}
|
|
assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
|
|
|
|
//setting border to none removes the <bottom> element
|
|
cellStyle.setBorderBottom(BorderStyle.NONE);
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertFalse(ctBorder.isSetBottom());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderRight() {
|
|
//default values
|
|
assertEquals(BorderStyle.NONE, cellStyle.getBorderRightEnum());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
cellStyle.setBorderRight(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderRightEnum());
|
|
//a new border has been added
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(STBorderStyle.MEDIUM, ctBorder.getRight().getStyle());
|
|
|
|
num = stylesTable.getBorders().size();
|
|
//setting the same border multiple times should not change borderId
|
|
for (int i = 0; i < 3; i++) {
|
|
cellStyle.setBorderRight(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderRightEnum());
|
|
}
|
|
assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
|
|
|
|
//setting border to none removes the <right> element
|
|
cellStyle.setBorderRight(BorderStyle.NONE);
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertFalse(ctBorder.isSetRight());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderLeft() {
|
|
//default values
|
|
assertEquals(BorderStyle.NONE, cellStyle.getBorderLeftEnum());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
cellStyle.setBorderLeft(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderLeftEnum());
|
|
//a new border has been added
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(STBorderStyle.MEDIUM, ctBorder.getLeft().getStyle());
|
|
|
|
num = stylesTable.getBorders().size();
|
|
//setting the same border multiple times should not change borderId
|
|
for (int i = 0; i < 3; i++) {
|
|
cellStyle.setBorderLeft(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderLeftEnum());
|
|
}
|
|
assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
|
|
|
|
//setting border to none removes the <left> element
|
|
cellStyle.setBorderLeft(BorderStyle.NONE);
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertFalse(ctBorder.isSetLeft());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderTop() {
|
|
//default values
|
|
assertEquals(BorderStyle.NONE, cellStyle.getBorderTopEnum());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
cellStyle.setBorderTop(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderTopEnum());
|
|
//a new border has been added
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(STBorderStyle.MEDIUM, ctBorder.getTop().getStyle());
|
|
|
|
num = stylesTable.getBorders().size();
|
|
//setting the same border multiple times should not change borderId
|
|
for (int i = 0; i < 3; i++) {
|
|
cellStyle.setBorderTop(BorderStyle.MEDIUM);
|
|
assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderTopEnum());
|
|
}
|
|
assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
|
|
|
|
//setting border to none removes the <top> element
|
|
cellStyle.setBorderTop(BorderStyle.NONE);
|
|
assertEquals(num, stylesTable.getBorders().size());
|
|
borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertFalse(ctBorder.isSetTop());
|
|
}
|
|
|
|
private void testGetSetBorderXMLBean(BorderStyle border, STBorderStyle.Enum expected) {
|
|
cellStyle.setBorderTop(border);
|
|
assertEquals(border, cellStyle.getBorderTopEnum());
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(expected, ctBorder.getTop().getStyle());
|
|
}
|
|
|
|
|
|
// Border Styles, in BorderStyle/STBorderStyle enum order
|
|
@Test
|
|
public void testGetSetBorderNone() {
|
|
cellStyle.setBorderTop(BorderStyle.NONE);
|
|
assertEquals(BorderStyle.NONE, cellStyle.getBorderTopEnum());
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertNull(ctBorder.getTop());
|
|
// no border style and STBorderStyle.NONE are equivalent
|
|
// POI prefers to unset the border style than explicitly set it STBorderStyle.NONE
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderThin() {
|
|
testGetSetBorderXMLBean(BorderStyle.THIN, STBorderStyle.THIN);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderMedium() {
|
|
testGetSetBorderXMLBean(BorderStyle.MEDIUM, STBorderStyle.MEDIUM);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderDashed() {
|
|
testGetSetBorderXMLBean(BorderStyle.DASHED, STBorderStyle.DASHED);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderDotted() {
|
|
testGetSetBorderXMLBean(BorderStyle.DOTTED, STBorderStyle.DOTTED);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderThick() {
|
|
testGetSetBorderXMLBean(BorderStyle.THICK, STBorderStyle.THICK);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderDouble() {
|
|
testGetSetBorderXMLBean(BorderStyle.DOUBLE, STBorderStyle.DOUBLE);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderHair() {
|
|
testGetSetBorderXMLBean(BorderStyle.HAIR, STBorderStyle.HAIR);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderMediumDashed() {
|
|
testGetSetBorderXMLBean(BorderStyle.MEDIUM_DASHED, STBorderStyle.MEDIUM_DASHED);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderDashDot() {
|
|
testGetSetBorderXMLBean(BorderStyle.DASH_DOT, STBorderStyle.DASH_DOT);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderMediumDashDot() {
|
|
testGetSetBorderXMLBean(BorderStyle.MEDIUM_DASH_DOT, STBorderStyle.MEDIUM_DASH_DOT);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderDashDotDot() {
|
|
testGetSetBorderXMLBean(BorderStyle.DASH_DOT_DOT, STBorderStyle.DASH_DOT_DOT);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderMediumDashDotDot() {
|
|
testGetSetBorderXMLBean(BorderStyle.MEDIUM_DASH_DOT_DOT, STBorderStyle.MEDIUM_DASH_DOT_DOT);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBorderSlantDashDot() {
|
|
testGetSetBorderXMLBean(BorderStyle.SLANTED_DASH_DOT, STBorderStyle.SLANT_DASH_DOT);
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetBottomBorderColor() {
|
|
//defaults
|
|
assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getBottomBorderColor());
|
|
assertNull(cellStyle.getBottomBorderXSSFColor());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
|
|
XSSFColor clr;
|
|
|
|
//setting indexed color
|
|
cellStyle.setBottomBorderColor(IndexedColors.BLUE_GREY.getIndex());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getBottomBorderColor());
|
|
clr = cellStyle.getBottomBorderXSSFColor();
|
|
assertTrue(clr.getCTColor().isSetIndexed());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
|
|
//a new border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getBottom().getColor().getIndexed());
|
|
|
|
//setting XSSFColor
|
|
num = stylesTable.getBorders().size();
|
|
clr = new XSSFColor(java.awt.Color.CYAN);
|
|
cellStyle.setBottomBorderColor(clr);
|
|
assertEquals(clr.getCTColor().toString(), cellStyle.getBottomBorderXSSFColor().getCTColor().toString());
|
|
byte[] rgb = cellStyle.getBottomBorderXSSFColor().getRGB();
|
|
assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
|
|
//another border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//passing null unsets the color
|
|
cellStyle.setBottomBorderColor(null);
|
|
assertNull(cellStyle.getBottomBorderXSSFColor());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetTopBorderColor() {
|
|
//defaults
|
|
assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getTopBorderColor());
|
|
assertNull(cellStyle.getTopBorderXSSFColor());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
|
|
XSSFColor clr;
|
|
|
|
//setting indexed color
|
|
cellStyle.setTopBorderColor(IndexedColors.BLUE_GREY.getIndex());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getTopBorderColor());
|
|
clr = cellStyle.getTopBorderXSSFColor();
|
|
assertTrue(clr.getCTColor().isSetIndexed());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
|
|
//a new border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getTop().getColor().getIndexed());
|
|
|
|
//setting XSSFColor
|
|
num = stylesTable.getBorders().size();
|
|
clr = new XSSFColor(java.awt.Color.CYAN);
|
|
cellStyle.setTopBorderColor(clr);
|
|
assertEquals(clr.getCTColor().toString(), cellStyle.getTopBorderXSSFColor().getCTColor().toString());
|
|
byte[] rgb = cellStyle.getTopBorderXSSFColor().getRGB();
|
|
assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
|
|
//another border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//passing null unsets the color
|
|
cellStyle.setTopBorderColor(null);
|
|
assertNull(cellStyle.getTopBorderXSSFColor());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetLeftBorderColor() {
|
|
//defaults
|
|
assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getLeftBorderColor());
|
|
assertNull(cellStyle.getLeftBorderXSSFColor());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
|
|
XSSFColor clr;
|
|
|
|
//setting indexed color
|
|
cellStyle.setLeftBorderColor(IndexedColors.BLUE_GREY.getIndex());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getLeftBorderColor());
|
|
clr = cellStyle.getLeftBorderXSSFColor();
|
|
assertTrue(clr.getCTColor().isSetIndexed());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
|
|
//a new border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getLeft().getColor().getIndexed());
|
|
|
|
//setting XSSFColor
|
|
num = stylesTable.getBorders().size();
|
|
clr = new XSSFColor(java.awt.Color.CYAN);
|
|
cellStyle.setLeftBorderColor(clr);
|
|
assertEquals(clr.getCTColor().toString(), cellStyle.getLeftBorderXSSFColor().getCTColor().toString());
|
|
byte[] rgb = cellStyle.getLeftBorderXSSFColor().getRGB();
|
|
assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
|
|
//another border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//passing null unsets the color
|
|
cellStyle.setLeftBorderColor(null);
|
|
assertNull(cellStyle.getLeftBorderXSSFColor());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetRightBorderColor() {
|
|
//defaults
|
|
assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getRightBorderColor());
|
|
assertNull(cellStyle.getRightBorderXSSFColor());
|
|
|
|
int num = stylesTable.getBorders().size();
|
|
|
|
XSSFColor clr;
|
|
|
|
//setting indexed color
|
|
cellStyle.setRightBorderColor(IndexedColors.BLUE_GREY.getIndex());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getRightBorderColor());
|
|
clr = cellStyle.getRightBorderXSSFColor();
|
|
assertTrue(clr.getCTColor().isSetIndexed());
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
|
|
//a new border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//id of the created border
|
|
int borderId = (int)cellStyle.getCoreXf().getBorderId();
|
|
assertTrue(borderId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
|
|
assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getRight().getColor().getIndexed());
|
|
|
|
//setting XSSFColor
|
|
num = stylesTable.getBorders().size();
|
|
clr = new XSSFColor(java.awt.Color.CYAN);
|
|
cellStyle.setRightBorderColor(clr);
|
|
assertEquals(clr.getCTColor().toString(), cellStyle.getRightBorderXSSFColor().getCTColor().toString());
|
|
byte[] rgb = cellStyle.getRightBorderXSSFColor().getRGB();
|
|
assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
|
|
//another border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getBorders().size());
|
|
|
|
//passing null unsets the color
|
|
cellStyle.setRightBorderColor(null);
|
|
assertNull(cellStyle.getRightBorderXSSFColor());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetFillBackgroundColor() {
|
|
|
|
assertEquals(IndexedColors.AUTOMATIC.getIndex(), cellStyle.getFillBackgroundColor());
|
|
assertNull(cellStyle.getFillBackgroundXSSFColor());
|
|
|
|
XSSFColor clr;
|
|
|
|
int num = stylesTable.getFills().size();
|
|
|
|
//setting indexed color
|
|
cellStyle.setFillBackgroundColor(IndexedColors.RED.getIndex());
|
|
assertEquals(IndexedColors.RED.getIndex(), cellStyle.getFillBackgroundColor());
|
|
clr = cellStyle.getFillBackgroundXSSFColor();
|
|
assertTrue(clr.getCTColor().isSetIndexed());
|
|
assertEquals(IndexedColors.RED.getIndex(), clr.getIndexed());
|
|
//a new fill was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getFills().size());
|
|
|
|
//id of the created border
|
|
int fillId = (int)cellStyle.getCoreXf().getFillId();
|
|
assertTrue(fillId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTFill ctFill2 = stylesTable.getFillAt(fillId).getCTFill();
|
|
assertEquals(IndexedColors.RED.getIndex(), ctFill2.getPatternFill().getBgColor().getIndexed());
|
|
|
|
//setting XSSFColor
|
|
num = stylesTable.getFills().size();
|
|
clr = new XSSFColor(java.awt.Color.CYAN);
|
|
cellStyle.setFillBackgroundColor(clr);
|
|
assertEquals(clr.getCTColor().toString(), cellStyle.getFillBackgroundXSSFColor().getCTColor().toString());
|
|
byte[] rgb = cellStyle.getFillBackgroundXSSFColor().getRGB();
|
|
assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
|
|
//another border was added to the styles table
|
|
assertEquals(num + 1, stylesTable.getFills().size());
|
|
|
|
//passing null unsets the color
|
|
cellStyle.setFillBackgroundColor(null);
|
|
assertNull(cellStyle.getFillBackgroundXSSFColor());
|
|
assertEquals(IndexedColors.AUTOMATIC.getIndex(), cellStyle.getFillBackgroundColor());
|
|
}
|
|
|
|
@Test
|
|
public void testDefaultStyles() throws IOException {
|
|
|
|
XSSFWorkbook wb1 = new XSSFWorkbook();
|
|
|
|
XSSFCellStyle style1 = wb1.createCellStyle();
|
|
assertEquals(IndexedColors.AUTOMATIC.getIndex(), style1.getFillBackgroundColor());
|
|
assertNull(style1.getFillBackgroundXSSFColor());
|
|
|
|
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb1));
|
|
wb1.close();
|
|
|
|
//compatibility with HSSF
|
|
HSSFWorkbook wb2 = new HSSFWorkbook();
|
|
HSSFCellStyle style2 = wb2.createCellStyle();
|
|
assertEquals(style2.getFillBackgroundColor(), style1.getFillBackgroundColor());
|
|
assertEquals(style2.getFillForegroundColor(), style1.getFillForegroundColor());
|
|
assertEquals(style2.getFillPatternEnum(), style1.getFillPatternEnum());
|
|
assertEquals(style2.getFillPattern(), style1.getFillPattern());
|
|
|
|
assertEquals(style2.getLeftBorderColor(), style1.getLeftBorderColor());
|
|
assertEquals(style2.getTopBorderColor(), style1.getTopBorderColor());
|
|
assertEquals(style2.getRightBorderColor(), style1.getRightBorderColor());
|
|
assertEquals(style2.getBottomBorderColor(), style1.getBottomBorderColor());
|
|
|
|
assertEquals(style2.getBorderBottomEnum(), style1.getBorderBottomEnum());
|
|
assertEquals(style2.getBorderLeftEnum(), style1.getBorderLeftEnum());
|
|
assertEquals(style2.getBorderRightEnum(), style1.getBorderRightEnum());
|
|
assertEquals(style2.getBorderTopEnum(), style1.getBorderTopEnum());
|
|
wb2.close();
|
|
}
|
|
|
|
@Test
|
|
public void testGetFillForegroundColor() throws IOException {
|
|
XSSFWorkbook wb = new XSSFWorkbook();
|
|
StylesTable styles = wb.getStylesSource();
|
|
assertEquals(1, wb.getNumCellStyles());
|
|
assertEquals(2, styles.getFills().size());
|
|
|
|
XSSFCellStyle defaultStyle = wb.getCellStyleAt((short)0);
|
|
assertEquals(IndexedColors.AUTOMATIC.getIndex(), defaultStyle.getFillForegroundColor());
|
|
assertEquals(null, defaultStyle.getFillForegroundXSSFColor());
|
|
assertEquals(FillPatternType.NO_FILL, defaultStyle.getFillPatternEnum());
|
|
assertEquals(CellStyle.NO_FILL, defaultStyle.getFillPattern());
|
|
|
|
XSSFCellStyle customStyle = wb.createCellStyle();
|
|
|
|
customStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
assertEquals(FillPatternType.SOLID_FOREGROUND, customStyle.getFillPatternEnum());
|
|
assertEquals(CellStyle.SOLID_FOREGROUND, customStyle.getFillPattern());
|
|
assertEquals(3, styles.getFills().size());
|
|
|
|
customStyle.setFillForegroundColor(IndexedColors.BRIGHT_GREEN.getIndex());
|
|
assertEquals(IndexedColors.BRIGHT_GREEN.getIndex(), customStyle.getFillForegroundColor());
|
|
assertEquals(4, styles.getFills().size());
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
XSSFCellStyle style = wb.createCellStyle();
|
|
|
|
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
assertEquals(FillPatternType.SOLID_FOREGROUND, style.getFillPatternEnum());
|
|
assertEquals(CellStyle.SOLID_FOREGROUND, style.getFillPattern());
|
|
assertEquals(4, styles.getFills().size());
|
|
|
|
style.setFillForegroundColor(IndexedColors.BRIGHT_GREEN.getIndex());
|
|
assertEquals(IndexedColors.BRIGHT_GREEN.getIndex(), style.getFillForegroundColor());
|
|
assertEquals(4, styles.getFills().size());
|
|
}
|
|
|
|
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
|
|
wb.close();
|
|
}
|
|
|
|
@Test
|
|
public void testGetFillPattern() {
|
|
|
|
assertEquals(STPatternType.INT_DARK_GRAY-1, cellStyle.getFillPatternEnum().getCode());
|
|
assertEquals(STPatternType.INT_DARK_GRAY-1, cellStyle.getFillPattern());
|
|
|
|
int num = stylesTable.getFills().size();
|
|
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
assertEquals(FillPatternType.SOLID_FOREGROUND, cellStyle.getFillPatternEnum());
|
|
assertEquals(CellStyle.SOLID_FOREGROUND, cellStyle.getFillPattern());
|
|
assertEquals(num + 1, stylesTable.getFills().size());
|
|
int fillId = (int)cellStyle.getCoreXf().getFillId();
|
|
assertTrue(fillId > 0);
|
|
//check changes in the underlying xml bean
|
|
CTFill ctFill2 = stylesTable.getFillAt(fillId).getCTFill();
|
|
assertEquals(STPatternType.SOLID, ctFill2.getPatternFill().getPatternType());
|
|
|
|
//setting the same fill multiple time does not update the styles table
|
|
for (int i = 0; i < 3; i++) {
|
|
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
}
|
|
assertEquals(num + 1, stylesTable.getFills().size());
|
|
|
|
cellStyle.setFillPattern(FillPatternType.NO_FILL);
|
|
assertEquals(FillPatternType.NO_FILL, cellStyle.getFillPatternEnum());
|
|
assertEquals(CellStyle.NO_FILL, cellStyle.getFillPattern());
|
|
fillId = (int)cellStyle.getCoreXf().getFillId();
|
|
ctFill2 = stylesTable.getFillAt(fillId).getCTFill();
|
|
assertFalse(ctFill2.getPatternFill().isSetPatternType());
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testGetFont() {
|
|
assertNotNull(cellStyle.getFont());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetHidden() {
|
|
assertFalse(cellStyle.getHidden());
|
|
cellStyle.setHidden(true);
|
|
assertTrue(cellStyle.getHidden());
|
|
cellStyle.setHidden(false);
|
|
assertFalse(cellStyle.getHidden());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetLocked() {
|
|
assertTrue(cellStyle.getLocked());
|
|
cellStyle.setLocked(true);
|
|
assertTrue(cellStyle.getLocked());
|
|
cellStyle.setLocked(false);
|
|
assertFalse(cellStyle.getLocked());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetIndent() {
|
|
assertEquals((short)0, cellStyle.getIndention());
|
|
cellStyle.setIndention((short)3);
|
|
assertEquals((short)3, cellStyle.getIndention());
|
|
cellStyle.setIndention((short) 13);
|
|
assertEquals((short)13, cellStyle.getIndention());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetAlignement() {
|
|
assertNull(cellStyle.getCellAlignment().getCTCellAlignment().getHorizontal());
|
|
assertEquals(HorizontalAlignment.GENERAL, cellStyle.getAlignmentEnum());
|
|
|
|
cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT);
|
|
assertEquals(XSSFCellStyle.ALIGN_LEFT, cellStyle.getAlignment());
|
|
assertEquals(HorizontalAlignment.LEFT, cellStyle.getAlignmentEnum());
|
|
assertEquals(STHorizontalAlignment.LEFT, cellStyle.getCellAlignment().getCTCellAlignment().getHorizontal());
|
|
|
|
cellStyle.setAlignment(HorizontalAlignment.JUSTIFY);
|
|
assertEquals(XSSFCellStyle.ALIGN_JUSTIFY, cellStyle.getAlignment());
|
|
assertEquals(HorizontalAlignment.JUSTIFY, cellStyle.getAlignmentEnum());
|
|
assertEquals(STHorizontalAlignment.JUSTIFY, cellStyle.getCellAlignment().getCTCellAlignment().getHorizontal());
|
|
|
|
cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
assertEquals(XSSFCellStyle.ALIGN_CENTER, cellStyle.getAlignment());
|
|
assertEquals(HorizontalAlignment.CENTER, cellStyle.getAlignmentEnum());
|
|
assertEquals(STHorizontalAlignment.CENTER, cellStyle.getCellAlignment().getCTCellAlignment().getHorizontal());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetVerticalAlignment() {
|
|
assertEquals(VerticalAlignment.BOTTOM, cellStyle.getVerticalAlignmentEnum());
|
|
assertEquals(XSSFCellStyle.VERTICAL_BOTTOM, cellStyle.getVerticalAlignment());
|
|
assertNull(cellStyle.getCellAlignment().getCTCellAlignment().getVertical());
|
|
|
|
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
|
|
assertEquals(XSSFCellStyle.VERTICAL_CENTER, cellStyle.getVerticalAlignment());
|
|
assertEquals(VerticalAlignment.CENTER, cellStyle.getVerticalAlignmentEnum());
|
|
assertEquals(STVerticalAlignment.CENTER, cellStyle.getCellAlignment().getCTCellAlignment().getVertical());
|
|
|
|
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_JUSTIFY);
|
|
assertEquals(XSSFCellStyle.VERTICAL_JUSTIFY, cellStyle.getVerticalAlignment());
|
|
assertEquals(VerticalAlignment.JUSTIFY, cellStyle.getVerticalAlignmentEnum());
|
|
assertEquals(STVerticalAlignment.JUSTIFY, cellStyle.getCellAlignment().getCTCellAlignment().getVertical());
|
|
}
|
|
|
|
@Test
|
|
public void testGetSetWrapText() {
|
|
assertFalse(cellStyle.getWrapText());
|
|
cellStyle.setWrapText(true);
|
|
assertTrue(cellStyle.getWrapText());
|
|
cellStyle.setWrapText(false);
|
|
assertFalse(cellStyle.getWrapText());
|
|
}
|
|
|
|
/**
|
|
* Cloning one XSSFCellStyle onto Another, same XSSFWorkbook
|
|
*/
|
|
@Test
|
|
public void testCloneStyleSameWB() throws IOException {
|
|
XSSFWorkbook wb = new XSSFWorkbook();
|
|
assertEquals(1, wb.getNumberOfFonts());
|
|
|
|
XSSFFont fnt = wb.createFont();
|
|
fnt.setFontName("TestingFont");
|
|
assertEquals(2, wb.getNumberOfFonts());
|
|
|
|
XSSFCellStyle orig = wb.createCellStyle();
|
|
orig.setAlignment(CellStyle.ALIGN_RIGHT);
|
|
orig.setFont(fnt);
|
|
orig.setDataFormat((short)18);
|
|
|
|
assertTrue(CellStyle.ALIGN_RIGHT == orig.getAlignment());
|
|
assertTrue(fnt == orig.getFont());
|
|
assertTrue(18 == orig.getDataFormat());
|
|
|
|
XSSFCellStyle clone = wb.createCellStyle();
|
|
assertFalse(CellStyle.ALIGN_RIGHT == clone.getAlignment());
|
|
assertFalse(fnt == clone.getFont());
|
|
assertFalse(18 == clone.getDataFormat());
|
|
|
|
clone.cloneStyleFrom(orig);
|
|
assertTrue(CellStyle.ALIGN_RIGHT == clone.getAlignment());
|
|
assertTrue(fnt == clone.getFont());
|
|
assertTrue(18 == clone.getDataFormat());
|
|
assertEquals(2, wb.getNumberOfFonts());
|
|
|
|
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
assertNotNull(wb2);
|
|
wb2.close();
|
|
|
|
wb.close();
|
|
}
|
|
|
|
/**
|
|
* Cloning one XSSFCellStyle onto Another, different XSSFWorkbooks
|
|
*/
|
|
@Test
|
|
public void testCloneStyleDiffWB() throws IOException {
|
|
XSSFWorkbook wbOrig = new XSSFWorkbook();
|
|
assertEquals(1, wbOrig.getNumberOfFonts());
|
|
assertEquals(0, wbOrig.getStylesSource().getNumberFormats().size());
|
|
|
|
XSSFFont fnt = wbOrig.createFont();
|
|
fnt.setFontName("TestingFont");
|
|
assertEquals(2, wbOrig.getNumberOfFonts());
|
|
assertEquals(0, wbOrig.getStylesSource().getNumberFormats().size());
|
|
|
|
XSSFDataFormat fmt = wbOrig.createDataFormat();
|
|
fmt.getFormat("MadeUpOne");
|
|
fmt.getFormat("MadeUpTwo");
|
|
|
|
XSSFCellStyle orig = wbOrig.createCellStyle();
|
|
orig.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
|
|
orig.setFont(fnt);
|
|
orig.setDataFormat(fmt.getFormat("Test##"));
|
|
|
|
assertTrue(XSSFCellStyle.ALIGN_RIGHT == orig.getAlignment());
|
|
assertTrue(fnt == orig.getFont());
|
|
assertTrue(fmt.getFormat("Test##") == orig.getDataFormat());
|
|
|
|
assertEquals(2, wbOrig.getNumberOfFonts());
|
|
assertEquals(3, wbOrig.getStylesSource().getNumberFormats().size());
|
|
|
|
|
|
// Now a style on another workbook
|
|
XSSFWorkbook wbClone = new XSSFWorkbook();
|
|
assertEquals(1, wbClone.getNumberOfFonts());
|
|
assertEquals(0, wbClone.getStylesSource().getNumberFormats().size());
|
|
assertEquals(1, wbClone.getNumCellStyles());
|
|
|
|
XSSFDataFormat fmtClone = wbClone.createDataFormat();
|
|
XSSFCellStyle clone = wbClone.createCellStyle();
|
|
|
|
assertEquals(1, wbClone.getNumberOfFonts());
|
|
assertEquals(0, wbClone.getStylesSource().getNumberFormats().size());
|
|
|
|
assertFalse(HSSFCellStyle.ALIGN_RIGHT == clone.getAlignment());
|
|
assertNotEquals("TestingFont", clone.getFont().getFontName());
|
|
|
|
clone.cloneStyleFrom(orig);
|
|
|
|
assertEquals(2, wbClone.getNumberOfFonts());
|
|
assertEquals(2, wbClone.getNumCellStyles());
|
|
assertEquals(1, wbClone.getStylesSource().getNumberFormats().size());
|
|
|
|
assertEquals(HSSFCellStyle.ALIGN_RIGHT, clone.getAlignment());
|
|
assertEquals("TestingFont", clone.getFont().getFontName());
|
|
assertEquals(fmtClone.getFormat("Test##"), clone.getDataFormat());
|
|
assertFalse(fmtClone.getFormat("Test##") == fmt.getFormat("Test##"));
|
|
|
|
// Save it and re-check
|
|
XSSFWorkbook wbReload = XSSFTestDataSamples.writeOutAndReadBack(wbClone);
|
|
assertEquals(2, wbReload.getNumberOfFonts());
|
|
assertEquals(2, wbReload.getNumCellStyles());
|
|
assertEquals(1, wbReload.getStylesSource().getNumberFormats().size());
|
|
|
|
XSSFCellStyle reload = wbReload.getCellStyleAt((short)1);
|
|
assertEquals(HSSFCellStyle.ALIGN_RIGHT, reload.getAlignment());
|
|
assertEquals("TestingFont", reload.getFont().getFontName());
|
|
assertEquals(fmtClone.getFormat("Test##"), reload.getDataFormat());
|
|
assertFalse(fmtClone.getFormat("Test##") == fmt.getFormat("Test##"));
|
|
|
|
XSSFWorkbook wbOrig2 = XSSFTestDataSamples.writeOutAndReadBack(wbOrig);
|
|
assertNotNull(wbOrig2);
|
|
wbOrig2.close();
|
|
|
|
XSSFWorkbook wbClone2 = XSSFTestDataSamples.writeOutAndReadBack(wbClone);
|
|
assertNotNull(wbClone2);
|
|
wbClone2.close();
|
|
|
|
wbReload.close();
|
|
wbClone.close();
|
|
wbOrig.close();
|
|
}
|
|
|
|
/**
|
|
* Avoid ArrayIndexOutOfBoundsException when creating cell style
|
|
* in a workbook that has an empty xf table.
|
|
*/
|
|
@Test
|
|
public void testBug52348() throws IOException {
|
|
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("52348.xlsx");
|
|
StylesTable st = workbook.getStylesSource();
|
|
assertEquals(0, st._getStyleXfsSize());
|
|
|
|
XSSFCellStyle style = workbook.createCellStyle(); // no exception at this point
|
|
assertNull(style.getStyleXf());
|
|
|
|
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
|
assertNotNull(wb2);
|
|
wb2.close();
|
|
workbook.close();
|
|
}
|
|
|
|
/**
|
|
* Avoid ArrayIndexOutOfBoundsException when getting cell style
|
|
* in a workbook that has an empty xf table.
|
|
*/
|
|
@Test
|
|
public void testBug55650() throws IOException {
|
|
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("52348.xlsx");
|
|
StylesTable st = workbook.getStylesSource();
|
|
assertEquals(0, st._getStyleXfsSize());
|
|
|
|
// no exception at this point
|
|
XSSFCellStyle style = workbook.getSheetAt(0).getRow(0).getCell(0).getCellStyle();
|
|
assertNull(style.getStyleXf());
|
|
|
|
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
|
assertNotNull(wb2);
|
|
wb2.close();
|
|
|
|
workbook.close();
|
|
}
|
|
|
|
@Test
|
|
public void testShrinkToFit() throws IOException {
|
|
// Existing file
|
|
XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("ShrinkToFit.xlsx");
|
|
Sheet s = wb1.getSheetAt(0);
|
|
Row r = s.getRow(0);
|
|
CellStyle cs = r.getCell(0).getCellStyle();
|
|
|
|
assertEquals(true, cs.getShrinkToFit());
|
|
|
|
// New file
|
|
XSSFWorkbook wb2 = new XSSFWorkbook();
|
|
s = wb2.createSheet();
|
|
r = s.createRow(0);
|
|
|
|
cs = wb2.createCellStyle();
|
|
cs.setShrinkToFit(false);
|
|
r.createCell(0).setCellStyle(cs);
|
|
|
|
cs = wb2.createCellStyle();
|
|
cs.setShrinkToFit(true);
|
|
r.createCell(1).setCellStyle(cs);
|
|
|
|
// Write out, read, and check
|
|
XSSFWorkbook wb3 = XSSFTestDataSamples.writeOutAndReadBack(wb2);
|
|
s = wb3.getSheetAt(0);
|
|
r = s.getRow(0);
|
|
assertEquals(false, r.getCell(0).getCellStyle().getShrinkToFit());
|
|
assertEquals(true, r.getCell(1).getCellStyle().getShrinkToFit());
|
|
|
|
XSSFWorkbook wb4 = XSSFTestDataSamples.writeOutAndReadBack(wb2);
|
|
assertNotNull(wb4);
|
|
wb4.close();
|
|
|
|
XSSFWorkbook wb5 = XSSFTestDataSamples.writeOutAndReadBack(wb3);
|
|
assertNotNull(wb5);
|
|
wb5.close();
|
|
|
|
wb3.close();
|
|
wb2.close();
|
|
wb1.close();
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testSetColor() throws IOException {
|
|
Workbook wb = new XSSFWorkbook();
|
|
Sheet sheet = wb.createSheet();
|
|
Row row = sheet.createRow(0);
|
|
|
|
DataFormat format = wb.createDataFormat();
|
|
Cell cell = row.createCell(1);
|
|
cell.setCellValue("somevalue");
|
|
CellStyle cellStyle2 = wb.createCellStyle();
|
|
|
|
|
|
cellStyle2.setDataFormat(format.getFormat("###0"));
|
|
|
|
cellStyle2.setFillBackgroundColor(IndexedColors.DARK_BLUE.getIndex());
|
|
cellStyle2.setFillForegroundColor(IndexedColors.DARK_BLUE.getIndex());
|
|
cellStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
|
|
cellStyle2.setAlignment(CellStyle.ALIGN_RIGHT);
|
|
cellStyle2.setVerticalAlignment(CellStyle.VERTICAL_TOP);
|
|
|
|
cell.setCellStyle(cellStyle2);
|
|
|
|
Workbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
Cell cellBack = wbBack.getSheetAt(0).getRow(0).getCell(1);
|
|
assertNotNull(cellBack);
|
|
CellStyle styleBack = cellBack.getCellStyle();
|
|
assertEquals(IndexedColors.DARK_BLUE.getIndex(), styleBack.getFillBackgroundColor());
|
|
assertEquals(IndexedColors.DARK_BLUE.getIndex(), styleBack.getFillForegroundColor());
|
|
assertEquals(CellStyle.ALIGN_RIGHT, styleBack.getAlignment());
|
|
assertEquals(CellStyle.VERTICAL_TOP, styleBack.getVerticalAlignment());
|
|
assertEquals(FillPatternType.SOLID_FOREGROUND, styleBack.getFillPatternEnum());
|
|
assertEquals(CellStyle.SOLID_FOREGROUND, styleBack.getFillPattern());
|
|
|
|
wbBack.close();
|
|
|
|
wb.close();
|
|
}
|
|
|
|
public static void copyStyles(Workbook reference, Workbook target) {
|
|
final int numberOfStyles = reference.getNumCellStyles();
|
|
// don't copy default style (style index 0)
|
|
for (int i = 1; i < numberOfStyles; i++) {
|
|
final CellStyle referenceStyle = reference.getCellStyleAt(i);
|
|
final CellStyle targetStyle = target.createCellStyle();
|
|
targetStyle.cloneStyleFrom(referenceStyle);
|
|
}
|
|
/*System.out.println("Reference : "+reference.getNumCellStyles());
|
|
System.out.println("Target : "+target.getNumCellStyles());*/
|
|
}
|
|
|
|
@Test
|
|
public void test58084() throws IOException {
|
|
Workbook reference = XSSFTestDataSamples.openSampleWorkbook("template.xlsx");
|
|
Workbook target = new XSSFWorkbook();
|
|
copyStyles(reference, target);
|
|
|
|
assertEquals(reference.getNumCellStyles(), target.getNumCellStyles());
|
|
final Sheet sheet = target.createSheet();
|
|
final Row row = sheet.createRow(0);
|
|
int col = 0;
|
|
for (short i = 1; i < target.getNumCellStyles(); i++) {
|
|
final Cell cell = row.createCell(col++);
|
|
cell.setCellValue("Coucou"+i);
|
|
cell.setCellStyle(target.getCellStyleAt(i));
|
|
}
|
|
/*OutputStream out = new FileOutputStream("C:\\temp\\58084.xlsx");
|
|
target.write(out);
|
|
out.close();*/
|
|
|
|
Workbook copy = XSSFTestDataSamples.writeOutAndReadBack(target);
|
|
|
|
// previously this failed because the border-element was not copied over
|
|
copy.getCellStyleAt((short)1).getBorderBottomEnum();
|
|
|
|
copy.close();
|
|
|
|
target.close();
|
|
reference.close();
|
|
}
|
|
|
|
@Test
|
|
public void test58043() {
|
|
assertEquals(0, cellStyle.getRotation());
|
|
|
|
cellStyle.setRotation((short)89);
|
|
assertEquals(89, cellStyle.getRotation());
|
|
|
|
cellStyle.setRotation((short)90);
|
|
assertEquals(90, cellStyle.getRotation());
|
|
|
|
cellStyle.setRotation((short)179);
|
|
assertEquals(179, cellStyle.getRotation());
|
|
|
|
cellStyle.setRotation((short)180);
|
|
assertEquals(180, cellStyle.getRotation());
|
|
|
|
// negative values are mapped to the correct values for compatibility between HSSF and XSSF
|
|
cellStyle.setRotation((short)-1);
|
|
assertEquals(91, cellStyle.getRotation());
|
|
|
|
cellStyle.setRotation((short)-89);
|
|
assertEquals(179, cellStyle.getRotation());
|
|
|
|
cellStyle.setRotation((short)-90);
|
|
assertEquals(180, cellStyle.getRotation());
|
|
}
|
|
|
|
@Test
|
|
public void bug58996_UsedToWorkIn3_11_ButNotIn3_13() throws IOException {
|
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
|
|
|
XSSFCellStyle cellStyle = workbook.createCellStyle();
|
|
cellStyle.setFillForegroundColor(null);
|
|
assertNull(cellStyle.getFillForegroundColorColor());
|
|
|
|
cellStyle.setFillBackgroundColor(null);
|
|
assertNull(cellStyle.getFillBackgroundColorColor());
|
|
|
|
cellStyle.setFillPattern(FillPatternType.NO_FILL);
|
|
assertEquals(FillPatternType.NO_FILL, cellStyle.getFillPatternEnum());
|
|
|
|
cellStyle.setBottomBorderColor(null);
|
|
assertNull(cellStyle.getBottomBorderXSSFColor());
|
|
|
|
cellStyle.setTopBorderColor(null);
|
|
assertNull(cellStyle.getTopBorderXSSFColor());
|
|
|
|
cellStyle.setLeftBorderColor(null);
|
|
assertNull(cellStyle.getLeftBorderXSSFColor());
|
|
|
|
cellStyle.setRightBorderColor(null);
|
|
assertNull(cellStyle.getRightBorderXSSFColor());
|
|
|
|
workbook.close();
|
|
}
|
|
}
|