aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java76
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java12
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java440
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java4
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java142
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java65
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java11
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java41
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xssf/util/CTFontWrapper.java176
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xssf/util/Charset.java27
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xssf/util/IndexedColors.java16
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/AllXSSFTests.java6
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java3
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java57
-rwxr-xr-xsrc/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java297
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java96
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java87
17 files changed, 1441 insertions, 115 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
index 63dca9eb7a..b7a6560a67 100644
--- a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
+++ b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
@@ -38,6 +38,8 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorders;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellStyleXfs;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellXfs;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxf;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxfs;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFills;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
@@ -46,12 +48,10 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmt;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmts;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTStylesheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument;
-
/**
* Table of styles shared across all sheets in a workbook.
*
@@ -65,6 +65,8 @@ public class StylesTable implements StylesSource, XSSFModel {
private final LinkedList<CTXf> styleXfs = new LinkedList<CTXf>();
private final LinkedList<CTXf> xfs = new LinkedList<CTXf>();
+ private final LinkedList<CTDxf> dxfs = new LinkedList<CTDxf>();
+
/**
* The first style id available for use as a custom style
*/
@@ -101,7 +103,6 @@ public class StylesTable implements StylesSource, XSSFModel {
public void readFrom(InputStream is) throws IOException {
try {
doc = StyleSheetDocument.Factory.parse(is);
-
// Grab all the different bits we care about
if(doc.getStyleSheet().getNumFmts() != null)
for (CTNumFmt nfmt : doc.getStyleSheet().getNumFmts().getNumFmtArray()) {
@@ -127,6 +128,12 @@ public class StylesTable implements StylesSource, XSSFModel {
for (CTXf xf : doc.getStyleSheet().getCellStyleXfs().getXfArray()) {
styleXfs.add(xf);
}
+ // dxf
+ if(doc.getStyleSheet().getDxfs() != null)
+ for (CTDxf dxf : doc.getStyleSheet().getDxfs().getDxfArray()) {
+ dxfs.add(dxf);
+ }
+
} catch (XmlException e) {
throw new IOException(e.getLocalizedMessage());
}
@@ -163,6 +170,7 @@ public class StylesTable implements StylesSource, XSSFModel {
public Font getFontAt(long idx) {
return new XSSFFont(fonts.get((int) idx));
}
+
public synchronized long putFont(Font font) {
return putFont((XSSFFont)font, fonts);
}
@@ -216,7 +224,14 @@ public class StylesTable implements StylesSource, XSSFModel {
styleXfs.add(cellStyleXf);
return styleXfs.size();
}
- /**
+ /**
+ * get the size of cell styles
+ */
+ public int getNumCellStyles(){
+ return styleXfs.size();
+ }
+
+ /**
* For unit testing only
*/
public int _getNumberFormatSize() {
@@ -329,6 +344,17 @@ public class StylesTable implements StylesSource, XSSFModel {
doc.getStyleSheet().setCellStyleXfs(ctSXfs);
}
+ // Style dxf
+ if(dxfs.size() > 0) {
+ CTDxfs ctDxfs = CTDxfs.Factory.newInstance();
+ ctDxfs.setCount(dxfs.size());
+ ctDxfs.setDxfArray(dxfs.toArray(new CTDxf[dxfs.size()])
+ );
+ doc.getStyleSheet().setDxfs(ctDxfs);
+ }
+
+
+
// Save
doc.save(out, options);
}
@@ -345,8 +371,9 @@ public class StylesTable implements StylesSource, XSSFModel {
return font.putFont(fonts);
}
private void initialize() {
- CTFont ctFont = createDefaultFont();
- fonts.add(ctFont);
+ //CTFont ctFont = createDefaultFont();
+ XSSFFont xssfFont = createDefaultFont();
+ fonts.add(xssfFont.getCTFont());
CTFill ctFill = createDefaultFill();
fills.add(ctFill);
@@ -360,6 +387,7 @@ public class StylesTable implements StylesSource, XSSFModel {
xf.setXfId(0);
xfs.add(xf);
}
+
private CTXf createDefaultXf() {
CTXf ctXf = CTXf.Factory.newInstance();
ctXf.setNumFmtId(0);
@@ -377,18 +405,50 @@ public class StylesTable implements StylesSource, XSSFModel {
ctBorder.addNewDiagonal();
return ctBorder;
}
+
private CTFill createDefaultFill() {
CTFill ctFill = CTFill.Factory.newInstance();
ctFill.addNewPatternFill().setPatternType(STPatternType.NONE);
return ctFill;
}
- private CTFont createDefaultFont() {
+
+ private XSSFFont createDefaultFont() {
+ /*
CTFont ctFont = CTFont.Factory.newInstance();
ctFont.addNewSz().setVal(11);
ctFont.addNewColor().setTheme(1);
ctFont.addNewName().setVal("Calibri");
ctFont.addNewFamily().setVal(2);
ctFont.addNewScheme().setVal(STFontScheme.MINOR);
- return ctFont;
+ XSSFFont font=new XSSFFont(ctFont);
+ return font;
+ */
+
+ XSSFFont xssfFont=new XSSFFont();
+ xssfFont.setFontHeightInPoints(XSSFFont.DEFAULT_FONT_SIZE);
+ xssfFont.setColor(XSSFFont.DEFAULT_FONT_COLOR);//setTheme
+ xssfFont.setFontName(XSSFFont.DEFAULT_FONT_NAME);
+ xssfFont.setFamily(XSSFFont.FONT_FAMILY_SWISS);
+ xssfFont.setScheme(XSSFFont.SCHEME_MINOR);
+ return xssfFont;
+ }
+
+
+
+
+ public CTDxf getDxf(long idx) {
+ if(dxfs.size()==0)
+ return CTDxf.Factory.newInstance();
+ else
+ return dxfs.get((int) idx);
+ }
+
+
+ public long putDxf(CTDxf dxf) {
+ this.dxfs.add(dxf);
+ return this.dxfs.size();
}
+
+
+
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
index 724d4ceff2..aaa37f3026 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
@@ -293,13 +293,11 @@ public class XSSFCellStyle implements CellStyle {
}
public void setFillBackgroundColor(short bg) {
- // TODO Auto-generated method stub
-
+ getCellFill().setFillBackgroundColor(bg);
}
public void setFillForegroundColor(short bg) {
- // TODO Auto-generated method stub
-
+ getCellFill().setFillForegroundColor(bg);
}
public void setFillPattern(short fp) {
@@ -308,8 +306,10 @@ public class XSSFCellStyle implements CellStyle {
}
public void setFont(Font font) {
- // TODO Auto-generated method stub
-
+ if(font!=null){
+ long index=this.stylesSource.putFont(font);
+ this.cellXf.setFontId(index);
+ }
}
public void setHidden(boolean hidden) {
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java
index 9b56c2858d..fb0e0cbb68 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java
@@ -19,126 +19,400 @@ package org.apache.poi.xssf.usermodel;
import java.util.LinkedList;
import org.apache.poi.ss.usermodel.Font;
+
+import org.apache.poi.xssf.util.CTFontWrapper;
+import org.apache.poi.xssf.util.Charset;
+import org.apache.poi.xssf.util.IndexedColors;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
+
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontName;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontScheme;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIntProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;
public class XSSFFont implements Font {
-
- private CTFont font;
+
+
+ public static final int SCHEME_MAJOR=2;
+ public static final int SCHEME_MINOR=3;
+ public static final int SCHEME_NONE=0;
+
+ public static final int FONT_FAMILY_NOT_APPLICABLE=0;
+ public static final int FONT_FAMILY_ROMAN=1;
+ public static final int FONT_FAMILY_SWISS=2;
+ public static final int FONT_FAMILY_MODERN=3;
+ public static final int FONT_FAMILY_SCRIPT=4;
+ public static final int FONT_FAMILY_DECORATIVE=5;
+
+
+ public static final String DEFAULT_FONT_NAME="Calibri";
+ public static final short DEFAULT_FONT_SIZE=11;
+ public static final short DEFAULT_FONT_COLOR=(short)IndexedColors.BLACK;
+
+ private int index=0;
+
+
+ private CTFontWrapper fontWrapper;
+
+
public XSSFFont(CTFont font) {
- this.font = font;
+ this.fontWrapper=new CTFontWrapper(font);
}
-
+
+ /*
+ public XSSFFont(int index) {
+ this.fontWrapper=new CTFontWrapper(font);
+ this.index=index;
+ }
+ */
+
public XSSFFont() {
- this.font = CTFont.Factory.newInstance();
+ this.fontWrapper = new CTFontWrapper(CTFont.Factory.newInstance());
}
- public short getBoldweight() {
- // TODO Auto-generated method stub
- return 0;
+
+ public CTFont getCTFont(){
+ return fontWrapper.getCTFont();
}
+
+ public short getBoldweight() {
+ CTBooleanProperty bold=fontWrapper.getB();
+ if(bold!=null && bold.getVal())
+ return Font.BOLDWEIGHT_BOLD;
+ else
+ return Font.BOLDWEIGHT_NORMAL;
+ }
+
+
+
public byte getCharSet() {
- // TODO Auto-generated method stub
- return 0;
+ CTIntProperty charset= fontWrapper.getCharset();
+ if(charset!=null){
+ //this value must be set -- can't be null
+ switch (charset.getVal()) {
+ case Charset.ANSI_CHARSET:
+ return Font.ANSI_CHARSET;
+
+ case Charset.DEFAULT_CHARSET:
+ return Font.DEFAULT_CHARSET;
+
+ case Charset.SYMBOL_CHARSET:
+ return Font.SYMBOL_CHARSET;
+
+ default://maight be correct to return this byte value???
+ return Byte.parseByte(Integer.toString(charset.getVal()));
+ }
+ }
+ else
+ return Font.ANSI_CHARSET;
}
public short getColor() {
- // TODO Auto-generated method stub
- return 0;
+ CTColor color=fontWrapper.getColor();
+ long index=color.getIndexed();
+ if (index==XSSFFont.DEFAULT_FONT_COLOR){
+ return Font.COLOR_NORMAL;
+ }
+ else if(index==IndexedColors.RED){
+ return Font.COLOR_RED;
+ }
+ else{
+ return Short.parseShort(new Long(index).toString());
+ }
}
public short getFontHeight() {
- // TODO Auto-generated method stub
- return 0;
+ if(fontWrapper.getSz()!=null){
+ double fontHeight= fontWrapper.getSz().getVal()/20;
+ return (short)fontHeight;
+ }
+ else
+ return DEFAULT_FONT_SIZE/20;
}
public short getFontHeightInPoints() {
- // TODO Auto-generated method stub
- return 0;
+ if(fontWrapper.getSz()!=null){
+ double fontHeight= fontWrapper.getSz().getVal();// /72;
+ return (short)fontHeight;//new Double(fontHeight).shortValue();
+ }
+ else
+ return DEFAULT_FONT_SIZE;
}
- public String getFontName() {
- // TODO Auto-generated method stub
- return null;
+ //AGGIUNGERE CONTROLLO NULL
+ public String getFontName() {
+ if(fontWrapper.getName()!=null)
+ return fontWrapper.getName().getVal();
+ else
+ return DEFAULT_FONT_NAME;
}
+
public short getIndex() {
// TODO Auto-generated method stub
return 0;
}
public boolean getItalic() {
- // TODO Auto-generated method stub
- return false;
+ if(fontWrapper.getI()!=null)
+ return fontWrapper.getI().getVal();
+ else
+ return false;
}
public boolean getStrikeout() {
- // TODO Auto-generated method stub
- return false;
+ if(fontWrapper.getStrike()!=null)
+ return fontWrapper.getStrike().getVal();
+ else
+ return false;
}
public short getTypeOffset() {
- // TODO Auto-generated method stub
- return 0;
+ if(fontWrapper.getVertAlign()!=null){
+ int val=fontWrapper.getVertAlign().getVal().intValue();
+ switch (val) {
+ case STVerticalAlignRun.INT_BASELINE:
+ return Font.SS_NONE;
+ case STVerticalAlignRun.INT_SUBSCRIPT:
+ return Font.SS_SUB;
+ case STVerticalAlignRun.INT_SUPERSCRIPT:
+ return Font.SS_SUPER;
+ default: throw new RuntimeException("Wrong offset value "+val);
+ }
+ }
+ else
+ return Font.SS_NONE;
}
- public byte getUnderline() {
- // TODO Auto-generated method stub
- return 0;
+ public byte getUnderline() {
+ if(fontWrapper.getU()!=null){
+ //attenzione : -- get val pu˜ tornare null----
+ switch (fontWrapper.getU().getVal().intValue()) {
+ case STUnderlineValues.INT_DOUBLE:
+ return Font.U_DOUBLE;
+ case STUnderlineValues.INT_DOUBLE_ACCOUNTING:
+ return Font.U_DOUBLE_ACCOUNTING;
+
+ case STUnderlineValues.INT_SINGLE_ACCOUNTING:
+ return Font.U_SINGLE_ACCOUNTING;
+
+ case STUnderlineValues.INT_NONE:
+ return Font.U_NONE;
+
+ case STUnderlineValues.INT_SINGLE:
+ default:
+ return Font.U_SINGLE;
+ }
+ }
+ return Font.U_NONE;
}
- public void setBoldweight(short boldweight) {
- // TODO Auto-generated method stub
-
+ public void setBoldweight(short boldweight) {
+ if(boldweight==Font.BOLDWEIGHT_BOLD){
+
+ CTBooleanProperty bold;
+ if(fontWrapper.getCTFont().getBArray().length==0){
+ bold=fontWrapper.getCTFont().addNewB();
+ }
+ else{
+ bold=CTBooleanProperty.Factory.newInstance();
+ }
+ bold.setVal(true);
+ fontWrapper.setB(bold);
+ }
}
public void setCharSet(byte charset) {
- // TODO Auto-generated method stub
-
+ CTIntProperty charsetProperty;
+ if(fontWrapper.getCTFont().getCharsetArray().length==0){
+ charsetProperty=fontWrapper.getCTFont().addNewCharset();
+ }
+ else{
+ charsetProperty=CTIntProperty.Factory.newInstance();
+ }
+ switch (charset) {
+ case Font.ANSI_CHARSET:
+ charsetProperty.setVal(Charset.ANSI_CHARSET);
+ break;
+ case Font.SYMBOL_CHARSET:
+ charsetProperty.setVal(Charset.SYMBOL_CHARSET);
+ break;
+ case Font.DEFAULT_CHARSET:
+ charsetProperty.setVal(Charset.DEFAULT_CHARSET);
+ break;
+ default:
+ throw new RuntimeException("Attention: an attempt to set a type of unknow charset and charset");
+ }
+
+ fontWrapper.setCharset(charsetProperty);
}
+
public void setColor(short color) {
- // TODO Auto-generated method stub
+ CTColor ctColor;
+ if(fontWrapper.getCTFont().getColorArray().length==0){
+ ctColor=fontWrapper.getCTFont().addNewColor();
+ }
+ else{
+ ctColor=CTColor.Factory.newInstance();
+ }
+ switch (color) {
+ case Font.COLOR_NORMAL:{
+ ctColor.setIndexed(XSSFFont.DEFAULT_FONT_COLOR);
+ break;
+ }
+ case Font.COLOR_RED:{
+ ctColor.setIndexed(IndexedColors.RED);
+ break;
+ }
+ default:
+ ctColor.setIndexed(color);
+ }
+
+ fontWrapper.setColor(ctColor);
}
+
+
public void setFontHeight(short height) {
- // TODO Auto-generated method stub
-
+ CTFontSize fontSize;
+ if(fontWrapper.getCTFont().getSzArray().length==0){
+ fontSize=fontWrapper.getCTFont().addNewSz();
+ }
+ else{
+ fontSize=CTFontSize.Factory.newInstance();
+ }
+ fontSize.setVal(height*20);
+ fontWrapper.setSz(fontSize);
}
+
public void setFontHeightInPoints(short height) {
- // TODO Auto-generated method stub
-
+ CTFontSize fontSize;
+ if(fontWrapper.getCTFont().getSzArray().length==0){
+ fontSize=fontWrapper.getCTFont().addNewSz();
+ }
+ else{
+ fontSize=CTFontSize.Factory.newInstance();
+ }
+
+ fontSize.setVal(height);
+ fontWrapper.setSz(fontSize);
}
+
+
public void setFontName(String name) {
- // TODO Auto-generated method stub
-
+ CTFontName fontName;
+ if(fontWrapper.getCTFont().getNameArray().length==0){
+ fontName=fontWrapper.getCTFont().addNewName();
+ }
+ else{
+ fontName=CTFontName.Factory.newInstance();
+ }
+
+ fontName.setVal(name);
+ fontWrapper.setName(fontName);
}
+
public void setItalic(boolean italic) {
- // TODO Auto-generated method stub
-
+ CTBooleanProperty bool;
+ if(fontWrapper.getCTFont().getIArray().length==0){
+ bool=fontWrapper.getCTFont().addNewI();
+ }
+ else{
+ bool=CTBooleanProperty.Factory.newInstance();
+ }
+
+ bool.setVal(italic);
+ fontWrapper.setI(bool);
}
public void setStrikeout(boolean strikeout) {
- // TODO Auto-generated method stub
-
+ CTBooleanProperty strike;
+ if(fontWrapper.getCTFont().getStrikeArray().length==0){
+ strike=fontWrapper.getCTFont().addNewStrike();
+ }
+ else{
+ strike=CTBooleanProperty.Factory.newInstance();
+ }
+ strike.setVal(strikeout);
+ fontWrapper.setStrike(strike);
}
public void setTypeOffset(short offset) {
- // TODO Auto-generated method stub
-
+ CTVerticalAlignFontProperty offsetProperty;
+ if(fontWrapper.getCTFont().getVertAlignArray().length==0){
+ offsetProperty=fontWrapper.getCTFont().addNewVertAlign();
+ }
+ else{
+ offsetProperty=CTVerticalAlignFontProperty.Factory.newInstance();
+ }
+ switch (offset) {
+ case Font.SS_NONE:
+ offsetProperty.setVal(STVerticalAlignRun.BASELINE);
+ break;
+ case Font.SS_SUB:
+ offsetProperty.setVal(STVerticalAlignRun.SUBSCRIPT);
+ break;
+ case Font.SS_SUPER:
+ offsetProperty.setVal(STVerticalAlignRun.SUPERSCRIPT);
+ break;
+ }
+ fontWrapper.setVertAlign(offsetProperty);
}
public void setUnderline(byte underline) {
- // TODO Auto-generated method stub
-
+ CTUnderlineProperty ctUnderline;
+ if(fontWrapper.getCTFont().getUArray().length==0){
+ ctUnderline=fontWrapper.getCTFont().addNewU();
+ }
+ else{
+ ctUnderline=CTUnderlineProperty.Factory.newInstance();
+ }
+ switch (underline) {
+ case Font.U_DOUBLE:
+ ctUnderline.setVal(STUnderlineValues.DOUBLE);
+ break;
+ case Font.U_DOUBLE_ACCOUNTING:
+ ctUnderline.setVal(STUnderlineValues.DOUBLE_ACCOUNTING);
+ break;
+ case Font.U_SINGLE_ACCOUNTING:
+ ctUnderline.setVal(STUnderlineValues.SINGLE_ACCOUNTING);
+ break;
+ case Font.U_NONE:
+ ctUnderline.setVal(STUnderlineValues.NONE);
+ break;
+
+ case Font.U_SINGLE:
+ default:
+ ctUnderline.setVal(STUnderlineValues.SINGLE);
+ break;
+ }
+
+ fontWrapper.setU(ctUnderline);
}
-
+
+
public long putFont(LinkedList<CTFont> fonts) {
+ //TODO
+ /*
+ * we need to implement a method equals to check that 2 instances of CTFont
+ * are different by comparison of all font attributes.
+ * NB: take a look to findFont method in XSSFWorkbook
+ */
+ CTFont font=fontWrapper.getCTFont();
if(fonts.contains(font)) {
return fonts.indexOf(font);
}
@@ -146,4 +420,72 @@ public class XSSFFont implements Font {
return fonts.size() - 1;
}
+ // solo di xssfFont - non di Font-
+ //sono utilizzati nel metodo createDefaultFont in StylesTable insta.
+
+ public int getScheme(){
+ int fontScheme = fontWrapper.getFontScheme().getVal().intValue();
+ switch (fontScheme) {
+ case STFontScheme.INT_MAJOR:
+ return XSSFFont.SCHEME_MAJOR;
+ case STFontScheme.INT_MINOR:
+ return XSSFFont.SCHEME_MINOR;
+ case STFontScheme.INT_NONE:
+ return XSSFFont.SCHEME_NONE;
+
+ default:
+ return fontScheme;
+ }
+ }
+
+
+ public void setScheme(int scheme){
+ CTFontScheme ctFontScheme;
+ if(fontWrapper.getCTFont().getSchemeArray().length==0){
+ ctFontScheme=fontWrapper.getCTFont().addNewScheme();
+ }
+ else{
+ ctFontScheme=CTFontScheme.Factory.newInstance();
+ }
+ switch (scheme) {
+ case XSSFFont.SCHEME_MAJOR:
+ ctFontScheme.setVal(STFontScheme.MAJOR);
+ break;
+ case XSSFFont.SCHEME_MINOR:
+ ctFontScheme.setVal(STFontScheme.MINOR);
+ break;
+ case XSSFFont.SCHEME_NONE:
+ ctFontScheme.setVal(STFontScheme.NONE);
+ break;
+ default:
+ throw new RuntimeException("Schema value ["+ scheme +"] not supported in XSSFFont");
+ }
+
+ fontWrapper.setFontScheme(ctFontScheme);
+ }
+
+
+
+ public int getFamily(){
+ if(fontWrapper.getFamily()!=null)
+ return fontWrapper.getFamily().getVal();
+ else
+ return XSSFFont.FONT_FAMILY_SWISS;
+ }
+
+ public void setFamily(int value){
+ //TODO
+ CTIntProperty family;
+ if(fontWrapper.getCTFont().getSchemeArray().length==0){
+ family=fontWrapper.getCTFont().addNewFamily();
+ }
+ else{
+ family=CTIntProperty.Factory.newInstance();
+ }
+ family.setVal(value);
+ //fontWrapper.setFamily
+ }
+
+
+
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
index a2d188a3d2..624cb093d2 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
@@ -257,5 +257,9 @@ public class XSSFRow implements Row {
this.row.setHidden(height);
}
+
+ public CTRow getCTRow(){
+ return this.row;
+ }
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
index f619be8d2f..6f2b1da3b9 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
@@ -45,28 +45,38 @@ import org.apache.xmlbeans.XmlOptions;
import org.openxml4j.opc.PackagePart;
import org.openxml4j.opc.PackageRelationship;
import org.openxml4j.opc.PackageRelationshipCollection;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBreak;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTControls;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCustomProperties;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDialogsheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHyperlink;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCell;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCells;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTOutlinePr;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageBreak;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageMargins;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageSetUpPr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageSetup;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPane;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPrintOptions;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRecord;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSelection;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetData;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetPr;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetProtection;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetView;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetViews;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPane;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STSheetState;
public class XSSFSheet implements Sheet {
@@ -79,9 +89,12 @@ public class XSSFSheet implements Sheet {
protected XSSFWorkbook workbook;
protected CommentsSource sheetComments;
protected CTMergeCells ctMergeCells;
+
+
protected ArrayList<Drawing> drawings;
protected ArrayList<Control> controls;
+
public static final short LeftMargin = 0;
public static final short RightMargin = 1;
public static final short TopMargin = 2;
@@ -598,13 +611,15 @@ public class XSSFSheet implements Sheet {
}
public boolean getRowSumsBelow() {
- // TODO Auto-generated method stub
- return false;
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ CTOutlinePr outLinePr = sheetPr.getOutlinePr();
+ return outLinePr.getSummaryBelow();
}
public boolean getRowSumsRight() {
- // TODO Auto-generated method stub
- return false;
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ CTOutlinePr outLinePr = sheetPr.getOutlinePr();
+ return outLinePr.getSummaryRight();
}
public boolean getScenarioProtect() {
@@ -633,15 +648,56 @@ public class XSSFSheet implements Sheet {
return getSheetTypePrintOptions().getVerticalCentered();
}
+
public void groupColumn(short fromColumn, short toColumn) {
- // TODO Auto-generated method stub
-
+ CTCols ctCols=worksheet.getColsArray(0);
+ CTCol ctCol=CTCol.Factory.newInstance();
+ ctCol.setMin(fromColumn);
+ ctCol.setMax(toColumn);
+ this.columnHelper.addCleanColIntoCols(ctCols, ctCol);
+ for(int index=fromColumn;index<=toColumn;index++){
+ CTCol col=columnHelper.getColumn(index, false);
+ //col must exist
+ short outlineLevel=col.getOutlineLevel();
+ col.setOutlineLevel((short)(outlineLevel+1));
+ index=(int)col.getMax();
+ }
+ worksheet.setColsArray(0,ctCols);
+ setSheetFormatPrOutlineLevelCol();
}
public void groupRow(int fromRow, int toRow) {
- // TODO Auto-generated method stub
-
+ for(int i=fromRow;i<=toRow;i++){
+ XSSFRow xrow=(XSSFRow)getRow(i-1);
+ if(xrow==null){//create a new Row
+ xrow=(XSSFRow)createRow(i-1);
+ }
+ CTRow ctrow=xrow.getCTRow();
+ short outlineLevel=ctrow.getOutlineLevel();
+ ctrow.setOutlineLevel((short)(outlineLevel+1));
+ }
+ setSheetFormatPrOutlineLevelRow();
+ }
+
+ private short getMaxOutlineLevelRows(){
+ short outlineLevel=0;
+ for(Row r:rows){
+ XSSFRow xrow=(XSSFRow)r;
+ outlineLevel=xrow.getCTRow().getOutlineLevel()>outlineLevel? xrow.getCTRow().getOutlineLevel(): outlineLevel;
+ }
+ return outlineLevel;
}
+
+
+ private short getMaxOutlineLevelCols(){
+ CTCols ctCols=worksheet.getColsArray(0);
+ CTCol[]colArray=ctCols.getColArray();
+ short outlineLevel=0;
+ for(CTCol col: colArray){
+ outlineLevel=col.getOutlineLevel()>outlineLevel? col.getOutlineLevel(): outlineLevel;
+ }
+ return outlineLevel;
+ }
public boolean isColumnBroken(short column) {
CTBreak[] brkArray = getSheetTypeColumnBreaks().getBrkArray();
@@ -720,9 +776,10 @@ public class XSSFSheet implements Sheet {
public void removeRow(Row row) {
int counter = 0;
+ int rowNum=row.getRowNum();
for (Iterator<Row> it = rowIterator() ; it.hasNext() ; ) {
Row r = it.next();
- if (r.getRowNum() == row.getRowNum()) {
+ if (r.getRowNum() == rowNum) {
it.remove();
worksheet.getSheetData().removeRow(counter);
}
@@ -804,7 +861,12 @@ public class XSSFSheet implements Sheet {
}
public void setDialog(boolean b) {
- // TODO Auto-generated method stub
+ if(b && dialogsheet == null){
+ CTDialogsheet dialogSheet = CTDialogsheet.Factory.newInstance();
+ dialogsheet = dialogSheet;
+ }else{
+ dialogsheet = null;
+ }
}
public void setDisplayFormulas(boolean show) {
@@ -884,13 +946,15 @@ public class XSSFSheet implements Sheet {
}
public void setRowSumsBelow(boolean b) {
- // TODO Auto-generated method stub
-
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ CTOutlinePr outLinePr = sheetPr.getOutlinePr();
+ outLinePr.setSummaryBelow(b);
}
public void setRowSumsRight(boolean b) {
- // TODO Auto-generated method stub
-
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ CTOutlinePr outLinePr = sheetPr.getOutlinePr();
+ outLinePr.setSummaryRight(b);
}
public void setVerticallyCenter(boolean value) {
@@ -946,16 +1010,51 @@ public class XSSFSheet implements Sheet {
getSheetTypeSheetView().setTopLeftCell(cellRef);
}
- public void ungroupColumn(short fromColumn, short toColumn) {
- // TODO Auto-generated method stub
-
+public void ungroupColumn(short fromColumn, short toColumn) {
+ CTCols cols=worksheet.getColsArray(0);
+ for(int index=fromColumn;index<=toColumn;index++){
+ CTCol col=columnHelper.getColumn(index, false);
+ if(col!=null){
+ short outlineLevel=col.getOutlineLevel();
+ col.setOutlineLevel((short)(outlineLevel-1));
+ index=(int)col.getMax();
+
+ if(col.getOutlineLevel()<=0){
+ int colIndex=columnHelper.getIndexOfColumn(cols,col);
+ worksheet.getColsArray(0).removeCol(colIndex);
+ }
+ }
+ }
+ worksheet.setColsArray(0,cols);
+ setSheetFormatPrOutlineLevelCol();
}
public void ungroupRow(int fromRow, int toRow) {
- // TODO Auto-generated method stub
-
+ for(int i=fromRow;i<=toRow;i++){
+ XSSFRow xrow=(XSSFRow)getRow(i-1);
+ if(xrow!=null){
+ CTRow ctrow=xrow.getCTRow();
+ short outlinelevel=ctrow.getOutlineLevel();
+ ctrow.setOutlineLevel((short)(outlinelevel-1));
+ //remove a row only if the row has no cell and if the outline level is 0
+ if(ctrow.getOutlineLevel()==0 && xrow.getFirstCellNum()==-1){
+ removeRow(xrow);
+ }
+ }
+ }
+ setSheetFormatPrOutlineLevelRow();
}
+ private void setSheetFormatPrOutlineLevelRow(){
+ short maxLevelRow=getMaxOutlineLevelRows();
+ getSheetTypeSheetFormatPr().setOutlineLevelRow((short)(maxLevelRow));
+ }
+
+ private void setSheetFormatPrOutlineLevelCol(){
+ short maxLevelCol=getMaxOutlineLevelCols();
+ getSheetTypeSheetFormatPr().setOutlineLevelCol((short)(maxLevelCol));
+ }
+
public void setSelected(boolean flag) {
CTSheetViews views = getSheetTypeSheetViews();
for (CTSheetView view : views.getSheetViewArray()) {
@@ -1101,4 +1200,9 @@ public class XSSFSheet implements Sheet {
}
return getDefaultSheetView().getPane();
}
+
+
+
+
+
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
index cbf7db3f39..b90058e543 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
@@ -65,6 +65,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBookViews;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDefinedName;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDefinedNames;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDialogsheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
@@ -260,8 +261,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
public Font createFont() {
- // TODO Auto-generated method stub
- return null;
+ return new XSSFFont();
}
public XSSFName createName() {
@@ -306,8 +306,22 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
public Font findFont(short boldWeight, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) {
- // TODO Auto-generated method stub
- return null;
+ short fontNum=getNumberOfFonts();
+ for (short i = 0; i <= fontNum; i++) {
+ XSSFFont xssfFont = (XSSFFont)getFontAt(i);
+ if (xssfFont.getBoldweight() == boldWeight
+ && xssfFont.getColor() == color
+ && xssfFont.getFontHeightInPoints() == fontHeight
+ && xssfFont.getFontName().equals(name)
+ && xssfFont.getItalic() == italic
+ && xssfFont.getStrikeout() == strikeout
+ && xssfFont.getTypeOffset() == typeOffset
+ && xssfFont.getUnderline() == underline)
+ {
+ return xssfFont;
+ }
+ }
+ return null;
}
public List getAllEmbeddedObjects() {
@@ -352,8 +366,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
public CellStyle getCellStyleAt(short idx) {
- // TODO Auto-generated method stub
- return null;
+ return stylesSource.getStyleAt(idx);
}
public Palette getCustomPalette() {
@@ -361,14 +374,24 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
return null;
}
+ /**
+ * get the first tab that is displayed in the list of tabs in excel.
+ */
+ public int getFirstVisibleTab() {
+ CTBookViews bookViews = workbook.getBookViews();
+ CTBookView bookView = bookViews.getWorkbookViewArray(0);
+ return (short) bookView.getActiveTab();
+ }
+ /**
+ * deprecated Aug 2008
+ * @deprecated - Misleading name - use getFirstVisibleTab()
+ */
public short getDisplayedTab() {
- // TODO Auto-generated method stub
- return 0;
+ return (short) getFirstVisibleTab();
}
public Font getFontAt(short idx) {
- // TODO Auto-generated method stub
- return null;
+ return stylesSource.getFontAt(idx);
}
public XSSFName getNameAt(int index) {
@@ -395,9 +418,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
return null;
}
- public short getNumCellStyles() {
- // TODO Auto-generated method stub
- return 0;
+ public short getNumCellStyles() {
+ return (short) ((StylesTable)stylesSource).getNumCellStyles();
}
public short getNumberOfFonts() {
@@ -553,9 +575,22 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
+ /**
+ * sets the first tab that is displayed in the list of tabs
+ * in excel.
+ * @param index
+ */
+ public void setFirstVisibleTab(short index) {
+ CTBookViews bookViews = workbook.getBookViews();
+ CTBookView bookView= bookViews.getWorkbookViewArray(0);
+ bookView.setActiveTab(index);
+ }
+ /**
+ * deprecated Aug 2008
+ * @deprecated - Misleading name - use setFirstVisibleTab()
+ */
public void setDisplayedTab(short index) {
- // TODO Auto-generated method stub
-
+ setFirstVisibleTab(index);
}
public void setPrintArea(int sheetIndex, String reference) {
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java
index 6540441ebd..db3e06fd47 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java
@@ -18,6 +18,7 @@ package org.apache.poi.xssf.usermodel.extensions;
import java.util.LinkedList;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPatternFill;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType.Enum;
@@ -65,5 +66,15 @@ public class XSSFCellFill {
public CTFill getCTFill() {
return this.fill;
}
+ public void setFillBackgroundColor(long index) {
+ CTColor ctColor=fill.getPatternFill().addNewBgColor();
+ ctColor.setIndexed(index);
+ fill.getPatternFill().setBgColor(ctColor);
+ }
+ public void setFillForegroundColor(long index) {
+ CTColor ctColor=fill.getPatternFill().addNewFgColor();
+ ctColor.setIndexed(index);
+ fill.getPatternFill().setFgColor(ctColor);
+ }
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java
index c7806be748..79ebb774d6 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java
@@ -161,15 +161,18 @@ public class ColumnHelper {
* Insert a new CTCol at position 0 into cols, setting min=min, max=max and
* copying all the colsWithAttributes array cols attributes into newCol
*/
- private CTCol insertCol(CTCols cols, long min, long max,
- CTCol[] colsWithAttributes) {
- CTCol newCol = cols.insertNewCol(0);
- newCol.setMin(min);
- newCol.setMax(max);
- for (CTCol col : colsWithAttributes) {
- setColumnAttributes(col, newCol);
+ private CTCol insertCol(CTCols cols, long min, long max,
+ CTCol[] colsWithAttributes) {
+ if(!columnExists(cols,min,max)){
+ CTCol newCol = cols.insertNewCol(0);
+ newCol.setMin(min);
+ newCol.setMax(max);
+ for (CTCol col : colsWithAttributes) {
+ setColumnAttributes(col, newCol);
+ }
+ return newCol;
}
- return newCol;
+ return null;
}
public boolean columnExists(CTCols cols, long index) {
@@ -186,6 +189,9 @@ public class ColumnHelper {
toCol.setHidden(fromCol.getHidden());
toCol.setBestFit(fromCol.getBestFit());
toCol.setStyle(fromCol.getStyle());
+ if(fromCol.getOutlineLevel()!=0){
+ toCol.setOutlineLevel(fromCol.getOutlineLevel());
+ }
}
public void setColBestFit(long index, boolean bestFit) {
@@ -229,5 +235,22 @@ public class ColumnHelper {
}
return -1;
}
-
+
+ private boolean columnExists(CTCols cols, long min, long max) {
+ for (int i = 0; i < cols.sizeOfColArray(); i++) {
+ if (cols.getColArray(i).getMin() == min && cols.getColArray(i).getMax() == max) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public int getIndexOfColumn(CTCols cols, CTCol col) {
+ for (int i = 0; i < cols.sizeOfColArray(); i++) {
+ if (cols.getColArray(i).getMin() == col.getMin() && cols.getColArray(i).getMax() == col.getMax()) {
+ return i;
+ }
+ }
+ return -1;
+ }
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/util/CTFontWrapper.java b/src/ooxml/java/org/apache/poi/xssf/util/CTFontWrapper.java
new file mode 100755
index 0000000000..c772a7566e
--- /dev/null
+++ b/src/ooxml/java/org/apache/poi/xssf/util/CTFontWrapper.java
@@ -0,0 +1,176 @@
+package org.apache.poi.xssf.util;
+
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontName;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontScheme;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIntProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty;
+
+/*
+ * The font element in xml is definited like <choice maxOccurs="unbounded">.
+ * So in the java object CTFont all methods get and set returns an array of elements also if there is always defined
+ * only one type of attribute per type.
+ * This class is made to make simple using method get and set instead of getArray() or set(index,object).
+ * We consider always the index 0 like the only one index to refer of CT_Font attribute.
+ *
+ */
+
+
+public class CTFontWrapper{
+
+ private CTFont font;
+
+
+ public CTFontWrapper(CTFont font){
+ this.font=font;
+ }
+
+ public CTFont getCTFont(){
+ return font;
+ }
+
+
+ public CTBooleanProperty getB(){
+ if( font.getBArray().length>0)
+ return font.getBArray(0);
+ else
+ return null;
+ }
+
+
+ public CTIntProperty getCharset(){
+ if(font.getCharsetArray().length>0)
+ return font.getCharsetArray(0);
+ else
+ return null;
+ }
+
+ public CTColor getColor(){
+ if(font.getColorArray().length>0)
+ return font.getColorArray(0);
+ else
+ return null;
+ }
+
+ public CTBooleanProperty getStrike(){
+ if(font.getStrikeArray().length>0)
+ return font.getStrikeArray(0);
+ else
+ return null;
+ }
+
+ public CTVerticalAlignFontProperty getVertAlign() {
+ if(font.getVertAlignArray().length>0)
+ return font.getVertAlignArray(0);
+ else
+ return null;
+ }
+
+ public CTFontName setName(){
+ if(font.getNameArray().length>0)
+ return font.getNameArray(0);
+ else
+ return null;
+ }
+
+ public CTFontSize getSz(){
+ if(font.getSzArray().length>0)
+ return font.getSzArray(0);
+ else
+ return null;
+ }
+
+ public CTBooleanProperty getI(){
+ if(font.getIArray().length>0)
+ return font.getIArray(0);
+ else
+ return null;
+ }
+
+
+
+ public CTUnderlineProperty getU(){
+ if(font.getUArray().length>0)
+ return font.getUArray(0);
+ else
+ return null;
+ }
+
+ public void setB(CTBooleanProperty value){
+ font.setBArray(0,value);
+ }
+
+ public void setCharset(CTIntProperty value){
+ font.setCharsetArray(0, value);
+ }
+
+ public void setColor(CTColor value){
+ font.setColorArray(0,value);
+ }
+
+ public void setFontName(CTFontName value){
+ font.setNameArray(0,value);
+ }
+
+ public void setSz(CTFontSize value){
+ font.setSzArray(0,value);
+ }
+ public void setI(CTBooleanProperty value){
+ font.setIArray(0,value);
+ }
+
+ public void setU(CTUnderlineProperty value){
+ font.setUArray(0,value);
+ }
+
+
+ public void setStrike(CTBooleanProperty value){
+ font.setStrikeArray(0,value);
+ }
+
+
+ public void setVertAlign(CTVerticalAlignFontProperty value){
+ font.setVertAlignArray(0,value);
+ }
+
+
+ public void setName(CTFontName fontName) {
+ font.setNameArray(0,fontName);
+ }
+
+ public CTFontName getName() {
+ return font.getNameArray(0);
+ }
+
+ public CTIntProperty getFamily() {
+ return font.getFamilyArray(0);
+ }
+
+ public void setFamily(CTIntProperty family) {
+ font.setFamilyArray(0,family);
+ }
+
+
+ public void setFontScheme(CTFontScheme ctFontScheme) {
+ font.setSchemeArray(0,ctFontScheme);
+ }
+
+ public CTFontScheme getFontScheme() {
+ return font.getSchemeArray(0);
+ }
+
+ // methods used in FontFormatting
+
+ public CTBooleanProperty getOutline(){
+ return font.getOutlineArray(0);
+ }
+
+
+
+}
+
+ \ No newline at end of file
diff --git a/src/ooxml/java/org/apache/poi/xssf/util/Charset.java b/src/ooxml/java/org/apache/poi/xssf/util/Charset.java
new file mode 100755
index 0000000000..e9bdaa3cd1
--- /dev/null
+++ b/src/ooxml/java/org/apache/poi/xssf/util/Charset.java
@@ -0,0 +1,27 @@
+package org.apache.poi.xssf.util;
+
+public class Charset {
+
+ public static final int ANSI_CHARSET=0;
+ public static final int DEFAULT_CHARSET=1;
+ public static final int SYMBOL_CHARSET=2;
+ public static final int MAC_CHARSET=77;
+ public static final int SHIFTJIS_CHARSET=128;
+ public static final int HANGEUL_CHARSET=129;
+ public static final int HANGUL_CHARSET=129;
+ public static final int JOHAB_CHARSET=130;
+ public static final int GB2312_CHARSET=134;
+ public static final int CHINESEBIG5_CHARSET=136;
+ public static final int GREEK_CHARSET=161;
+ public static final int TURKISH_CHARSET=162;
+ public static final int VIETNAMESE_CHARSET=163;
+ public static final int HEBREW_CHARSET=177;
+ public static final int ARABIC_CHARSET=178;
+ public static final int BALTIC_CHARSET=186;
+ public static final int RUSSIAN_CHARSET=204;
+ public static final int THAI_CHARSET=222;
+ public static final int EASTEUROPE_CHARSET=238;
+ public static final int OEM_CHARSET=255;
+
+
+}
diff --git a/src/ooxml/java/org/apache/poi/xssf/util/IndexedColors.java b/src/ooxml/java/org/apache/poi/xssf/util/IndexedColors.java
new file mode 100755
index 0000000000..b54ee9bae9
--- /dev/null
+++ b/src/ooxml/java/org/apache/poi/xssf/util/IndexedColors.java
@@ -0,0 +1,16 @@
+package org.apache.poi.xssf.util;
+
+public class IndexedColors {
+
+ public static int BLACK=0;
+ public static int WHITE=1;
+ public static int RED=2;
+ public static int GREEN=3;
+ public static int BLUE=4;
+ public static int YELLOW=5;
+ public static int PINK=6;
+
+ public static int LIGHT_GREY=22;
+ public static int DARK_GREY=23;
+
+}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/AllXSSFTests.java b/src/ooxml/testcases/org/apache/poi/xssf/AllXSSFTests.java
index ad53d9fa29..fe3574fe30 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/AllXSSFTests.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/AllXSSFTests.java
@@ -27,6 +27,9 @@ import org.apache.poi.xssf.io.TestLoadSaveXSSF;
import org.apache.poi.xssf.model.TestCommentsTable;
import org.apache.poi.xssf.model.TestStylesTable;
import org.apache.poi.xssf.usermodel.AllXSSFUsermodelTests;
+import org.apache.poi.xssf.usermodel.TestXSSFFont;
+import org.apache.poi.xssf.usermodel.TestXSSFSheet;
+import org.apache.poi.xssf.usermodel.TestXSSFWorkbook;
import org.apache.poi.xssf.util.TestCTColComparator;
import org.apache.poi.xssf.util.TestNumericRanges;
@@ -40,7 +43,6 @@ public final class AllXSSFTests {
public static Test suite() {
TestSuite result = new TestSuite(AllXSSFTests.class.getName());
result.addTest(AllXSSFUsermodelTests.suite());
-
result.addTestSuite(TestXSSFReader.class);
result.addTestSuite(TestXSSFExcelExtractor.class);
result.addTestSuite(TestLoadSaveXSSF.class);
@@ -48,7 +50,7 @@ public final class AllXSSFTests {
result.addTestSuite(TestStylesTable.class);
result.addTestSuite(TestCellReference.class);
result.addTestSuite(TestCTColComparator.class);
- result.addTestSuite(TestNumericRanges.class);
+ result.addTestSuite(TestNumericRanges.class);
return result;
}
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java
index 9509d787ca..322945223e 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java
@@ -52,6 +52,9 @@ public final class AllXSSFUsermodelTests {
result.addTestSuite(TestXSSFRow.class);
result.addTestSuite(TestXSSFSheet.class);
result.addTestSuite(TestXSSFWorkbook.class);
+
+ result.addTestSuite(TestXSSFFont.class);
+
return result;
}
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java
index 77afcb9693..e7e9bb7606 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java
@@ -19,11 +19,13 @@ package org.apache.poi.xssf.usermodel;
import junit.framework.TestCase;
+import org.apache.poi.ss.usermodel.StylesSource;
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.apache.poi.xssf.usermodel.extensions.XSSFColor;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide;
+import org.apache.poi.xssf.util.IndexedColors;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellXfs;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
@@ -222,8 +224,33 @@ public class TestXSSFCellStyle extends TestCase {
assertEquals(8, cellStyle.getFillPattern());
}
- public void testGetFont() {
- assertNotNull(cellStyle.getFont());
+ public void testGetSetFont() {
+ assertNotNull(this.cellStyle.getFont());
+
+ StylesSource stylesSource=new StylesTable();
+ XSSFFont xssfFont=new XSSFFont();
+ xssfFont.setFontName("Arial");
+ stylesSource.putFont(xssfFont);
+ XSSFCellStyle cellStyle=new XSSFCellStyle(stylesSource);
+
+ XSSFFont xssfFont2=new XSSFFont();
+ xssfFont2.setFontName("courier");
+ xssfFont2.setFontHeightInPoints((short)10);
+
+ cellStyle.setFont(xssfFont2);
+ assertEquals(2,cellStyle.getFontIndex());
+ assertEquals(xssfFont2.getFontName(),cellStyle.getFont().getFontName());
+ assertEquals(stylesSource.getFontAt(2).getFontHeightInPoints(),cellStyle.getFont().getFontHeightInPoints());
+
+ cellStyle.setFont(xssfFont);
+ assertEquals(1,cellStyle.getFontIndex());
+
+
+ XSSFFont xssfFont3=new XSSFFont();
+ xssfFont3.setFontName("Arial");
+ cellStyle.setFont(xssfFont3);
+ assertNotSame(1,cellStyle.getFontIndex());
+
}
public void testGetSetHidden() {
@@ -274,6 +301,32 @@ public class TestXSSFCellStyle extends TestCase {
assertFalse(cellXf.getAlignment().getWrapText());
}
+ public void testGetSetFillBackgroundColor() {
+ setUp();
+ CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
+ CTColor ctBgColor = ctPatternFill.addNewBgColor();
+ ctBgColor.setIndexed(IndexedColors.BLUE);
+ assertEquals(IndexedColors.BLUE, cellStyle.getFillBackgroundColor());
+
+ cellStyle.setFillBackgroundColor((short)IndexedColors.GREEN);
+ assertEquals(IndexedColors.GREEN,ctFill.getPatternFill().getBgColor().getIndexed());
+ }
+
+ public void testGetSetFillForegroundColor() {
+ setUp();
+
+ CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
+ CTColor ctFgColor = ctPatternFill.addNewFgColor();
+ ctFgColor.setIndexed(5);
+ assertEquals(5, cellStyle.getFillForegroundColor());
+
+ ctFgColor.setIndexed(IndexedColors.BLUE);
+ assertEquals(IndexedColors.BLUE, cellStyle.getFillForegroundColor());
+
+ cellStyle.setFillForegroundColor((short)IndexedColors.GREEN);
+ assertEquals(IndexedColors.GREEN,ctFill.getPatternFill().getFgColor().getIndexed());
+ }
+
/**
* Cloning one XSSFCellStyle onto Another, same XSSFWorkbook
*/
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java
new file mode 100755
index 0000000000..18557639e0
--- /dev/null
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java
@@ -0,0 +1,297 @@
+package org.apache.poi.xssf.usermodel;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.util.CTFontWrapper;
+import org.apache.poi.xssf.util.Charset;
+import org.apache.poi.xssf.util.IndexedColors;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontName;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontScheme;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIntProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;
+
+public class TestXSSFFont extends TestCase{
+
+ public void testConstructor(){
+ XSSFFont xssfFont=new XSSFFont();
+ assertNotNull(xssfFont);
+ assertNotNull(xssfFont.getCTFont());
+ }
+
+
+ public void testBoldweight(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+
+ CTBooleanProperty bool=wrapper.getCTFont().addNewB();
+ bool.setVal(false);
+ wrapper.setB(bool);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(Font.BOLDWEIGHT_NORMAL, xssfFont.getBoldweight());
+
+
+ xssfFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ assertEquals(ctFont.getBArray().length,1);
+ assertEquals(true, ctFont.getBArray(0).getVal());
+ assertEquals(true,wrapper.getB().getVal());
+
+ }
+
+ public void testCharSet(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTIntProperty prop=ctFont.addNewCharset();
+ prop.setVal(Charset.ANSI_CHARSET);
+
+ wrapper.setCharset(prop);
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(Font.ANSI_CHARSET,xssfFont.getCharSet());
+
+ xssfFont.setCharSet(Font.DEFAULT_CHARSET);
+ assertEquals(Charset.DEFAULT_CHARSET, wrapper.getCharset().getVal());
+ }
+
+
+ public void testFontName(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTFontName fname=ctFont.addNewName();
+ fname.setVal("Arial");
+ wrapper.setFontName(fname);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals("Arial", xssfFont.getFontName());
+
+ xssfFont.setFontName("Courier");
+ assertEquals("Courier",wrapper.getName().getVal());
+ }
+
+
+ public void testItalic(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+
+ CTBooleanProperty bool=wrapper.getCTFont().addNewI();
+ bool.setVal(false);
+ wrapper.setI(bool);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(false, xssfFont.getItalic());
+
+ xssfFont.setItalic(true);
+ assertEquals(ctFont.getIArray().length,1);
+ assertEquals(true, ctFont.getIArray(0).getVal());
+ assertEquals(true,wrapper.getI().getVal());
+ }
+
+
+ public void testStrikeout(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+
+ CTBooleanProperty bool=wrapper.getCTFont().addNewStrike();
+ bool.setVal(false);
+ wrapper.setStrike(bool);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(false, xssfFont.getStrikeout());
+
+ xssfFont.setStrikeout(true);
+ assertEquals(ctFont.getStrikeArray().length,1);
+ assertEquals(true, ctFont.getStrikeArray(0).getVal());
+ assertEquals(true,wrapper.getStrike().getVal());
+ }
+
+
+ public void testFontHeight(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTFontSize size=ctFont.addNewSz();
+ size.setVal(11);
+ wrapper.setSz(size);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(11/20,xssfFont.getFontHeight());
+
+ xssfFont.setFontHeight((short)20);
+ assertEquals(new Double(20*20).doubleValue(),wrapper.getSz().getVal()); }
+
+
+ public void testFontHeightInPoint(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTFontSize size=ctFont.addNewSz();
+ size.setVal(14);
+ wrapper.setSz(size);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(14,xssfFont.getFontHeightInPoints());
+
+ xssfFont.setFontHeightInPoints((short)20);
+ assertEquals(new Double(20).doubleValue(),wrapper.getSz().getVal());
+ }
+
+
+ public void testUnderline(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+
+ CTUnderlineProperty underlinePropr=wrapper.getCTFont().addNewU();
+ underlinePropr.setVal(STUnderlineValues.SINGLE);
+ wrapper.setU(underlinePropr);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(Font.U_SINGLE, xssfFont.getUnderline());
+
+ xssfFont.setUnderline(Font.U_DOUBLE);
+ assertEquals(ctFont.getUArray().length,1);
+ assertEquals(STUnderlineValues.DOUBLE,wrapper.getU().getVal());
+ }
+
+ public void testColor(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTColor color=ctFont.addNewColor();
+ //color.setIndexed(IndexedColors.DEFAULT_COLOR);
+ color.setIndexed(XSSFFont.DEFAULT_FONT_COLOR);
+ wrapper.setColor(color);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(Font.COLOR_NORMAL,xssfFont.getColor());
+
+ xssfFont.setColor(Font.COLOR_RED);
+ assertEquals(IndexedColors.RED,wrapper.getColor().getIndexed());
+ }
+
+
+ public void testFamily(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTIntProperty family=ctFont.addNewFamily();
+ family.setVal(XSSFFont.FONT_FAMILY_MODERN);
+ wrapper.setFamily(family);
+
+ XSSFFont xssfFont=new XSSFFont(ctFont);
+ assertEquals(XSSFFont.FONT_FAMILY_MODERN,xssfFont.getFamily());
+
+ }
+
+
+ public void testScheme(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTFontScheme scheme=ctFont.addNewScheme();
+ scheme.setVal(STFontScheme.MAJOR);
+ wrapper.setFontScheme(scheme);
+
+ XSSFFont font=new XSSFFont(ctFont);
+ assertEquals(XSSFFont.SCHEME_MAJOR,font.getScheme());
+
+ font.setScheme(XSSFFont.SCHEME_NONE);
+ assertEquals(STFontScheme.NONE,wrapper.getFontScheme().getVal());
+ }
+
+ public void testTypeOffset(){
+ CTFont ctFont=CTFont.Factory.newInstance();
+ CTFontWrapper wrapper=new CTFontWrapper(ctFont);
+ CTVerticalAlignFontProperty valign=ctFont.addNewVertAlign();
+ valign.setVal(STVerticalAlignRun.BASELINE);
+ wrapper.setVertAlign(valign);
+
+ XSSFFont font=new XSSFFont(ctFont);
+ assertEquals(Font.SS_NONE,font.getTypeOffset());
+
+ font.setTypeOffset(XSSFFont.SS_SUPER);
+ assertEquals(STVerticalAlignRun.SUPERSCRIPT,wrapper.getVertAlign().getVal());
+ }
+
+
+ public void testXSSFFont() throws IOException{
+ XSSFWorkbook workbook=new XSSFWorkbook();
+ //Font font1=workbook.createFont();
+
+ Sheet sheet=workbook.createSheet("sheet 1 - test font");
+
+
+ Row row=sheet.createRow(0);
+ Cell cell=row.createCell(0);
+ cell.setCellValue(new XSSFRichTextString("XSSFFont test example file"));
+ Font font=new XSSFFont();
+ font.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ font.setFontHeightInPoints((short)22);
+ font.setColor((short)IndexedColors.BLUE);
+ font.setFontName("Verdana");
+ CellStyle cellStyleTitle=workbook.createCellStyle();
+ cellStyleTitle.setFont(font);
+ cell.setCellStyle(cellStyleTitle);
+
+
+ row=sheet.createRow(3);
+ Font font1=new XSSFFont();
+ font1.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ font1.setItalic(true);
+ font1.setFontHeightInPoints((short)18);
+ font1.setColor(Font.COLOR_RED);
+ font1.setFontName("Arial");
+ CellStyle cellStyle1=workbook.createCellStyle();
+ cellStyle1.setFont(font1);
+
+ Cell cell1=row.createCell(0);
+ cell1.setCellValue(new XSSFRichTextString("red bold 18pt italic Arial"));
+ cell1.setCellStyle(cellStyle1);
+
+
+ row=sheet.createRow(4);
+ Font font2=new XSSFFont();
+ font2.setFontHeight((short)1);
+ font2.setFontName("Courier");
+ font2.setColor(Font.COLOR_NORMAL);
+ font2.setUnderline(Font.U_DOUBLE);
+ CellStyle cellStyle2=workbook.createCellStyle();
+ cellStyle2.setFont(font2);
+
+ Cell cell2=row.createCell(0);
+ cell2.setCellValue(new XSSFRichTextString("Something in courier underlined"));
+ cell2.setCellStyle(cellStyle2);
+
+
+ row=sheet.createRow(5);
+ cell1=row.createCell(0);
+ Font font3=new XSSFFont();
+ font3.setFontHeightInPoints((short)9);
+ font3.setFontName("Times");
+ font3.setStrikeout(true);
+ font3.setColor((short)IndexedColors.PINK);
+ CellStyle cellStyle3=workbook.createCellStyle();
+ cellStyle3.setFont(font3);
+
+ cell1.setCellValue(new XSSFRichTextString("pink italic Times 9pt strikeout!!!"));
+ cell1.setCellStyle(cellStyle3);
+
+ File tmpFile = new File("test-ooxml-font.xlsx");
+ if(tmpFile.exists()) tmpFile.delete();
+ FileOutputStream out = new FileOutputStream(tmpFile);
+ workbook.write(out);
+ out.close();
+ }
+
+
+}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
index 5964f69e04..628ffc027b 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
@@ -35,11 +35,11 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComments;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPane;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPaneState;
public class TestXSSFSheet extends TestCase {
@@ -727,4 +727,98 @@ public class TestXSSFSheet extends TestCase {
row9.setHeight((short) 9);
return sheet;
}
+
+
+
+ public void testGroupUngroupColumn() {
+ Workbook workbook = new XSSFWorkbook();
+ CTSheet ctSheet = CTSheet.Factory.newInstance();
+ CTWorksheet ctWorksheet = CTWorksheet.Factory.newInstance();
+ XSSFSheet sheet = new XSSFSheet(ctSheet, ctWorksheet, (XSSFWorkbook) workbook);
+
+ //one level
+ System.out.println("livello 1");
+ sheet.groupColumn((short)2,(short)7);
+ sheet.groupColumn((short)10,(short)11);
+ CTCols cols=sheet.getWorksheet().getColsArray(0);
+ assertEquals(2,cols.sizeOfColArray());
+ CTCol[]colArray=cols.getColArray();
+ assertNotNull(colArray);
+ assertEquals(2,colArray[0].getMin());
+ assertEquals(7,colArray[0].getMax());
+ assertEquals(1, colArray[0].getOutlineLevel());
+
+ //two level
+ System.out.println("\n livello 2");
+ sheet.groupColumn((short)1,(short)2);
+ cols=sheet.getWorksheet().getColsArray(0);
+ assertEquals(4,cols.sizeOfColArray());
+ colArray=cols.getColArray();
+ assertEquals(2, colArray[1].getOutlineLevel());
+
+ //three level
+ System.out.println("\n livello 3");
+ sheet.groupColumn((short)6,(short)8);
+ sheet.groupColumn((short)2,(short)3);
+ cols=sheet.getWorksheet().getColsArray(0);
+ assertEquals(7,cols.sizeOfColArray());
+ colArray=cols.getColArray();
+ assertEquals(3, colArray[1].getOutlineLevel());
+ assertEquals(3,sheet.getSheetTypeSheetFormatPr().getOutlineLevelCol());
+
+ sheet.ungroupColumn((short)8,(short) 10);
+ colArray=cols.getColArray();
+ //assertEquals(3, colArray[1].getOutlineLevel());
+
+ sheet.ungroupColumn((short)4,(short)6);
+ sheet.ungroupColumn((short)2,(short)2);
+ colArray=cols.getColArray();
+ assertEquals(4, colArray.length);
+ assertEquals(2,sheet.getSheetTypeSheetFormatPr().getOutlineLevelCol());
+ }
+
+
+ public void testGroupUngroupRow() {
+ Workbook workbook = new XSSFWorkbook();
+ CTSheet ctSheet = CTSheet.Factory.newInstance();
+ CTWorksheet ctWorksheet = CTWorksheet.Factory.newInstance();
+ XSSFSheet sheet = new XSSFSheet(ctSheet, ctWorksheet, (XSSFWorkbook) workbook);
+
+ //one level
+ sheet.groupRow(9,10);
+ assertEquals(2,sheet.rows.size());
+ CTRow[]rowArray=sheet.getWorksheet().getSheetData().getRowArray();
+ assertEquals(2,rowArray.length);
+ CTRow ctrow=rowArray[0];
+
+ assertNotNull(ctrow);
+ assertEquals(9,ctrow.getR());
+ assertEquals(1, ctrow.getOutlineLevel());
+ assertEquals(1,sheet.getSheetTypeSheetFormatPr().getOutlineLevelRow());
+
+ //two level
+ sheet.groupRow(10,13);
+ rowArray=sheet.getWorksheet().getSheetData().getRowArray();
+ assertEquals(5,rowArray.length);
+ assertEquals(5,sheet.rows.size());
+ ctrow=rowArray[1];
+ assertNotNull(ctrow);
+ assertEquals(10,ctrow.getR());
+ assertEquals(2, ctrow.getOutlineLevel());
+ assertEquals(2,sheet.getSheetTypeSheetFormatPr().getOutlineLevelRow());
+
+
+ sheet.ungroupRow(8, 10);
+ rowArray=sheet.getWorksheet().getSheetData().getRowArray();
+ assertEquals(4,rowArray.length);
+ assertEquals(1,sheet.getSheetTypeSheetFormatPr().getOutlineLevelRow());
+
+ sheet.ungroupRow(10,10);
+ rowArray=sheet.getWorksheet().getSheetData().getRowArray();
+ assertEquals(3,rowArray.length);
+ assertEquals(3,sheet.rows.size());
+
+ assertEquals(1,sheet.getSheetTypeSheetFormatPr().getOutlineLevelRow());
+ }
+
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
index 94b279cc8f..87cd37035e 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
@@ -25,19 +25,19 @@ import java.io.OutputStream;
import junit.framework.TestCase;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Name;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.StylesSource;
-import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.model.StylesTable;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
-
import org.openxml4j.opc.ContentTypes;
import org.openxml4j.opc.Package;
import org.openxml4j.opc.PackagePart;
import org.openxml4j.opc.PackagingURIHelper;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
public class TestXSSFWorkbook extends TestCase {
public TestXSSFWorkbook(String name) {
@@ -239,6 +239,85 @@ public class TestXSSFWorkbook extends TestCase {
}
+ public void testFindFont(){
+ //get dafault font and check against default value
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ Font fontFind=workbook.findFont(Font.BOLDWEIGHT_NORMAL, Font.COLOR_NORMAL, (short)11, "Calibri", false, false, Font.SS_NONE, Font.U_NONE);
+ assertNotNull(fontFind);
+
+ //get default font, then change 2 values and check against different values (height changes)
+ Font font=workbook.createFont();
+ font.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ font.setUnderline(Font.U_DOUBLE);
+ StylesSource styleSource=new StylesTable();
+ long index=styleSource.putFont(font);
+ System.out.println("index="+index);
+ workbook.setStylesSource(styleSource);
+ fontFind=workbook.findFont(Font.BOLDWEIGHT_BOLD, Font.COLOR_NORMAL, (short)15, "Calibri", false, false, Font.SS_NONE, Font.U_DOUBLE);
+ assertNull(fontFind);
+ }
+
+ public void testGetCellStyleAt(){
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ short i = 0;
+ //get default style
+ CellStyle cellStyleAt = workbook.getCellStyleAt(i);
+ assertNotNull(cellStyleAt);
+
+ //get custom style
+ StylesSource styleSource = workbook.getStylesSource();
+ CellStyle customStyle = new XSSFCellStyle(styleSource);
+ Font font = new XSSFFont();
+ font.setFontName("Verdana");
+ customStyle.setFont(font);
+ Long x = styleSource.putStyle(customStyle);
+ cellStyleAt = workbook.getCellStyleAt(x.shortValue());
+ assertNotNull(cellStyleAt);
+ }
+
+ public void testGetFontAt(){
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ StylesSource styleSource = workbook.getStylesSource();
+ short i = 0;
+ //get default font
+ Font fontAt = workbook.getFontAt(i);
+ assertNotNull(fontAt);
+
+ //get customized font
+ Font customFont = new XSSFFont();
+ customFont.setItalic(true);
+ Long x = styleSource.putFont(customFont);
+ fontAt = workbook.getFontAt(x.shortValue());
+ assertNotNull(fontAt);
+ }
+
+ public void testGetNumCellStyles(){
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ short i = workbook.getNumCellStyles();
+ //get default cellStyles
+ assertEquals(1, i);
+ //get wrong value
+ assertNotSame(2, i);
+ }
+
+ public void testGetDisplayedTab(){
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ short i = (short) workbook.getFirstVisibleTab();
+ //get default diplayedTab
+ assertEquals(0, i);
+ }
+
+ public void testSetDisplayedTab(){
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ workbook.setFirstVisibleTab(new Integer(1).shortValue());
+ short i = (short) workbook.getFirstVisibleTab();
+ //0 (defualt value) is not longer set
+ assertNotSame(0, i);
+ //1 is the default tab
+ assertEquals(1, i);
+ }
+
+
public void testLoadSave() throws Exception {
File xml = new File(
System.getProperty("HSSF.testdata.path") +