mirror of https://github.com/apache/poi.git
more refactoring of common ss tests
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@759714 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9adb9cc6d3
commit
e47dd63c80
|
@ -74,18 +74,6 @@ import org.apache.poi.ss.formula.FormulaType;
|
||||||
* @author Yegor Kozlov cell comments support
|
* @author Yegor Kozlov cell comments support
|
||||||
*/
|
*/
|
||||||
public class HSSFCell implements Cell {
|
public class HSSFCell implements Cell {
|
||||||
/** Numeric Cell type (0) @see #setCellType(int) @see #getCellType() */
|
|
||||||
public final static int CELL_TYPE_NUMERIC = 0;
|
|
||||||
/** String Cell type (1) @see #setCellType(int) @see #getCellType() */
|
|
||||||
public final static int CELL_TYPE_STRING = 1;
|
|
||||||
/** Formula Cell type (2) @see #setCellType(int) @see #getCellType() */
|
|
||||||
public final static int CELL_TYPE_FORMULA = 2;
|
|
||||||
/** Blank Cell type (3) @see #setCellType(int) @see #getCellType() */
|
|
||||||
public final static int CELL_TYPE_BLANK = 3;
|
|
||||||
/** Boolean Cell type (4) @see #setCellType(int) @see #getCellType() */
|
|
||||||
public final static int CELL_TYPE_BOOLEAN = 4;
|
|
||||||
/** Error Cell type (5) @see #setCellType(int) @see #getCellType() */
|
|
||||||
public final static int CELL_TYPE_ERROR = 5;
|
|
||||||
|
|
||||||
private static final String FILE_FORMAT_NAME = "BIFF8";
|
private static final String FILE_FORMAT_NAME = "BIFF8";
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -44,195 +44,6 @@ public class HSSFCellStyle implements CellStyle
|
||||||
private short index = 0;
|
private short index = 0;
|
||||||
private Workbook workbook = null;
|
private Workbook workbook = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* general (normal) horizontal alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short ALIGN_GENERAL = 0x0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* left-justified horizontal alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short ALIGN_LEFT = 0x1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* center horizontal alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short ALIGN_CENTER = 0x2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* right-justified horizontal alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short ALIGN_RIGHT = 0x3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fill? horizontal alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short ALIGN_FILL = 0x4;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* justified horizontal alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short ALIGN_JUSTIFY = 0x5;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* center-selection? horizontal alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short ALIGN_CENTER_SELECTION = 0x6;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* top-aligned vertical alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short VERTICAL_TOP = 0x0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* center-aligned vertical alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short VERTICAL_CENTER = 0x1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* bottom-aligned vertical alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short VERTICAL_BOTTOM = 0x2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* vertically justified vertical alignment
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short VERTICAL_JUSTIFY = 0x3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* No border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_NONE = 0x0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thin border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_THIN = 0x1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Medium border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_MEDIUM = 0x2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dash border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_DASHED = 0x3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dot border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_HAIR = 0x4;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thick border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_THICK = 0x5;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* double-line border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_DOUBLE = 0x6;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* hair-line border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_DOTTED = 0x7;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Medium dashed border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_MEDIUM_DASHED = 0x8;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dash-dot border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_DASH_DOT = 0x9;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* medium dash-dot border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_MEDIUM_DASH_DOT = 0xA;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dash-dot-dot border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_DASH_DOT_DOT = 0xB;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* medium dash-dot-dot border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_MEDIUM_DASH_DOT_DOT = 0xC;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* slanted dash-dot border
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static short BORDER_SLANTED_DASH_DOT = 0xD;
|
|
||||||
|
|
||||||
/** No background */
|
|
||||||
public final static short NO_FILL = 0 ;
|
|
||||||
/** Solidly filled */
|
|
||||||
public final static short SOLID_FOREGROUND = 1 ;
|
|
||||||
/** Small fine dots */
|
|
||||||
public final static short FINE_DOTS = 2 ;
|
|
||||||
/** Wide dots */
|
|
||||||
public final static short ALT_BARS = 3 ;
|
|
||||||
/** Sparse dots */
|
|
||||||
public final static short SPARSE_DOTS = 4 ;
|
|
||||||
/** Thick horizontal bands */
|
|
||||||
public final static short THICK_HORZ_BANDS = 5 ;
|
|
||||||
/** Thick vertical bands */
|
|
||||||
public final static short THICK_VERT_BANDS = 6 ;
|
|
||||||
/** Thick backward facing diagonals */
|
|
||||||
public final static short THICK_BACKWARD_DIAG = 7 ;
|
|
||||||
/** Thick forward facing diagonals */
|
|
||||||
public final static short THICK_FORWARD_DIAG = 8 ;
|
|
||||||
/** Large spots */
|
|
||||||
public final static short BIG_SPOTS = 9 ;
|
|
||||||
/** Brick-like layout */
|
|
||||||
public final static short BRICKS = 10 ;
|
|
||||||
/** Thin horizontal bands */
|
|
||||||
public final static short THIN_HORZ_BANDS = 11 ;
|
|
||||||
/** Thin vertical bands */
|
|
||||||
public final static short THIN_VERT_BANDS = 12 ;
|
|
||||||
/** Thin backward diagonal */
|
|
||||||
public final static short THIN_BACKWARD_DIAG = 13 ;
|
|
||||||
/** Thin forward diagonal */
|
|
||||||
public final static short THIN_FORWARD_DIAG = 14 ;
|
|
||||||
/** Squares */
|
|
||||||
public final static short SQUARES = 15 ;
|
|
||||||
/** Diamonds */
|
|
||||||
public final static short DIAMONDS = 16 ;
|
|
||||||
/** Less Dots */
|
|
||||||
public final static short LESS_DOTS = 17 ;
|
|
||||||
/** Least Dots */
|
|
||||||
public final static short LEAST_DOTS = 18 ;
|
|
||||||
|
|
||||||
|
|
||||||
/** Creates new HSSFCellStyle why would you want to do this?? */
|
/** Creates new HSSFCellStyle why would you want to do this?? */
|
||||||
protected HSSFCellStyle(short index, ExtendedFormatRecord rec, HSSFWorkbook workbook)
|
protected HSSFCellStyle(short index, ExtendedFormatRecord rec, HSSFWorkbook workbook)
|
||||||
|
|
|
@ -31,6 +31,13 @@ import org.apache.poi.ss.usermodel.Font;
|
||||||
*/
|
*/
|
||||||
public final class HSSFFont implements Font {
|
public final class HSSFFont implements Font {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Arial font
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final static String FONT_ARIAL = "Arial";
|
||||||
|
|
||||||
|
|
||||||
private FontRecord font;
|
private FontRecord font;
|
||||||
private short index;
|
private short index;
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,8 @@ public final class HSSFName implements Name {
|
||||||
* @throws IllegalArgumentException if the name is invalid or the name already exists (case-insensitive)
|
* @throws IllegalArgumentException if the name is invalid or the name already exists (case-insensitive)
|
||||||
*/
|
*/
|
||||||
public void setNameName(String nameName){
|
public void setNameName(String nameName){
|
||||||
|
validateName(nameName);
|
||||||
|
|
||||||
Workbook wb = _book.getWorkbook();
|
Workbook wb = _book.getWorkbook();
|
||||||
_definedNameRec.setNameText(nameName);
|
_definedNameRec.setNameText(nameName);
|
||||||
|
|
||||||
|
@ -131,6 +133,15 @@ public final class HSSFName implements Name {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void validateName(String name){
|
||||||
|
if(name.length() == 0) throw new IllegalArgumentException("Name cannot be blank");
|
||||||
|
|
||||||
|
char c = name.charAt(0);
|
||||||
|
if(!(c == '_' || Character.isLetter(c)) || name.indexOf(' ') != -1) {
|
||||||
|
throw new IllegalArgumentException("Invalid name: '"+name+"'; Names must begin with a letter or underscore and not contain spaces");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the formula that the name is defined to refer to.
|
* Returns the formula that the name is defined to refer to.
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,13 +19,6 @@ package org.apache.poi.ss.usermodel;
|
||||||
|
|
||||||
|
|
||||||
public interface Font {
|
public interface Font {
|
||||||
|
|
||||||
/**
|
|
||||||
* Arial font
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final static String FONT_ARIAL = "Arial";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normal boldness (not bold)
|
* Normal boldness (not bold)
|
||||||
*/
|
*/
|
||||||
|
@ -116,7 +109,6 @@ public interface Font {
|
||||||
/**
|
/**
|
||||||
* set the name for the font (i.e. Arial)
|
* set the name for the font (i.e. Arial)
|
||||||
* @param name String representing the name of the font to use
|
* @param name String representing the name of the font to use
|
||||||
* @see #FONT_ARIAL
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void setFontName(String name);
|
void setFontName(String name);
|
||||||
|
@ -124,7 +116,6 @@ public interface Font {
|
||||||
/**
|
/**
|
||||||
* get the name for the font (i.e. Arial)
|
* get the name for the font (i.e. Arial)
|
||||||
* @return String representing the name of the font to use
|
* @return String representing the name of the font to use
|
||||||
* @see #FONT_ARIAL
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
String getFontName();
|
String getFontName();
|
||||||
|
|
|
@ -36,4 +36,7 @@ public interface Picture {
|
||||||
* <code>resize(2.0)</code> resizes to 200% of the original.
|
* <code>resize(2.0)</code> resizes to 200% of the original.
|
||||||
*/
|
*/
|
||||||
void resize(double scale);
|
void resize(double scale);
|
||||||
|
|
||||||
|
ClientAnchor getPreferredSize();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.util.Map.Entry;
|
||||||
import org.apache.poi.ss.usermodel.FontFamily;
|
import org.apache.poi.ss.usermodel.FontFamily;
|
||||||
import org.apache.poi.ss.usermodel.FontScheme;
|
import org.apache.poi.ss.usermodel.FontScheme;
|
||||||
import org.apache.poi.ss.usermodel.BuiltinFormats;
|
import org.apache.poi.ss.usermodel.BuiltinFormats;
|
||||||
|
import org.apache.poi.ss.usermodel.Font;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
|
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFFont;
|
import org.apache.poi.xssf.usermodel.XSSFFont;
|
||||||
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
|
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
|
||||||
|
@ -468,9 +469,9 @@ public class StylesTable extends POIXMLDocumentPart {
|
||||||
*/
|
*/
|
||||||
public XSSFFont findFont(short boldWeight, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) {
|
public XSSFFont findFont(short boldWeight, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) {
|
||||||
for (XSSFFont font : fonts) {
|
for (XSSFFont font : fonts) {
|
||||||
if ( (font.getBold() == (boldWeight == XSSFFont.BOLDWEIGHT_BOLD))
|
if ( (font.getBoldweight() == boldWeight)
|
||||||
&& font.getColor() == color
|
&& font.getColor() == color
|
||||||
&& font.getFontHeightInPoints() == fontHeight
|
&& font.getFontHeight() == fontHeight
|
||||||
&& font.getFontName().equals(name)
|
&& font.getFontName().equals(name)
|
||||||
&& font.getItalic() == italic
|
&& font.getItalic() == italic
|
||||||
&& font.getStrikeout() == strikeout
|
&& font.getStrikeout() == strikeout
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class XSSFFont implements Font {
|
||||||
protected XSSFFont() {
|
protected XSSFFont() {
|
||||||
this.ctFont = CTFont.Factory.newInstance();
|
this.ctFont = CTFont.Factory.newInstance();
|
||||||
setFontName(DEFAULT_FONT_NAME);
|
setFontName(DEFAULT_FONT_NAME);
|
||||||
setFontHeight(DEFAULT_FONT_SIZE);
|
setFontHeight((double)DEFAULT_FONT_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -154,21 +154,16 @@ public class XSSFFont implements Font {
|
||||||
CTFontSize size = ctFont.sizeOfSzArray() == 0 ? null : ctFont.getSzArray(0);
|
CTFontSize size = ctFont.sizeOfSzArray() == 0 ? null : ctFont.getSzArray(0);
|
||||||
if (size != null) {
|
if (size != null) {
|
||||||
double fontHeight = size.getVal();
|
double fontHeight = size.getVal();
|
||||||
return (short) fontHeight;
|
return (short)(fontHeight*20);
|
||||||
} else
|
} else
|
||||||
return DEFAULT_FONT_SIZE;
|
return (short)(DEFAULT_FONT_SIZE*20);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #getFontHeight()
|
* @see #getFontHeight()
|
||||||
*/
|
*/
|
||||||
public short getFontHeightInPoints() {
|
public short getFontHeightInPoints() {
|
||||||
CTFontSize size = ctFont.sizeOfSzArray() == 0 ? null : ctFont.getSzArray(0);
|
return (short)(getFontHeight()/20);
|
||||||
if (size != null) {
|
|
||||||
double fontHeight = size.getVal();
|
|
||||||
return (short) fontHeight;
|
|
||||||
} else
|
|
||||||
return DEFAULT_FONT_SIZE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -347,7 +342,7 @@ public class XSSFFont implements Font {
|
||||||
* @param height - height in points
|
* @param height - height in points
|
||||||
*/
|
*/
|
||||||
public void setFontHeight(short height) {
|
public void setFontHeight(short height) {
|
||||||
setFontHeight((double) height);
|
setFontHeight((double) height/20);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -366,7 +361,7 @@ public class XSSFFont implements Font {
|
||||||
* @link #setFontHeight
|
* @link #setFontHeight
|
||||||
*/
|
*/
|
||||||
public void setFontHeightInPoints(short height) {
|
public void setFontHeightInPoints(short height) {
|
||||||
setFontHeight(height);
|
setFontHeight((double)height);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -359,6 +359,7 @@ public final class XSSFName implements Name {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void validateName(String name){
|
private static void validateName(String name){
|
||||||
|
if(name.length() == 0) throw new IllegalArgumentException("Name cannot be blank");
|
||||||
char c = name.charAt(0);
|
char c = name.charAt(0);
|
||||||
if(!(c == '_' || Character.isLetter(c)) || name.indexOf(' ') != -1) {
|
if(!(c == '_' || Character.isLetter(c)) || name.indexOf(' ') != -1) {
|
||||||
throw new IllegalArgumentException("Invalid name: '"+name+"'; Names must begin with a letter or underscore and not contain spaces");
|
throw new IllegalArgumentException("Invalid name: '"+name+"'; Names must begin with a letter or underscore and not contain spaces");
|
||||||
|
|
|
@ -436,6 +436,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
||||||
*/
|
*/
|
||||||
public XSSFSheet createSheet() {
|
public XSSFSheet createSheet() {
|
||||||
String sheetname = "Sheet" + (sheets.size());
|
String sheetname = "Sheet" + (sheets.size());
|
||||||
|
int idx = 0;
|
||||||
|
while(getSheet(sheetname) != null) {
|
||||||
|
sheetname = "Sheet" + idx;
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
return createSheet(sheetname);
|
return createSheet(sheetname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.poi.xssf;
|
||||||
import org.apache.poi.ss.ITestDataProvider;
|
import org.apache.poi.ss.ITestDataProvider;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
|
@ -41,6 +42,10 @@ public final class XSSFITestDataProvider implements ITestDataProvider {
|
||||||
return new XSSFWorkbook();
|
return new XSSFWorkbook();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte[] getTestDataFileContent(String fileName) {
|
||||||
|
return HSSFTestDataSamples.getTestDataFileContent(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
private XSSFITestDataProvider(){}
|
private XSSFITestDataProvider(){}
|
||||||
private static XSSFITestDataProvider inst = new XSSFITestDataProvider();
|
private static XSSFITestDataProvider inst = new XSSFITestDataProvider();
|
||||||
public static XSSFITestDataProvider getInstance(){
|
public static XSSFITestDataProvider getInstance(){
|
||||||
|
|
|
@ -26,16 +26,21 @@ import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||||
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
|
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
|
||||||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||||
|
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||||
|
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
|
||||||
|
|
||||||
public class TestXSSFBugs extends TestCase {
|
public class TestXSSFBugs extends BaseTestBugzillaIssues {
|
||||||
private String getFilePath(String file) {
|
@Override
|
||||||
File xml = new File(
|
protected XSSFITestDataProvider getTestDataProvider(){
|
||||||
System.getProperty("HSSF.testdata.path") +
|
return XSSFITestDataProvider.getInstance();
|
||||||
File.separator + file
|
}
|
||||||
);
|
|
||||||
assertTrue(xml.exists());
|
|
||||||
|
|
||||||
return xml.toString();
|
/**
|
||||||
|
* test writing a file with large number of unique strings,
|
||||||
|
* open resulting file in Excel to check results!
|
||||||
|
*/
|
||||||
|
public void test15375_2() {
|
||||||
|
baseTest15375(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -43,7 +48,7 @@ public class TestXSSFBugs extends TestCase {
|
||||||
* the wrong sheet name
|
* the wrong sheet name
|
||||||
*/
|
*/
|
||||||
public void test45430() throws Exception {
|
public void test45430() throws Exception {
|
||||||
XSSFWorkbook wb = new XSSFWorkbook(getFilePath("45430.xlsx"));
|
XSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("45430.xlsx");
|
||||||
assertFalse(wb.isMacroEnabled());
|
assertFalse(wb.isMacroEnabled());
|
||||||
assertEquals(3, wb.getNumberOfNames());
|
assertEquals(3, wb.getNumberOfNames());
|
||||||
|
|
||||||
|
@ -72,8 +77,8 @@ public class TestXSSFBugs extends TestCase {
|
||||||
* We should carry vba macros over after save
|
* We should carry vba macros over after save
|
||||||
*/
|
*/
|
||||||
public void test45431() throws Exception {
|
public void test45431() throws Exception {
|
||||||
OPCPackage pkg = OPCPackage.open(getFilePath("45431.xlsm"));
|
XSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("45431.xlsm");
|
||||||
XSSFWorkbook wb = new XSSFWorkbook(pkg);
|
OPCPackage pkg = wb.getPackage();
|
||||||
assertTrue(wb.isMacroEnabled());
|
assertTrue(wb.isMacroEnabled());
|
||||||
|
|
||||||
// Check the various macro related bits can be found
|
// Check the various macro related bits can be found
|
||||||
|
@ -115,10 +120,5 @@ public class TestXSSFBugs extends TestCase {
|
||||||
PackagingURIHelper.createPartName("/xl/drawings/vmlDrawing1.vml")
|
PackagingURIHelper.createPartName("/xl/drawings/vmlDrawing1.vml")
|
||||||
);
|
);
|
||||||
assertNotNull(drw);
|
assertNotNull(drw);
|
||||||
|
|
||||||
// For testing with excel
|
|
||||||
// FileOutputStream fout = new FileOutputStream("/tmp/foo.xlsm");
|
|
||||||
// nwb.write(fout);
|
|
||||||
// fout.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||||
|
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFColor;
|
import org.apache.poi.xssf.usermodel.XSSFColor;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
|
||||||
|
@ -35,7 +36,16 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;
|
||||||
|
|
||||||
public final class TestXSSFFont extends TestCase{
|
public final class TestXSSFFont extends BaseTestFont{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected XSSFITestDataProvider getTestDataProvider(){
|
||||||
|
return XSSFITestDataProvider.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDefaultFont() {
|
||||||
|
baseTestDefaultFont("Calibri", (short)220, IndexedColors.BLACK.getIndex());
|
||||||
|
}
|
||||||
|
|
||||||
public void testConstructor() {
|
public void testConstructor() {
|
||||||
XSSFFont xssfFont=new XSSFFont();
|
XSSFFont xssfFont=new XSSFFont();
|
||||||
|
@ -119,9 +129,9 @@ public final class TestXSSFFont extends TestCase{
|
||||||
ctFont.setSzArray(0,size);
|
ctFont.setSzArray(0,size);
|
||||||
|
|
||||||
XSSFFont xssfFont=new XSSFFont(ctFont);
|
XSSFFont xssfFont=new XSSFFont(ctFont);
|
||||||
assertEquals(11,xssfFont.getFontHeight());
|
assertEquals(11,xssfFont.getFontHeightInPoints());
|
||||||
|
|
||||||
xssfFont.setFontHeight((short)20);
|
xssfFont.setFontHeight(20);
|
||||||
assertEquals(20.0, ctFont.getSzArray(0).getVal(), 0.0);
|
assertEquals(20.0, ctFont.getSzArray(0).getVal(), 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,203 +246,4 @@ public final class TestXSSFFont extends TestCase{
|
||||||
font.setTypeOffset(XSSFFont.SS_SUPER);
|
font.setTypeOffset(XSSFFont.SS_SUPER);
|
||||||
assertEquals(STVerticalAlignRun.SUPERSCRIPT,ctFont.getVertAlignArray(0).getVal());
|
assertEquals(STVerticalAlignRun.SUPERSCRIPT,ctFont.getVertAlignArray(0).getVal());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests that we can define fonts to a new
|
|
||||||
* file, save, load, and still see them
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public void testCreateSave() {
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
|
||||||
XSSFSheet s1 = wb.createSheet();
|
|
||||||
Row r1 = s1.createRow(0);
|
|
||||||
Cell r1c1 = r1.createCell(0);
|
|
||||||
r1c1.setCellValue(2.2);
|
|
||||||
|
|
||||||
assertEquals(1, wb.getNumberOfFonts());
|
|
||||||
|
|
||||||
XSSFFont font=wb.createFont();
|
|
||||||
font.setBold(true);
|
|
||||||
font.setStrikeout(true);
|
|
||||||
font.setColor(IndexedColors.YELLOW.getIndex());
|
|
||||||
font.setFontName("Courier");
|
|
||||||
wb.createCellStyle().setFont(font);
|
|
||||||
assertEquals(2, wb.getNumberOfFonts());
|
|
||||||
|
|
||||||
CellStyle cellStyleTitle=wb.createCellStyle();
|
|
||||||
cellStyleTitle.setFont(font);
|
|
||||||
r1c1.setCellStyle(cellStyleTitle);
|
|
||||||
|
|
||||||
// Save and re-load
|
|
||||||
wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
||||||
s1 = wb.getSheetAt(0);
|
|
||||||
|
|
||||||
assertEquals(2, wb.getNumberOfFonts());
|
|
||||||
short idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex();
|
|
||||||
Font fnt = wb.getFontAt(idx);
|
|
||||||
assertNotNull(fnt);
|
|
||||||
assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor());
|
|
||||||
assertEquals("Courier", fnt.getFontName());
|
|
||||||
|
|
||||||
// Now add an orphaned one
|
|
||||||
XSSFFont font2 = wb.createFont();
|
|
||||||
font2.setItalic(true);
|
|
||||||
font2.setFontHeightInPoints((short)15);
|
|
||||||
wb.createCellStyle().setFont(font2);
|
|
||||||
assertEquals(3, wb.getNumberOfFonts());
|
|
||||||
|
|
||||||
// Save and re-load
|
|
||||||
wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
||||||
s1 = wb.getSheetAt(0);
|
|
||||||
|
|
||||||
assertEquals(3, wb.getNumberOfFonts());
|
|
||||||
assertNotNull(wb.getFontAt((short)1));
|
|
||||||
assertNotNull(wb.getFontAt((short)2));
|
|
||||||
|
|
||||||
assertEquals(15, wb.getFontAt((short)2).getFontHeightInPoints());
|
|
||||||
assertEquals(true, wb.getFontAt((short)2).getItalic());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testXSSFFont() {
|
|
||||||
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"));
|
|
||||||
XSSFFont font=new XSSFFont();
|
|
||||||
font.setBold(true);
|
|
||||||
font.setFontHeightInPoints((short)22);
|
|
||||||
font.setColor(IndexedColors.BLUE.getIndex());
|
|
||||||
font.setFontName("Verdana");
|
|
||||||
CellStyle cellStyleTitle=workbook.createCellStyle();
|
|
||||||
cellStyleTitle.setFont(font);
|
|
||||||
cell.setCellStyle(cellStyleTitle);
|
|
||||||
|
|
||||||
|
|
||||||
row=sheet.createRow(3);
|
|
||||||
XSSFFont font1=new XSSFFont();
|
|
||||||
font1.setBold(true);
|
|
||||||
font1.setItalic(true);
|
|
||||||
font1.setFontHeightInPoints((short)18);
|
|
||||||
font1.setColor(IndexedColors.RED.getIndex());
|
|
||||||
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(IndexedColors.BLACK.getIndex());
|
|
||||||
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(IndexedColors.PINK.getIndex());
|
|
||||||
CellStyle cellStyle3=workbook.createCellStyle();
|
|
||||||
cellStyle3.setFont(font3);
|
|
||||||
|
|
||||||
cell1.setCellValue(new XSSFRichTextString("pink italic Times 9pt strikeout!!!"));
|
|
||||||
cell1.setCellStyle(cellStyle3);
|
|
||||||
|
|
||||||
XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test that fonts get added properly
|
|
||||||
*
|
|
||||||
* @see org.apache.poi.hssf.usermodel.TestBugs#test45338()
|
|
||||||
*/
|
|
||||||
public void test45338() {
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
|
||||||
assertEquals(1, wb.getNumberOfFonts());
|
|
||||||
|
|
||||||
XSSFSheet s = wb.createSheet();
|
|
||||||
s.createRow(0);
|
|
||||||
s.createRow(1);
|
|
||||||
s.getRow(0).createCell(0);
|
|
||||||
s.getRow(1).createCell(0);
|
|
||||||
|
|
||||||
assertEquals(1, wb.getNumberOfFonts());
|
|
||||||
|
|
||||||
XSSFFont f1 = wb.getFontAt((short)0);
|
|
||||||
assertEquals(XSSFFont.BOLDWEIGHT_NORMAL, f1.getBoldweight());
|
|
||||||
|
|
||||||
// Check that asking for the same font
|
|
||||||
// multiple times gives you the same thing.
|
|
||||||
// Otherwise, our tests wouldn't work!
|
|
||||||
assertEquals(wb.getFontAt((short)0), wb.getFontAt((short)0));
|
|
||||||
|
|
||||||
// Look for a new font we have
|
|
||||||
// yet to add
|
|
||||||
assertNull(
|
|
||||||
wb.findFont(
|
|
||||||
(short)11, (short)123, (short)22,
|
|
||||||
"Thingy", false, true, (short)2, (byte)2
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
XSSFFont nf = wb.createFont();
|
|
||||||
assertEquals(2, wb.getNumberOfFonts());
|
|
||||||
|
|
||||||
assertEquals(1, nf.getIndex());
|
|
||||||
assertEquals(nf, wb.getFontAt((short)1));
|
|
||||||
|
|
||||||
nf.setBoldweight((short)11);
|
|
||||||
nf.setColor((short)123);
|
|
||||||
nf.setFontHeight((short)22);
|
|
||||||
nf.setFontName("Thingy");
|
|
||||||
nf.setItalic(false);
|
|
||||||
nf.setStrikeout(true);
|
|
||||||
nf.setTypeOffset((short)2);
|
|
||||||
nf.setUnderline((byte)2);
|
|
||||||
|
|
||||||
assertEquals(2, wb.getNumberOfFonts());
|
|
||||||
assertEquals(nf, wb.getFontAt((short)1));
|
|
||||||
|
|
||||||
assertEquals(wb.getFontAt((short)1), wb.getFontAt((short)1));
|
|
||||||
assertTrue(wb.getFontAt((short)0) != wb.getFontAt((short)1));
|
|
||||||
|
|
||||||
// Find it now
|
|
||||||
assertNotNull(
|
|
||||||
wb.findFont(
|
|
||||||
(short)11, (short)123, (short)22,
|
|
||||||
"Thingy", false, true, (short)2, (byte)2
|
|
||||||
)
|
|
||||||
);
|
|
||||||
assertEquals(
|
|
||||||
1,
|
|
||||||
wb.findFont(
|
|
||||||
(short)11, (short)123, (short)22,
|
|
||||||
"Thingy", false, true, (short)2, (byte)2
|
|
||||||
).getIndex()
|
|
||||||
);
|
|
||||||
assertEquals(nf,
|
|
||||||
wb.findFont(
|
|
||||||
(short)11, (short)123, (short)22,
|
|
||||||
"Thingy", false, true, (short)2, (byte)2
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,4 +31,46 @@ public class TestXSSFName extends BaseTestNamedRange {
|
||||||
return XSSFITestDataProvider.getInstance();
|
return XSSFITestDataProvider.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO combine testRepeatingRowsAndColums() for HSSF and XSSF
|
||||||
|
public void testRepeatingRowsAndColums() {
|
||||||
|
// First test that setting RR&C for same sheet more than once only creates a
|
||||||
|
// single Print_Titles built-in record
|
||||||
|
XSSFWorkbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
XSSFSheet sheet = wb.createSheet("FirstSheet");
|
||||||
|
|
||||||
|
// set repeating rows and columns twice for the first sheet
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3);
|
||||||
|
//sheet.createFreezePane(0, 3);
|
||||||
|
}
|
||||||
|
assertEquals(1, wb.getNumberOfNames());
|
||||||
|
XSSFName nr1 = wb.getNameAt(0);
|
||||||
|
|
||||||
|
assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName());
|
||||||
|
assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula());
|
||||||
|
|
||||||
|
// Save and re-open
|
||||||
|
XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
||||||
|
|
||||||
|
assertEquals(1, nwb.getNumberOfNames());
|
||||||
|
nr1 = nwb.getNameAt(0);
|
||||||
|
|
||||||
|
assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName());
|
||||||
|
assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula());
|
||||||
|
|
||||||
|
// check that setting RR&C on a second sheet causes a new Print_Titles built-in
|
||||||
|
// name to be created
|
||||||
|
sheet = nwb.createSheet("SecondSheet");
|
||||||
|
nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0);
|
||||||
|
|
||||||
|
assertEquals(2, nwb.getNumberOfNames());
|
||||||
|
XSSFName nr2 = nwb.getNameAt(1);
|
||||||
|
|
||||||
|
assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr2.getNameName());
|
||||||
|
assertEquals("'SecondSheet'!$B:$C,'SecondSheet'!$1:$1", nr2.getRefersToFormula());
|
||||||
|
|
||||||
|
nwb.setRepeatingRowsAndColumns(1, -1, -1, -1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ package org.apache.poi.xssf.usermodel;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import org.apache.poi.ss.usermodel.ClientAnchor;
|
import org.apache.poi.ss.usermodel.ClientAnchor;
|
||||||
|
import org.apache.poi.ss.usermodel.BaseTestPicture;
|
||||||
|
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTTwoCellAnchor;
|
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTTwoCellAnchor;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.STEditAs;
|
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.STEditAs;
|
||||||
|
|
||||||
|
@ -27,7 +29,17 @@ import java.util.Arrays;
|
||||||
/**
|
/**
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public class TestXSSFPicture extends TestCase {
|
public class TestXSSFPicture extends BaseTestPicture {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected XSSFITestDataProvider getTestDataProvider(){
|
||||||
|
return XSSFITestDataProvider.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResize() {
|
||||||
|
baseTestResize(new XSSFClientAnchor(0, 0, 504825, 85725, (short)0, 0, (short)1, 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testCreate(){
|
public void testCreate(){
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
XSSFWorkbook wb = new XSSFWorkbook();
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
@ -35,7 +36,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
|
||||||
public class TestXSSFSheet extends BaseTestSheet {
|
public class TestXSSFSheet extends BaseTestSheet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected XSSFITestDataProvider getTestDataProvider(){
|
protected XSSFITestDataProvider getTestDataProvider() {
|
||||||
return XSSFITestDataProvider.getInstance();
|
return XSSFITestDataProvider.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,28 +49,6 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
baseTestGetSetMargin(new double[]{0.7, 0.7, 0.75, 0.75, 0.3, 0.3});
|
baseTestGetSetMargin(new double[]{0.7, 0.7, 0.75, 0.75, 0.3, 0.3});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetFirstLastRowNum() {
|
|
||||||
Workbook workbook = getTestDataProvider().createWorkbook();
|
|
||||||
Sheet sheet = workbook.createSheet("Sheet 1");
|
|
||||||
Row row10 = sheet.createRow(9);
|
|
||||||
Row row1 = sheet.createRow(0);
|
|
||||||
Row row2 = sheet.createRow(1);
|
|
||||||
assertEquals(0, sheet.getFirstRowNum());
|
|
||||||
assertEquals(9, sheet.getLastRowNum());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testGetFooter() {
|
|
||||||
XSSFWorkbook workbook = getTestDataProvider().createWorkbook();
|
|
||||||
XSSFSheet sheet = workbook.createSheet("Sheet 1");
|
|
||||||
assertNotNull(sheet.getFooter());
|
|
||||||
sheet.getFooter().setCenter("test center footer");
|
|
||||||
assertEquals("test center footer", sheet.getFooter().getCenter());
|
|
||||||
|
|
||||||
// Default is odd footer
|
|
||||||
assertNotNull(sheet.getOddFooter());
|
|
||||||
assertEquals("test center footer", sheet.getOddFooter().getCenter());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testExistingHeaderFooter() throws Exception {
|
public void testExistingHeaderFooter() throws Exception {
|
||||||
File xml = new File(
|
File xml = new File(
|
||||||
System.getProperty("HSSF.testdata.path") +
|
System.getProperty("HSSF.testdata.path") +
|
||||||
|
@ -85,8 +64,8 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
XSSFSheet s1 = workbook.getSheetAt(0);
|
XSSFSheet s1 = workbook.getSheetAt(0);
|
||||||
assertNotNull(s1.getHeader());
|
assertNotNull(s1.getHeader());
|
||||||
assertNotNull(s1.getFooter());
|
assertNotNull(s1.getFooter());
|
||||||
hdr = (XSSFOddHeader)s1.getHeader();
|
hdr = (XSSFOddHeader) s1.getHeader();
|
||||||
ftr = (XSSFOddFooter)s1.getFooter();
|
ftr = (XSSFOddFooter) s1.getFooter();
|
||||||
|
|
||||||
assertEquals("&Ctestdoc&Rtest phrase", hdr.getText());
|
assertEquals("&Ctestdoc&Rtest phrase", hdr.getText());
|
||||||
assertEquals(null, ftr.getText());
|
assertEquals(null, ftr.getText());
|
||||||
|
@ -99,13 +78,12 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
assertEquals("", ftr.getCenter());
|
assertEquals("", ftr.getCenter());
|
||||||
assertEquals("", ftr.getRight());
|
assertEquals("", ftr.getRight());
|
||||||
|
|
||||||
|
|
||||||
// Sheet 2 has a footer, but it's empty
|
// Sheet 2 has a footer, but it's empty
|
||||||
XSSFSheet s2 = workbook.getSheetAt(1);
|
XSSFSheet s2 = workbook.getSheetAt(1);
|
||||||
assertNotNull(s2.getHeader());
|
assertNotNull(s2.getHeader());
|
||||||
assertNotNull(s2.getFooter());
|
assertNotNull(s2.getFooter());
|
||||||
hdr = (XSSFOddHeader)s2.getHeader();
|
hdr = (XSSFOddHeader) s2.getHeader();
|
||||||
ftr = (XSSFOddFooter)s2.getFooter();
|
ftr = (XSSFOddFooter) s2.getFooter();
|
||||||
|
|
||||||
assertEquals(null, hdr.getText());
|
assertEquals(null, hdr.getText());
|
||||||
assertEquals("&L&F", ftr.getText());
|
assertEquals("&L&F", ftr.getText());
|
||||||
|
@ -118,12 +96,11 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
assertEquals("", ftr.getCenter());
|
assertEquals("", ftr.getCenter());
|
||||||
assertEquals("", ftr.getRight());
|
assertEquals("", ftr.getRight());
|
||||||
|
|
||||||
|
|
||||||
// Save and reload
|
// Save and reload
|
||||||
XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
||||||
|
|
||||||
hdr = (XSSFOddHeader)wb.getSheetAt(0).getHeader();
|
hdr = (XSSFOddHeader) wb.getSheetAt(0).getHeader();
|
||||||
ftr = (XSSFOddFooter)wb.getSheetAt(0).getFooter();
|
ftr = (XSSFOddFooter) wb.getSheetAt(0).getFooter();
|
||||||
|
|
||||||
assertEquals("", hdr.getLeft());
|
assertEquals("", hdr.getLeft());
|
||||||
assertEquals("testdoc", hdr.getCenter());
|
assertEquals("testdoc", hdr.getCenter());
|
||||||
|
@ -173,19 +150,12 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
assertEquals("odd header center", sheet.getHeader().getCenter());
|
assertEquals("odd header center", sheet.getHeader().getCenter());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetSetColumnHidden() {
|
|
||||||
Workbook workbook = getTestDataProvider().createWorkbook();
|
|
||||||
Sheet sheet = workbook.createSheet("Sheet 1");
|
|
||||||
sheet.setColumnHidden((short) 2, true);
|
|
||||||
assertTrue(sheet.isColumnHidden((short) 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAutoSizeColumn() {
|
public void testAutoSizeColumn() {
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
XSSFSheet sheet = workbook.createSheet("Sheet 1");
|
XSSFSheet sheet = workbook.createSheet("Sheet 1");
|
||||||
sheet.createRow(0).createCell(13).setCellValue("test");
|
sheet.createRow(0).createCell(13).setCellValue("test");
|
||||||
|
|
||||||
sheet.autoSizeColumn((short)13);
|
sheet.autoSizeColumn(13);
|
||||||
|
|
||||||
ColumnHelper columnHelper = sheet.getColumnHelper();
|
ColumnHelper columnHelper = sheet.getColumnHelper();
|
||||||
CTCol col = columnHelper.getColumn(13, false);
|
CTCol col = columnHelper.getColumn(13, false);
|
||||||
|
@ -210,14 +180,14 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
|
|
||||||
XSSFComment comment = sheet.createComment();
|
XSSFComment comment = sheet.createComment();
|
||||||
|
|
||||||
Cell cell = sheet.createRow(0).createCell((short)0);
|
Cell cell = sheet.createRow(0).createCell((short) 0);
|
||||||
CommentsTable comments = sheet.getCommentsTable();
|
CommentsTable comments = sheet.getCommentsTable();
|
||||||
CTComments ctComments = comments.getCTComments();
|
CTComments ctComments = comments.getCTComments();
|
||||||
|
|
||||||
sheet.setCellComment("A1", comment);
|
sheet.setCellComment("A1", comment);
|
||||||
assertEquals("A1", ctComments.getCommentList().getCommentArray(0).getRef());
|
assertEquals("A1", ctComments.getCommentList().getCommentArray(0).getRef());
|
||||||
comment.setAuthor("test A1 author");
|
comment.setAuthor("test A1 author");
|
||||||
assertEquals("test A1 author", comments.getAuthor((int)ctComments.getCommentList().getCommentArray(0).getAuthorId()));
|
assertEquals("test A1 author", comments.getAuthor((int) ctComments.getCommentList().getCommentArray(0).getAuthorId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetActiveCell() {
|
public void testGetActiveCell() {
|
||||||
|
@ -235,14 +205,14 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
|
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
|
||||||
|
|
||||||
sheet.createFreezePane(2, 4);
|
sheet.createFreezePane(2, 4);
|
||||||
assertEquals((double)2, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
assertEquals((double) 2, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
||||||
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
||||||
sheet.createFreezePane(3, 6, 10, 10);
|
sheet.createFreezePane(3, 6, 10, 10);
|
||||||
assertEquals((double)3, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
assertEquals((double) 3, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
||||||
// assertEquals(10, sheet.getTopRow());
|
// assertEquals(10, sheet.getTopRow());
|
||||||
// assertEquals(10, sheet.getLeftCol());
|
// assertEquals(10, sheet.getLeftCol());
|
||||||
sheet.createSplitPane(4, 8, 12, 12, 1);
|
sheet.createSplitPane(4, 8, 12, 12, 1);
|
||||||
assertEquals((double)8, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getYSplit());
|
assertEquals((double) 8, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getYSplit());
|
||||||
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,18 +222,10 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
|
CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
|
||||||
sheet.addMergedRegion(region);
|
sheet.addMergedRegion(region);
|
||||||
assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
|
assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
|
||||||
}
|
|
||||||
|
|
||||||
public void testGetNumMergedRegions() {
|
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
|
||||||
XSSFSheet sheet = workbook.createSheet();
|
|
||||||
assertEquals(0, sheet.getNumMergedRegions());
|
|
||||||
CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
|
|
||||||
sheet.addMergedRegion(region);
|
|
||||||
assertEquals(1, sheet.getNumMergedRegions());
|
assertEquals(1, sheet.getNumMergedRegions());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRemoveMergedRegion() {
|
public void testRemoveMergedRegion_lowlevel() {
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
XSSFSheet sheet = workbook.createSheet();
|
XSSFSheet sheet = workbook.createSheet();
|
||||||
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
|
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
|
||||||
|
@ -308,49 +270,46 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void testGroupUngroupColumn() {
|
public void testGroupUngroupColumn() {
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
XSSFSheet sheet = workbook.createSheet();
|
XSSFSheet sheet = workbook.createSheet();
|
||||||
|
|
||||||
//one level
|
//one level
|
||||||
sheet.groupColumn((short)2,(short)7);
|
sheet.groupColumn((short) 2, (short) 7);
|
||||||
sheet.groupColumn((short)10,(short)11);
|
sheet.groupColumn((short) 10, (short) 11);
|
||||||
CTCols cols=sheet.getCTWorksheet().getColsArray(0);
|
CTCols cols = sheet.getCTWorksheet().getColsArray(0);
|
||||||
assertEquals(2,cols.sizeOfColArray());
|
assertEquals(2, cols.sizeOfColArray());
|
||||||
CTCol[]colArray=cols.getColArray();
|
CTCol[] colArray = cols.getColArray();
|
||||||
assertNotNull(colArray);
|
assertNotNull(colArray);
|
||||||
assertEquals(2+1,colArray[0].getMin()); // 1 based
|
assertEquals(2 + 1, colArray[0].getMin()); // 1 based
|
||||||
assertEquals(7+1,colArray[0].getMax()); // 1 based
|
assertEquals(7 + 1, colArray[0].getMax()); // 1 based
|
||||||
assertEquals(1, colArray[0].getOutlineLevel());
|
assertEquals(1, colArray[0].getOutlineLevel());
|
||||||
|
|
||||||
//two level
|
//two level
|
||||||
sheet.groupColumn((short)1,(short)2);
|
sheet.groupColumn((short) 1, (short) 2);
|
||||||
cols=sheet.getCTWorksheet().getColsArray(0);
|
cols = sheet.getCTWorksheet().getColsArray(0);
|
||||||
assertEquals(4,cols.sizeOfColArray());
|
assertEquals(4, cols.sizeOfColArray());
|
||||||
colArray=cols.getColArray();
|
colArray = cols.getColArray();
|
||||||
assertEquals(2, colArray[1].getOutlineLevel());
|
assertEquals(2, colArray[1].getOutlineLevel());
|
||||||
|
|
||||||
//three level
|
//three level
|
||||||
sheet.groupColumn((short)6,(short)8);
|
sheet.groupColumn((short) 6, (short) 8);
|
||||||
sheet.groupColumn((short)2,(short)3);
|
sheet.groupColumn((short) 2, (short) 3);
|
||||||
cols=sheet.getCTWorksheet().getColsArray(0);
|
cols = sheet.getCTWorksheet().getColsArray(0);
|
||||||
assertEquals(7,cols.sizeOfColArray());
|
assertEquals(7, cols.sizeOfColArray());
|
||||||
colArray=cols.getColArray();
|
colArray = cols.getColArray();
|
||||||
assertEquals(3, colArray[1].getOutlineLevel());
|
assertEquals(3, colArray[1].getOutlineLevel());
|
||||||
assertEquals(3,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
assertEquals(3, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
||||||
|
|
||||||
sheet.ungroupColumn((short)8,(short) 10);
|
sheet.ungroupColumn((short) 8, (short) 10);
|
||||||
colArray=cols.getColArray();
|
colArray = cols.getColArray();
|
||||||
//assertEquals(3, colArray[1].getOutlineLevel());
|
//assertEquals(3, colArray[1].getOutlineLevel());
|
||||||
|
|
||||||
sheet.ungroupColumn((short)4,(short)6);
|
sheet.ungroupColumn((short) 4, (short) 6);
|
||||||
sheet.ungroupColumn((short)2,(short)2);
|
sheet.ungroupColumn((short) 2, (short) 2);
|
||||||
colArray=cols.getColArray();
|
colArray = cols.getColArray();
|
||||||
assertEquals(4, colArray.length);
|
assertEquals(4, colArray.length);
|
||||||
assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
assertEquals(2, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -359,39 +318,39 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
XSSFSheet sheet = workbook.createSheet();
|
XSSFSheet sheet = workbook.createSheet();
|
||||||
|
|
||||||
//one level
|
//one level
|
||||||
sheet.groupRow(9,10);
|
sheet.groupRow(9, 10);
|
||||||
assertEquals(2,sheet.getPhysicalNumberOfRows());
|
assertEquals(2, sheet.getPhysicalNumberOfRows());
|
||||||
CTRow ctrow = sheet.getRow(9).getCTRow();
|
CTRow ctrow = sheet.getRow(9).getCTRow();
|
||||||
|
|
||||||
assertNotNull(ctrow);
|
assertNotNull(ctrow);
|
||||||
assertEquals(10,ctrow.getR());
|
assertEquals(10, ctrow.getR());
|
||||||
assertEquals(1, ctrow.getOutlineLevel());
|
assertEquals(1, ctrow.getOutlineLevel());
|
||||||
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||||
|
|
||||||
//two level
|
//two level
|
||||||
sheet.groupRow(10,13);
|
sheet.groupRow(10, 13);
|
||||||
assertEquals(5,sheet.getPhysicalNumberOfRows());
|
assertEquals(5, sheet.getPhysicalNumberOfRows());
|
||||||
ctrow = sheet.getRow(10).getCTRow();
|
ctrow = sheet.getRow(10).getCTRow();
|
||||||
assertNotNull(ctrow);
|
assertNotNull(ctrow);
|
||||||
assertEquals(11,ctrow.getR());
|
assertEquals(11, ctrow.getR());
|
||||||
assertEquals(2, ctrow.getOutlineLevel());
|
assertEquals(2, ctrow.getOutlineLevel());
|
||||||
assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
assertEquals(2, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||||
|
|
||||||
|
|
||||||
sheet.ungroupRow(8, 10);
|
sheet.ungroupRow(8, 10);
|
||||||
assertEquals(4,sheet.getPhysicalNumberOfRows());
|
assertEquals(4, sheet.getPhysicalNumberOfRows());
|
||||||
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||||
|
|
||||||
sheet.ungroupRow(10,10);
|
sheet.ungroupRow(10, 10);
|
||||||
assertEquals(3,sheet.getPhysicalNumberOfRows());
|
assertEquals(3, sheet.getPhysicalNumberOfRows());
|
||||||
|
|
||||||
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSetZoom() {
|
public void testSetZoom() {
|
||||||
XSSFWorkbook workBook = new XSSFWorkbook();
|
XSSFWorkbook workBook = new XSSFWorkbook();
|
||||||
XSSFSheet sheet1 = workBook.createSheet("new sheet");
|
XSSFSheet sheet1 = workBook.createSheet("new sheet");
|
||||||
sheet1.setZoom(3,4); // 75 percent magnification
|
sheet1.setZoom(3, 4); // 75 percent magnification
|
||||||
long zoom = sheet1.getCTWorksheet().getSheetViews().getSheetViewArray(0).getZoomScale();
|
long zoom = sheet1.getCTWorksheet().getSheetViews().getSheetViewArray(0).getZoomScale();
|
||||||
assertEquals(zoom, 75);
|
assertEquals(zoom, 75);
|
||||||
|
|
||||||
|
@ -402,7 +361,7 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
try {
|
try {
|
||||||
sheet1.setZoom(500);
|
sheet1.setZoom(500);
|
||||||
fail("Expecting exception");
|
fail("Expecting exception");
|
||||||
} catch (IllegalArgumentException e){
|
} catch (IllegalArgumentException e) {
|
||||||
assertEquals("Valid scale values range from 10 to 400", e.getMessage());
|
assertEquals("Valid scale values range from 10 to 400", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -413,8 +372,8 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
public void testColumnWidth_lowlevel() {
|
public void testColumnWidth_lowlevel() {
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
XSSFSheet sheet = workbook.createSheet("Sheet 1");
|
XSSFSheet sheet = workbook.createSheet("Sheet 1");
|
||||||
sheet.setColumnWidth(1, 22*256);
|
sheet.setColumnWidth(1, 22 * 256);
|
||||||
assertEquals(22*256, sheet.getColumnWidth(1));
|
assertEquals(22 * 256, sheet.getColumnWidth(1));
|
||||||
|
|
||||||
// Now check the low level stuff, and check that's all
|
// Now check the low level stuff, and check that's all
|
||||||
// been set correctly
|
// been set correctly
|
||||||
|
@ -432,9 +391,8 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||||
assertEquals(2, col.getMax());
|
assertEquals(2, col.getMax());
|
||||||
assertEquals(22.0, col.getWidth());
|
assertEquals(22.0, col.getWidth());
|
||||||
|
|
||||||
|
|
||||||
// Now set another
|
// Now set another
|
||||||
sheet.setColumnWidth(3, 33*256);
|
sheet.setColumnWidth(3, 33 * 256);
|
||||||
|
|
||||||
cols_s = cts.getColsArray();
|
cols_s = cts.getColsArray();
|
||||||
assertEquals(1, cols_s.length);
|
assertEquals(1, cols_s.length);
|
||||||
|
|
|
@ -44,46 +44,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testRepeatingRowsAndColums() {
|
|
||||||
// First test that setting RR&C for same sheet more than once only creates a
|
|
||||||
// single Print_Titles built-in record
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
|
||||||
XSSFSheet sheet = wb.createSheet("FirstSheet");
|
|
||||||
|
|
||||||
// set repeating rows and columns twice for the first sheet
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3);
|
|
||||||
//sheet.createFreezePane(0, 3);
|
|
||||||
}
|
|
||||||
assertEquals(1, wb.getNumberOfNames());
|
|
||||||
XSSFName nr1 = wb.getNameAt(0);
|
|
||||||
|
|
||||||
assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName());
|
|
||||||
assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula());
|
|
||||||
|
|
||||||
// Save and re-open
|
|
||||||
XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
||||||
|
|
||||||
assertEquals(1, nwb.getNumberOfNames());
|
|
||||||
nr1 = nwb.getNameAt(0);
|
|
||||||
|
|
||||||
assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName());
|
|
||||||
assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula());
|
|
||||||
|
|
||||||
// check that setting RR&C on a second sheet causes a new Print_Titles built-in
|
|
||||||
// name to be created
|
|
||||||
sheet = nwb.createSheet("SecondSheet");
|
|
||||||
nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0);
|
|
||||||
|
|
||||||
assertEquals(2, nwb.getNumberOfNames());
|
|
||||||
XSSFName nr2 = nwb.getNameAt(1);
|
|
||||||
|
|
||||||
assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr2.getNameName());
|
|
||||||
assertEquals("'SecondSheet'!$B:$C,'SecondSheet'!$1:$1", nr2.getRefersToFormula());
|
|
||||||
|
|
||||||
nwb.setRepeatingRowsAndColumns(1, -1, -1, -1, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that we can save, and then re-load a new document
|
* Tests that we can save, and then re-load a new document
|
||||||
*/
|
*/
|
||||||
|
@ -164,20 +124,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testFindFont(){
|
|
||||||
//get default font and check against default value
|
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
|
||||||
Font fontFind=workbook.findFont(Font.BOLDWEIGHT_NORMAL, IndexedColors.BLACK.getIndex(), (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();
|
|
||||||
((XSSFFont)font).setBold(true);
|
|
||||||
font.setUnderline(Font.U_DOUBLE);
|
|
||||||
fontFind=workbook.findFont(Font.BOLDWEIGHT_BOLD, IndexedColors.BLACK.getIndex(), (short)15, "Calibri", false, false, Font.SS_NONE, Font.U_DOUBLE);
|
|
||||||
assertNull(fontFind);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testGetCellStyleAt(){
|
public void testGetCellStyleAt(){
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
short i = 0;
|
short i = 0;
|
||||||
|
@ -212,25 +158,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
||||||
assertNotNull(fontAt);
|
assertNotNull(fontAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetNumberOfFonts(){
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
|
||||||
|
|
||||||
XSSFFont f1=wb.createFont();
|
|
||||||
f1.setBold(true);
|
|
||||||
wb.createCellStyle().setFont(f1);
|
|
||||||
|
|
||||||
XSSFFont f2=wb.createFont();
|
|
||||||
f2.setUnderline(Font.U_DOUBLE);
|
|
||||||
wb.createCellStyle().setFont(f2);
|
|
||||||
|
|
||||||
XSSFFont f3=wb.createFont();
|
|
||||||
f3.setFontHeightInPoints((short)23);
|
|
||||||
wb.createCellStyle().setFont(f3);
|
|
||||||
|
|
||||||
assertEquals(4,wb.getNumberOfFonts());
|
|
||||||
assertEquals(Font.U_DOUBLE,wb.getFontAt((short)2).getUnderline());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testGetNumCellStyles(){
|
public void testGetNumCellStyles(){
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
short i = workbook.getNumCellStyles();
|
short i = workbook.getNumCellStyles();
|
||||||
|
@ -240,17 +167,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
||||||
assertNotSame(2, i);
|
assertNotSame(2, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSetDisplayedTab(){
|
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
|
||||||
workbook.setFirstVisibleTab(1);
|
|
||||||
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() {
|
public void testLoadSave() {
|
||||||
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("Formatting.xlsx");
|
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("Formatting.xlsx");
|
||||||
assertEquals(3, workbook.getNumberOfSheets());
|
assertEquals(3, workbook.getNumberOfSheets());
|
||||||
|
|
|
@ -42,6 +42,10 @@ public final class HSSFITestDataProvider implements ITestDataProvider {
|
||||||
return new HSSFWorkbook();
|
return new HSSFWorkbook();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte[] getTestDataFileContent(String fileName) {
|
||||||
|
return HSSFTestDataSamples.getTestDataFileContent(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
private HSSFITestDataProvider(){}
|
private HSSFITestDataProvider(){}
|
||||||
private static HSSFITestDataProvider inst = new HSSFITestDataProvider();
|
private static HSSFITestDataProvider inst = new HSSFITestDataProvider();
|
||||||
public static HSSFITestDataProvider getInstance(){
|
public static HSSFITestDataProvider getInstance(){
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class AllUserModelTests {
|
||||||
result.addTestSuite(TestHSSFTextbox.class);
|
result.addTestSuite(TestHSSFTextbox.class);
|
||||||
result.addTestSuite(TestHSSFWorkbook.class);
|
result.addTestSuite(TestHSSFWorkbook.class);
|
||||||
result.addTestSuite(TestLinkTable.class);
|
result.addTestSuite(TestLinkTable.class);
|
||||||
result.addTestSuite(TestNamedRange.class);
|
result.addTestSuite(TestHSSFName.class);
|
||||||
result.addTestSuite(TestOLE2Embeding.class);
|
result.addTestSuite(TestOLE2Embeding.class);
|
||||||
result.addTestSuite(TestPOIFSProperties.class);
|
result.addTestSuite(TestPOIFSProperties.class);
|
||||||
result.addTestSuite(TestReadWriteChart.class);
|
result.addTestSuite(TestReadWriteChart.class);
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
/* ====================================================================
|
|
||||||
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.hssf.usermodel;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public final class TestBug43093 extends TestCase {
|
|
||||||
|
|
||||||
private static void addNewSheetWithCellsA1toD4(HSSFWorkbook book, int sheet) {
|
|
||||||
|
|
||||||
HSSFSheet sht = book .createSheet("s" + sheet);
|
|
||||||
for (int r=0; r < 4; r++) {
|
|
||||||
|
|
||||||
HSSFRow row = sht.createRow (r);
|
|
||||||
for (int c=0; c < 4; c++) {
|
|
||||||
|
|
||||||
HSSFCell cel = row.createCell(c);
|
|
||||||
cel.setCellValue(sheet*100 + r*10 + c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testBug43093() {
|
|
||||||
HSSFWorkbook xlw = new HSSFWorkbook();
|
|
||||||
|
|
||||||
addNewSheetWithCellsA1toD4(xlw, 1);
|
|
||||||
addNewSheetWithCellsA1toD4(xlw, 2);
|
|
||||||
addNewSheetWithCellsA1toD4(xlw, 3);
|
|
||||||
addNewSheetWithCellsA1toD4(xlw, 4);
|
|
||||||
|
|
||||||
HSSFSheet s2 = xlw.getSheet("s2");
|
|
||||||
HSSFRow s2r3 = s2.getRow(3);
|
|
||||||
HSSFCell s2E4 = s2r3.createCell(4);
|
|
||||||
s2E4.setCellFormula("SUM(s3!B2:C3)");
|
|
||||||
|
|
||||||
HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(xlw);
|
|
||||||
double d = eva.evaluate(s2E4).getNumberValue();
|
|
||||||
|
|
||||||
// internalEvaluate(...) Area3DEval.: 311+312+321+322 expected
|
|
||||||
assertEquals(d, (311+312+321+322), 0.0000001);
|
|
||||||
// System.out.println("Area3DEval ok.: 311+312+321+322=" + d);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -26,6 +26,7 @@ import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||||
import org.apache.poi.hssf.OldExcelFormatException;
|
import org.apache.poi.hssf.OldExcelFormatException;
|
||||||
|
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||||
import org.apache.poi.hssf.model.Workbook;
|
import org.apache.poi.hssf.model.Workbook;
|
||||||
import org.apache.poi.hssf.record.CellValueRecordInterface;
|
import org.apache.poi.hssf.record.CellValueRecordInterface;
|
||||||
import org.apache.poi.hssf.record.EmbeddedObjectRefSubRecord;
|
import org.apache.poi.hssf.record.EmbeddedObjectRefSubRecord;
|
||||||
|
@ -36,23 +37,33 @@ import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
import org.apache.poi.ss.usermodel.RichTextString;
|
import org.apache.poi.ss.usermodel.RichTextString;
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
import org.apache.poi.util.TempFile;
|
import org.apache.poi.util.TempFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Testcases for bugs entered in bugzilla
|
* Testcases for bugs entered in bugzilla
|
||||||
* the Test name contains the bugzilla bug id
|
* the Test name contains the bugzilla bug id
|
||||||
|
*
|
||||||
|
* <b>YK: If a bug can be tested in terms of common ss interfaces,
|
||||||
|
* define the test in the base class {@link BaseTestBugzillaIssues}</b>
|
||||||
|
*
|
||||||
* @author Avik Sengupta
|
* @author Avik Sengupta
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public final class TestBugs extends TestCase {
|
public final class TestBugs extends BaseTestBugzillaIssues {
|
||||||
|
|
||||||
private static HSSFWorkbook openSample(String sampleFileName) {
|
@Override
|
||||||
return HSSFTestDataSamples.openSampleWorkbook(sampleFileName);
|
protected HSSFITestDataProvider getTestDataProvider(){
|
||||||
|
return HSSFITestDataProvider.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) {
|
private HSSFWorkbook openSample(String sampleFileName) {
|
||||||
return HSSFTestDataSamples.writeOutAndReadBack(original);
|
return getTestDataProvider().openSampleWorkbook(sampleFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) {
|
||||||
|
return getTestDataProvider().writeOutAndReadBack(original);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeTestOutputFileForViewing(HSSFWorkbook wb, String simpleFileName) {
|
private static void writeTestOutputFileForViewing(HSSFWorkbook wb, String simpleFileName) {
|
||||||
|
@ -94,16 +105,6 @@ public final class TestBugs extends TestCase {
|
||||||
c.setCellValue(10);
|
c.setCellValue(10);
|
||||||
writeOutAndReadBack(wb);
|
writeOutAndReadBack(wb);
|
||||||
}
|
}
|
||||||
/**Test writing a hyperlink
|
|
||||||
* Open resulting sheet in Excel and check that A1 contains a hyperlink*/
|
|
||||||
public void test23094() {
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet s = wb.createSheet();
|
|
||||||
HSSFRow r = s.createRow(0);
|
|
||||||
r.createCell(0).setCellFormula("HYPERLINK( \"http://jakarta.apache.org\", \"Jakarta\" )");
|
|
||||||
|
|
||||||
writeTestOutputFileForViewing(wb, "test23094");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** test hyperlinks
|
/** test hyperlinks
|
||||||
* open resulting file in excel, and check that there is a link to Google
|
* open resulting file in excel, and check that there is a link to Google
|
||||||
|
@ -163,66 +164,12 @@ public final class TestBugs extends TestCase {
|
||||||
|
|
||||||
writeTestOutputFileForViewing(wb, "test15375");
|
writeTestOutputFileForViewing(wb, "test15375");
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
/** test writing a file with large number of unique strings
|
* test writing a file with large number of unique strings,
|
||||||
*open resulting file in Excel to check results!*/
|
* open resulting file in Excel to check results!
|
||||||
|
*/
|
||||||
public void test15375_2() throws Exception{
|
public void test15375_2() {
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
baseTest15375(6000);
|
||||||
HSSFSheet sheet = wb.createSheet();
|
|
||||||
|
|
||||||
String tmp1 = null;
|
|
||||||
String tmp2 = null;
|
|
||||||
String tmp3 = null;
|
|
||||||
|
|
||||||
for (int i = 0; i < 6000; i++) {
|
|
||||||
tmp1 = "Test1" + i;
|
|
||||||
tmp2 = "Test2" + i;
|
|
||||||
tmp3 = "Test3" + i;
|
|
||||||
|
|
||||||
HSSFRow row = sheet.createRow(i);
|
|
||||||
|
|
||||||
HSSFCell cell = row.createCell(0);
|
|
||||||
setCellText(cell, tmp1);
|
|
||||||
cell = row.createCell(1);
|
|
||||||
setCellText(cell, tmp2);
|
|
||||||
cell = row.createCell(2);
|
|
||||||
setCellText(cell, tmp3);
|
|
||||||
}
|
|
||||||
writeTestOutputFileForViewing(wb, "test15375-2");
|
|
||||||
}
|
|
||||||
/** another test for the number of unique strings issue
|
|
||||||
*test opening the resulting file in Excel*/
|
|
||||||
public void test22568() {
|
|
||||||
int r=2000;int c=3;
|
|
||||||
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook() ;
|
|
||||||
HSSFSheet sheet = wb.createSheet("ExcelTest") ;
|
|
||||||
|
|
||||||
int col_cnt=0, rw_cnt=0 ;
|
|
||||||
|
|
||||||
col_cnt = c;
|
|
||||||
rw_cnt = r;
|
|
||||||
|
|
||||||
HSSFRow rw ;
|
|
||||||
rw = sheet.createRow(0) ;
|
|
||||||
//Header row
|
|
||||||
for(int j=0; j<col_cnt; j++){
|
|
||||||
HSSFCell cell = rw.createCell(j) ;
|
|
||||||
setCellText(cell, "Col " + (j+1)) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i=1; i<rw_cnt; i++){
|
|
||||||
rw = sheet.createRow(i) ;
|
|
||||||
for(int j=0; j<col_cnt; j++){
|
|
||||||
HSSFCell cell = rw.createCell(j) ;
|
|
||||||
setCellText(cell, "Row:" + (i+1) + ",Column:" + (j+1)) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sheet.setDefaultColumnWidth(18) ;
|
|
||||||
|
|
||||||
writeTestOutputFileForViewing(wb, "test22568");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Double byte strings*/
|
/**Double byte strings*/
|
||||||
|
@ -286,50 +233,6 @@ public final class TestBugs extends TestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test18800() {
|
|
||||||
HSSFWorkbook book = new HSSFWorkbook();
|
|
||||||
book.createSheet("TEST");
|
|
||||||
HSSFSheet sheet = book.cloneSheet(0);
|
|
||||||
book.setSheetName(1,"CLONE");
|
|
||||||
sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Test"));
|
|
||||||
|
|
||||||
book = writeOutAndReadBack(book);
|
|
||||||
sheet = book.getSheet("CLONE");
|
|
||||||
HSSFRow row = sheet.getRow(0);
|
|
||||||
HSSFCell cell = row.getCell(0);
|
|
||||||
assertEquals("Test", cell.getRichStringCellValue().getString());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Merged regions were being removed from the parent in cloned sheets
|
|
||||||
*/
|
|
||||||
public void test22720() {
|
|
||||||
HSSFWorkbook workBook = new HSSFWorkbook();
|
|
||||||
workBook.createSheet("TEST");
|
|
||||||
HSSFSheet template = workBook.getSheetAt(0);
|
|
||||||
|
|
||||||
template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));
|
|
||||||
template.addMergedRegion(new CellRangeAddress(1, 2, 0, 2));
|
|
||||||
|
|
||||||
HSSFSheet clone = workBook.cloneSheet(0);
|
|
||||||
int originalMerged = template.getNumMergedRegions();
|
|
||||||
assertEquals("2 merged regions", 2, originalMerged);
|
|
||||||
|
|
||||||
// remove merged regions from clone
|
|
||||||
for (int i=template.getNumMergedRegions()-1; i>=0; i--) {
|
|
||||||
clone.removeMergedRegion(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions());
|
|
||||||
// check if template's merged regions are OK
|
|
||||||
if (template.getNumMergedRegions()>0) {
|
|
||||||
// fetch the first merged region...EXCEPTION OCCURS HERE
|
|
||||||
template.getMergedRegion(0);
|
|
||||||
}
|
|
||||||
//make sure we dont exception
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**Tests read and write of Unicode strings in formula results
|
/**Tests read and write of Unicode strings in formula results
|
||||||
* bug and testcase submitted by Sompop Kumnoonsate
|
* bug and testcase submitted by Sompop Kumnoonsate
|
||||||
* The file contains THAI unicode characters.
|
* The file contains THAI unicode characters.
|
||||||
|
@ -424,21 +327,6 @@ public final class TestBugs extends TestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test28031() {
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet sheet = wb.createSheet();
|
|
||||||
wb.setSheetName(0, "Sheet1");
|
|
||||||
|
|
||||||
HSSFRow row = sheet.createRow(0);
|
|
||||||
HSSFCell cell = row.createCell(0);
|
|
||||||
String formulaText =
|
|
||||||
"IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))";
|
|
||||||
cell.setCellFormula(formulaText);
|
|
||||||
|
|
||||||
assertEquals(formulaText, cell.getCellFormula());
|
|
||||||
writeTestOutputFileForViewing(wb, "output28031.xls");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void test33082() {
|
public void test33082() {
|
||||||
openSample("33082.xls");
|
openSample("33082.xls");
|
||||||
}
|
}
|
||||||
|
@ -486,19 +374,8 @@ public final class TestBugs extends TestCase {
|
||||||
*/
|
*/
|
||||||
public void test29206() {
|
public void test29206() {
|
||||||
//the first check with blank workbook
|
//the first check with blank workbook
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
HSSFWorkbook wb = openSample("Simple.xls");
|
||||||
HSSFSheet sheet = wb.createSheet();
|
HSSFSheet sheet = wb.createSheet();
|
||||||
|
|
||||||
for(int i = 1; i < 400; i++) {
|
|
||||||
HSSFRow row = sheet.getRow(i);
|
|
||||||
if(row != null) {
|
|
||||||
row.getCell(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//now check on an existing xls file
|
|
||||||
wb = openSample("Simple.xls");
|
|
||||||
|
|
||||||
for(int i = 1; i < 400; i++) {
|
for(int i = 1; i < 400; i++) {
|
||||||
HSSFRow row = sheet.getRow(i);
|
HSSFRow row = sheet.getRow(i);
|
||||||
if(row != null) {
|
if(row != null) {
|
||||||
|
@ -901,23 +778,6 @@ public final class TestBugs extends TestCase {
|
||||||
assertTrue("no errors writing sample xls", true);
|
assertTrue("no errors writing sample xls", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Bug 21334: "File error: data may have been lost" with a file
|
|
||||||
* that contains macros and this formula:
|
|
||||||
* {=SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""))>0,1))}
|
|
||||||
*/
|
|
||||||
public void test21334() {
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet sh = wb.createSheet();
|
|
||||||
HSSFCell cell = sh.createRow(0).createCell(0);
|
|
||||||
String formula = "SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"))>0,1))";
|
|
||||||
cell.setCellFormula(formula);
|
|
||||||
|
|
||||||
HSSFWorkbook wb_sv = writeOutAndReadBack(wb);
|
|
||||||
HSSFCell cell_sv = wb_sv.getSheetAt(0).getRow(0).getCell(0);
|
|
||||||
assertEquals(formula, cell_sv.getCellFormula());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void test36947() {
|
public void test36947() {
|
||||||
HSSFWorkbook wb = openSample("36947.xls");
|
HSSFWorkbook wb = openSample("36947.xls");
|
||||||
assertTrue("no errors reading sample xls", true);
|
assertTrue("no errors reading sample xls", true);
|
||||||
|
@ -925,16 +785,6 @@ public final class TestBugs extends TestCase {
|
||||||
assertTrue("no errors writing sample xls", true);
|
assertTrue("no errors writing sample xls", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Bug 42448: Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69
|
|
||||||
*/
|
|
||||||
public void test42448(){
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFCell cell = wb.createSheet().createRow(0).createCell(0);
|
|
||||||
cell.setCellFormula("SUMPRODUCT(A!C7:A!C67, B8:B68) / B69");
|
|
||||||
assertTrue("no errors parsing formula", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void test39634() {
|
public void test39634() {
|
||||||
HSSFWorkbook wb = openSample("39634.xls");
|
HSSFWorkbook wb = openSample("39634.xls");
|
||||||
assertTrue("no errors reading sample xls", true);
|
assertTrue("no errors reading sample xls", true);
|
||||||
|
@ -1521,38 +1371,6 @@ public final class TestBugs extends TestCase {
|
||||||
assertEquals(1, wb.getNumberOfSheets());
|
assertEquals(1, wb.getNumberOfSheets());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* HSSFRichTextString.length() returns negative for really
|
|
||||||
* long strings
|
|
||||||
*/
|
|
||||||
public void test46368() {
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet s = wb.createSheet();
|
|
||||||
HSSFRow r = s.createRow(0);
|
|
||||||
for(int i=0; i<15; i++) {
|
|
||||||
int len = 32760 + i;
|
|
||||||
HSSFCell c = r.createCell(i);
|
|
||||||
|
|
||||||
StringBuffer sb = new StringBuffer();
|
|
||||||
for(int j=0; j<len; j++) {
|
|
||||||
sb.append("x");
|
|
||||||
}
|
|
||||||
HSSFRichTextString rtr = new HSSFRichTextString(sb.toString());
|
|
||||||
assertEquals(len, rtr.length());
|
|
||||||
c.setCellValue(rtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save and reload
|
|
||||||
wb = writeOutAndReadBack(wb);
|
|
||||||
s = wb.getSheetAt(0);
|
|
||||||
r = s.getRow(0);
|
|
||||||
for(int i=0; i<15; i++) {
|
|
||||||
int len = 32760 + i;
|
|
||||||
HSSFCell c = r.getCell(i);
|
|
||||||
assertEquals(len, c.getRichStringCellValue().length());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In POI-2.5 user reported exception when parsing a name with a custom VBA function:
|
* In POI-2.5 user reported exception when parsing a name with a custom VBA function:
|
||||||
* =MY_VBA_FUNCTION("lskdjflsk")
|
* =MY_VBA_FUNCTION("lskdjflsk")
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.hssf.usermodel;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.GregorianCalendar;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import junit.framework.AssertionFailedError;
|
||||||
|
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||||
|
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||||
|
import org.apache.poi.hssf.model.Sheet;
|
||||||
|
import org.apache.poi.hssf.model.HSSFFormulaParser;
|
||||||
|
import org.apache.poi.hssf.record.DBCellRecord;
|
||||||
|
import org.apache.poi.hssf.record.FormulaRecord;
|
||||||
|
import org.apache.poi.hssf.record.Record;
|
||||||
|
import org.apache.poi.hssf.record.StringRecord;
|
||||||
|
import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.ss.util.AreaReference;
|
||||||
|
import org.apache.poi.ss.util.CellReference;
|
||||||
|
import org.apache.poi.ss.formula.FormulaType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}.
|
||||||
|
*
|
||||||
|
* @author Yegor Kozlov
|
||||||
|
*/
|
||||||
|
public final class TestHSSFFont extends BaseTestFont {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected HSSFITestDataProvider getTestDataProvider(){
|
||||||
|
return HSSFITestDataProvider.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDefaultFont() {
|
||||||
|
baseTestDefaultFont(HSSFFont.FONT_ARIAL, (short)200, Font.COLOR_NORMAL);
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,24 +19,34 @@ package org.apache.poi.hssf.usermodel;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
import junit.framework.AssertionFailedError;
|
import junit.framework.AssertionFailedError;
|
||||||
import org.apache.poi.hssf.HSSFITestDataProvider;
|
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||||
|
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||||
import org.apache.poi.hssf.model.Sheet;
|
import org.apache.poi.hssf.model.Sheet;
|
||||||
|
import org.apache.poi.hssf.model.HSSFFormulaParser;
|
||||||
import org.apache.poi.hssf.record.DBCellRecord;
|
import org.apache.poi.hssf.record.DBCellRecord;
|
||||||
import org.apache.poi.hssf.record.FormulaRecord;
|
import org.apache.poi.hssf.record.FormulaRecord;
|
||||||
import org.apache.poi.hssf.record.Record;
|
import org.apache.poi.hssf.record.Record;
|
||||||
import org.apache.poi.hssf.record.StringRecord;
|
import org.apache.poi.hssf.record.StringRecord;
|
||||||
|
import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
import org.apache.poi.ss.usermodel.ErrorConstants;
|
import org.apache.poi.ss.usermodel.ErrorConstants;
|
||||||
import org.apache.poi.ss.usermodel.BaseTestCell;
|
import org.apache.poi.ss.usermodel.BaseTestCell;
|
||||||
import org.apache.poi.ss.usermodel.BaseTestNamedRange;
|
import org.apache.poi.ss.usermodel.BaseTestNamedRange;
|
||||||
|
import org.apache.poi.ss.util.AreaReference;
|
||||||
|
import org.apache.poi.ss.util.CellReference;
|
||||||
|
import org.apache.poi.ss.formula.FormulaType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests various functionality having to do with {@link org.apache.poi.hssf.usermodel.HSSFCell}. For instance support for
|
* Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}.
|
||||||
* particular datatypes, etc.
|
*
|
||||||
* @author Andrew C. Oliver (andy at superlinksoftware dot com)
|
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||||
* @author Dan Sherman (dsherman at isisph.com)
|
* @author ROMANL
|
||||||
* @author Alex Jacoby (ajacoby at gmail.com)
|
* @author Danny Mui (danny at muibros.com)
|
||||||
|
* @author Amol S. Deshmukh < amol at ap ache dot org >
|
||||||
*/
|
*/
|
||||||
public final class TestHSSFName extends BaseTestNamedRange {
|
public final class TestHSSFName extends BaseTestNamedRange {
|
||||||
|
|
||||||
|
@ -45,4 +55,187 @@ public final class TestHSSFName extends BaseTestNamedRange {
|
||||||
return HSSFITestDataProvider.getInstance();
|
return HSSFITestDataProvider.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testRepeatingRowsAndColumsNames() {
|
||||||
|
// First test that setting RR&C for same sheet more than once only creates a
|
||||||
|
// single Print_Titles built-in record
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
HSSFSheet sheet = wb.createSheet("FirstSheet");
|
||||||
|
|
||||||
|
// set repeating rows and columns twice for the first sheet
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3-1);
|
||||||
|
sheet.createFreezePane(0, 3);
|
||||||
|
}
|
||||||
|
assertEquals(1, wb.getNumberOfNames());
|
||||||
|
HSSFName nr1 = wb.getNameAt(0);
|
||||||
|
|
||||||
|
assertEquals("Print_Titles", nr1.getNameName());
|
||||||
|
if (false) {
|
||||||
|
// TODO - full column references not rendering properly, absolute markers not present either
|
||||||
|
assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula());
|
||||||
|
} else {
|
||||||
|
assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save and re-open
|
||||||
|
HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
||||||
|
|
||||||
|
assertEquals(1, nwb.getNumberOfNames());
|
||||||
|
nr1 = nwb.getNameAt(0);
|
||||||
|
|
||||||
|
assertEquals("Print_Titles", nr1.getNameName());
|
||||||
|
assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula());
|
||||||
|
|
||||||
|
// check that setting RR&C on a second sheet causes a new Print_Titles built-in
|
||||||
|
// name to be created
|
||||||
|
sheet = nwb.createSheet("SecondSheet");
|
||||||
|
nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0);
|
||||||
|
|
||||||
|
assertEquals(2, nwb.getNumberOfNames());
|
||||||
|
HSSFName nr2 = nwb.getNameAt(1);
|
||||||
|
|
||||||
|
assertEquals("Print_Titles", nr2.getNameName());
|
||||||
|
assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula());
|
||||||
|
|
||||||
|
if (false) {
|
||||||
|
// In case you fancy checking in excel, to ensure it
|
||||||
|
// won't complain about the file now
|
||||||
|
try {
|
||||||
|
File tempFile = File.createTempFile("POI-45126-", ".xls");
|
||||||
|
FileOutputStream fout = new FileOutputStream(tempFile);
|
||||||
|
nwb.write(fout);
|
||||||
|
fout.close();
|
||||||
|
System.out.println("check out " + tempFile.getAbsolutePath());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Test of TestCase method, of class test.RangeTest. */
|
||||||
|
public void testNamedRange() {
|
||||||
|
HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("Simple.xls");
|
||||||
|
|
||||||
|
//Creating new Named Range
|
||||||
|
HSSFName newNamedRange = wb.createName();
|
||||||
|
|
||||||
|
//Getting Sheet Name for the reference
|
||||||
|
String sheetName = wb.getSheetName(0);
|
||||||
|
|
||||||
|
//Setting its name
|
||||||
|
newNamedRange.setNameName("RangeTest");
|
||||||
|
//Setting its reference
|
||||||
|
newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8");
|
||||||
|
|
||||||
|
//Getting NAmed Range
|
||||||
|
HSSFName namedRange1 = wb.getNameAt(0);
|
||||||
|
//Getting it sheet name
|
||||||
|
sheetName = namedRange1.getSheetName();
|
||||||
|
|
||||||
|
// sanity check
|
||||||
|
SanityChecker c = new SanityChecker();
|
||||||
|
c.checkHSSFWorkbook(wb);
|
||||||
|
|
||||||
|
wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
||||||
|
HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest"));
|
||||||
|
assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName()));
|
||||||
|
assertEquals(wb.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an excel file already containing a named range.
|
||||||
|
* <p>
|
||||||
|
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a>
|
||||||
|
*/
|
||||||
|
public void testNamedRead() {
|
||||||
|
HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("namedinput.xls");
|
||||||
|
|
||||||
|
//Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10
|
||||||
|
int NamedRangeIndex = wb.getNameIndex("NamedRangeName");
|
||||||
|
|
||||||
|
//Getting NAmed Range
|
||||||
|
HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex);
|
||||||
|
String sheetName = wb.getSheetName(0);
|
||||||
|
|
||||||
|
//Getting its reference
|
||||||
|
String reference = namedRange1.getRefersToFormula();
|
||||||
|
|
||||||
|
assertEquals(sheetName+"!$A$1:$D$10", reference);
|
||||||
|
|
||||||
|
HSSFName namedRange2 = wb.getNameAt(1);
|
||||||
|
|
||||||
|
assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula());
|
||||||
|
assertEquals("SecondNamedRange", namedRange2.getNameName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an excel file already containing a named range and updates it
|
||||||
|
* <p>
|
||||||
|
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a>
|
||||||
|
*/
|
||||||
|
public void testNamedReadModify() {
|
||||||
|
HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("namedinput.xls");
|
||||||
|
|
||||||
|
HSSFName name = wb.getNameAt(0);
|
||||||
|
String sheetName = wb.getSheetName(0);
|
||||||
|
|
||||||
|
assertEquals(sheetName+"!$A$1:$D$10", name.getRefersToFormula());
|
||||||
|
|
||||||
|
name = wb.getNameAt(1);
|
||||||
|
String newReference = sheetName +"!$A$1:$C$36";
|
||||||
|
|
||||||
|
name.setRefersToFormula(newReference);
|
||||||
|
assertEquals(newReference, name.getRefersToFormula());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test to see if the print area can be retrieved from an excel created file
|
||||||
|
*/
|
||||||
|
public void testPrintAreaFileRead() {
|
||||||
|
HSSFWorkbook workbook = getTestDataProvider().openSampleWorkbook("SimpleWithPrintArea.xls");
|
||||||
|
|
||||||
|
String sheetName = workbook.getSheetName(0);
|
||||||
|
String reference = sheetName+"!$A$1:$C$5";
|
||||||
|
|
||||||
|
assertEquals(reference, workbook.getPrintArea(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void testDeletedReference() throws Exception {
|
||||||
|
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls");
|
||||||
|
assertEquals(2, wb.getNumberOfNames());
|
||||||
|
|
||||||
|
HSSFName name1 = wb.getNameAt(0);
|
||||||
|
assertEquals("a", name1.getNameName());
|
||||||
|
assertEquals("Sheet1!$A$1", name1.getRefersToFormula());
|
||||||
|
new AreaReference(name1.getRefersToFormula());
|
||||||
|
assertTrue("Successfully constructed first reference", true);
|
||||||
|
|
||||||
|
HSSFName name2 = wb.getNameAt(1);
|
||||||
|
assertEquals("b", name2.getNameName());
|
||||||
|
assertEquals("Sheet1!#REF!", name2.getRefersToFormula());
|
||||||
|
assertTrue(name2.isDeleted());
|
||||||
|
try {
|
||||||
|
new AreaReference(name2.getRefersToFormula());
|
||||||
|
fail("attempt to supply an invalid reference to AreaReference constructor results in exception");
|
||||||
|
} catch (StringIndexOutOfBoundsException e) { // TODO - use a different exception for this condition
|
||||||
|
// expected during successful test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When setting A1 type of referencese HSSFName.setRefersToFormula
|
||||||
|
* must set the type of operands to Ptg.CLASS_REF,
|
||||||
|
* otherwise created named don't appear in the dropdown to the left opf formula bar in Excel
|
||||||
|
*/
|
||||||
|
public void testTypeOfRootPtg(){
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
wb.createSheet("CSCO");
|
||||||
|
|
||||||
|
Ptg[] ptgs = HSSFFormulaParser.parse("CSCO!$E$71", wb, FormulaType.NAMEDRANGE, 0);
|
||||||
|
for (int i = 0; i < ptgs.length; i++) {
|
||||||
|
assertEquals('R', ptgs[i].getRVAType());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -19,33 +19,23 @@ package org.apache.poi.hssf.usermodel;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||||
|
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||||
|
import org.apache.poi.ss.usermodel.BaseTestPicture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test <code>HSSFPicture</code>.
|
* Test <code>HSSFPicture</code>.
|
||||||
*
|
*
|
||||||
* @author Yegor Kozlov (yegor at apache.org)
|
* @author Yegor Kozlov (yegor at apache.org)
|
||||||
*/
|
*/
|
||||||
public final class TestHSSFPicture extends TestCase{
|
public final class TestHSSFPicture extends BaseTestPicture {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected HSSFITestDataProvider getTestDataProvider(){
|
||||||
|
return HSSFITestDataProvider.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
public void testResize() {
|
public void testResize() {
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
baseTestResize(new HSSFClientAnchor(0, 0, 848, 240, (short)0, 0, (short)1, 9));
|
||||||
HSSFSheet sh1 = wb.createSheet();
|
|
||||||
HSSFPatriarch p1 = sh1.createDrawingPatriarch();
|
|
||||||
|
|
||||||
byte[] pictureData = HSSFTestDataSamples.getTestDataFileContent("logoKarmokar4.png");
|
|
||||||
int idx1 = wb.addPicture( pictureData, HSSFWorkbook.PICTURE_TYPE_PNG );
|
|
||||||
HSSFPicture picture1 = p1.createPicture(new HSSFClientAnchor(), idx1);
|
|
||||||
HSSFClientAnchor anchor1 = picture1.getPreferredSize();
|
|
||||||
|
|
||||||
//assert against what would BiffViewer print if we insert the image in xls and dump the file
|
|
||||||
assertEquals(0, anchor1.getCol1());
|
|
||||||
assertEquals(0, anchor1.getRow1());
|
|
||||||
assertEquals(1, anchor1.getCol2());
|
|
||||||
assertEquals(9, anchor1.getRow2());
|
|
||||||
assertEquals(0, anchor1.getDx1());
|
|
||||||
assertEquals(0, anchor1.getDy1());
|
|
||||||
assertEquals(848, anchor1.getDx2());
|
|
||||||
assertEquals(240, anchor1.getDy2());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -59,23 +59,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||||
assertEquals(3, nameRecord.getSheetNumber());
|
assertEquals(3, nameRecord.getSheetNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCaseInsensitiveNames() {
|
|
||||||
HSSFWorkbook b = new HSSFWorkbook( );
|
|
||||||
HSSFSheet originalSheet = b.createSheet("Sheet1");
|
|
||||||
HSSFSheet fetchedSheet = b.getSheet("sheet1");
|
|
||||||
if(fetchedSheet == null) {
|
|
||||||
throw new AssertionFailedError("Identified bug 44892");
|
|
||||||
}
|
|
||||||
assertEquals(originalSheet, fetchedSheet);
|
|
||||||
try {
|
|
||||||
b.createSheet("sHeeT1");
|
|
||||||
fail("should have thrown exceptiuon due to duplicate sheet name");
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
// expected during successful test
|
|
||||||
assertEquals("The workbook already contains a sheet of this name", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testWindowOneDefaults() {
|
public void testWindowOneDefaults() {
|
||||||
HSSFWorkbook b = new HSSFWorkbook( );
|
HSSFWorkbook b = new HSSFWorkbook( );
|
||||||
try {
|
try {
|
||||||
|
@ -154,7 +137,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||||
// So, start again
|
// So, start again
|
||||||
b = getTestDataProvider().openSampleWorkbook("44010-SingleChart.xls");
|
b = getTestDataProvider().openSampleWorkbook("44010-SingleChart.xls");
|
||||||
|
|
||||||
b = writeRead(b);
|
b = getTestDataProvider().writeOutAndReadBack(b);
|
||||||
assertEquals(2, b.getNumberOfSheets());
|
assertEquals(2, b.getNumberOfSheets());
|
||||||
s = b.getSheetAt(1);
|
s = b.getSheetAt(1);
|
||||||
assertEquals(0, s.getFirstRowNum());
|
assertEquals(0, s.getFirstRowNum());
|
||||||
|
@ -184,7 +167,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||||
// So, start again
|
// So, start again
|
||||||
b = getTestDataProvider().openSampleWorkbook("44010-TwoCharts.xls");
|
b = getTestDataProvider().openSampleWorkbook("44010-TwoCharts.xls");
|
||||||
|
|
||||||
b = writeRead(b);
|
b = getTestDataProvider().writeOutAndReadBack(b);
|
||||||
assertEquals(3, b.getNumberOfSheets());
|
assertEquals(3, b.getNumberOfSheets());
|
||||||
|
|
||||||
s = b.getSheetAt(1);
|
s = b.getSheetAt(1);
|
||||||
|
@ -195,11 +178,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||||
assertEquals(8, s.getLastRowNum());
|
assertEquals(8, s.getLastRowNum());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HSSFWorkbook writeRead(HSSFWorkbook b) {
|
|
||||||
return HSSFTestDataSamples.writeOutAndReadBack(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void testSelectedSheet_bug44523() {
|
public void testSelectedSheet_bug44523() {
|
||||||
HSSFWorkbook wb=new HSSFWorkbook();
|
HSSFWorkbook wb=new HSSFWorkbook();
|
||||||
HSSFSheet sheet1 = wb.createSheet("Sheet1");
|
HSSFSheet sheet1 = wb.createSheet("Sheet1");
|
||||||
|
|
|
@ -1,603 +0,0 @@
|
||||||
/* ====================================================================
|
|
||||||
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.hssf.usermodel;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
|
||||||
import org.apache.poi.hssf.model.HSSFFormulaParser;
|
|
||||||
import org.apache.poi.hssf.record.formula.Ptg;
|
|
||||||
import org.apache.poi.ss.util.AreaReference;
|
|
||||||
import org.apache.poi.ss.util.CellReference;
|
|
||||||
import org.apache.poi.ss.formula.FormulaType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author ROMANL
|
|
||||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
|
||||||
* @author Danny Mui (danny at muibros.com)
|
|
||||||
* @author Amol S. Deshmukh < amol at ap ache dot org >
|
|
||||||
*/
|
|
||||||
public final class TestNamedRange extends TestCase {
|
|
||||||
|
|
||||||
private static HSSFWorkbook openSample(String sampleFileName) {
|
|
||||||
return HSSFTestDataSamples.openSampleWorkbook(sampleFileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Test of TestCase method, of class test.RangeTest. */
|
|
||||||
public void testNamedRange() {
|
|
||||||
HSSFWorkbook wb = openSample("Simple.xls");
|
|
||||||
|
|
||||||
//Creating new Named Range
|
|
||||||
HSSFName newNamedRange = wb.createName();
|
|
||||||
|
|
||||||
//Getting Sheet Name for the reference
|
|
||||||
String sheetName = wb.getSheetName(0);
|
|
||||||
|
|
||||||
//Setting its name
|
|
||||||
newNamedRange.setNameName("RangeTest");
|
|
||||||
//Setting its reference
|
|
||||||
newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8");
|
|
||||||
|
|
||||||
//Getting NAmed Range
|
|
||||||
HSSFName namedRange1 = wb.getNameAt(0);
|
|
||||||
//Getting it sheet name
|
|
||||||
sheetName = namedRange1.getSheetName();
|
|
||||||
|
|
||||||
// sanity check
|
|
||||||
SanityChecker c = new SanityChecker();
|
|
||||||
c.checkHSSFWorkbook(wb);
|
|
||||||
|
|
||||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
||||||
HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest"));
|
|
||||||
assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName()));
|
|
||||||
assertEquals(wb.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads an excel file already containing a named range.
|
|
||||||
* <p>
|
|
||||||
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a>
|
|
||||||
*/
|
|
||||||
public void testNamedRead() {
|
|
||||||
HSSFWorkbook wb = openSample("namedinput.xls");
|
|
||||||
|
|
||||||
//Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10
|
|
||||||
int NamedRangeIndex = wb.getNameIndex("NamedRangeName");
|
|
||||||
|
|
||||||
//Getting NAmed Range
|
|
||||||
HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex);
|
|
||||||
String sheetName = wb.getSheetName(0);
|
|
||||||
|
|
||||||
//Getting its reference
|
|
||||||
String reference = namedRange1.getRefersToFormula();
|
|
||||||
|
|
||||||
assertEquals(sheetName+"!$A$1:$D$10", reference);
|
|
||||||
|
|
||||||
HSSFName namedRange2 = wb.getNameAt(1);
|
|
||||||
|
|
||||||
assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula());
|
|
||||||
assertEquals("SecondNamedRange", namedRange2.getNameName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads an excel file already containing a named range and updates it
|
|
||||||
* <p>
|
|
||||||
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a>
|
|
||||||
*/
|
|
||||||
public void testNamedReadModify() {
|
|
||||||
HSSFWorkbook wb = openSample("namedinput.xls");
|
|
||||||
|
|
||||||
HSSFName name = wb.getNameAt(0);
|
|
||||||
String sheetName = wb.getSheetName(0);
|
|
||||||
|
|
||||||
assertEquals(sheetName+"!$A$1:$D$10", name.getRefersToFormula());
|
|
||||||
|
|
||||||
name = wb.getNameAt(1);
|
|
||||||
String newReference = sheetName +"!$A$1:$C$36";
|
|
||||||
|
|
||||||
name.setRefersToFormula(newReference);
|
|
||||||
assertEquals(newReference, name.getRefersToFormula());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test that multiple named ranges can be added written and read
|
|
||||||
*/
|
|
||||||
public void testMultipleNamedWrite() {
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
|
|
||||||
|
|
||||||
wb.createSheet("testSheet1");
|
|
||||||
String sheetName = wb.getSheetName(0);
|
|
||||||
|
|
||||||
assertEquals("testSheet1", sheetName);
|
|
||||||
|
|
||||||
//Creating new Named Range
|
|
||||||
HSSFName newNamedRange = wb.createName();
|
|
||||||
|
|
||||||
newNamedRange.setNameName("RangeTest");
|
|
||||||
newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8");
|
|
||||||
|
|
||||||
//Creating another new Named Range
|
|
||||||
HSSFName newNamedRange2 = wb.createName();
|
|
||||||
|
|
||||||
newNamedRange2.setNameName("AnotherTest");
|
|
||||||
newNamedRange2.setRefersToFormula(sheetName + "!$F$1:$G$6");
|
|
||||||
|
|
||||||
wb.getNameAt(0);
|
|
||||||
|
|
||||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
||||||
HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest"));
|
|
||||||
assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName()));
|
|
||||||
assertTrue("Reference is "+nm.getRefersToFormula(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getRefersToFormula()));
|
|
||||||
|
|
||||||
nm = wb.getNameAt(wb.getNameIndex("AnotherTest"));
|
|
||||||
assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName()));
|
|
||||||
assertTrue("Reference is "+nm.getRefersToFormula(),newNamedRange2.getRefersToFormula().equals(nm.getRefersToFormula()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test case provided by czhang@cambian.com (Chun Zhang)
|
|
||||||
* <p>
|
|
||||||
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=13775" target="_bug">#13775</a>
|
|
||||||
*/
|
|
||||||
public void testMultiNamedRange() {
|
|
||||||
|
|
||||||
// Create a new workbook
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook ();
|
|
||||||
|
|
||||||
|
|
||||||
// Create a worksheet 'sheet1' in the new workbook
|
|
||||||
wb.createSheet ();
|
|
||||||
wb.setSheetName (0, "sheet1");
|
|
||||||
|
|
||||||
// Create another worksheet 'sheet2' in the new workbook
|
|
||||||
wb.createSheet ();
|
|
||||||
wb.setSheetName (1, "sheet2");
|
|
||||||
|
|
||||||
// Create a new named range for worksheet 'sheet1'
|
|
||||||
HSSFName namedRange1 = wb.createName();
|
|
||||||
|
|
||||||
// Set the name for the named range for worksheet 'sheet1'
|
|
||||||
namedRange1.setNameName("RangeTest1");
|
|
||||||
|
|
||||||
// Set the reference for the named range for worksheet 'sheet1'
|
|
||||||
namedRange1.setRefersToFormula("sheet1" + "!$A$1:$L$41");
|
|
||||||
|
|
||||||
// Create a new named range for worksheet 'sheet2'
|
|
||||||
HSSFName namedRange2 = wb.createName();
|
|
||||||
|
|
||||||
// Set the name for the named range for worksheet 'sheet2'
|
|
||||||
namedRange2.setNameName("RangeTest2");
|
|
||||||
|
|
||||||
// Set the reference for the named range for worksheet 'sheet2'
|
|
||||||
namedRange2.setRefersToFormula("sheet2" + "!$A$1:$O$21");
|
|
||||||
|
|
||||||
// Write the workbook to a file
|
|
||||||
// Read the Excel file and verify its content
|
|
||||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
||||||
HSSFName nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1"));
|
|
||||||
assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName()));
|
|
||||||
assertTrue("Reference is "+nm1.getRefersToFormula(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getRefersToFormula()));
|
|
||||||
|
|
||||||
HSSFName nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2"));
|
|
||||||
assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName()));
|
|
||||||
assertTrue("Reference is "+nm2.getRefersToFormula(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getRefersToFormula()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testUnicodeNamedRange() {
|
|
||||||
HSSFWorkbook workBook = new HSSFWorkbook();
|
|
||||||
workBook.createSheet("Test");
|
|
||||||
HSSFName name = workBook.createName();
|
|
||||||
name.setNameName("\u03B1");
|
|
||||||
name.setRefersToFormula("Test!$D$3:$E$8");
|
|
||||||
|
|
||||||
|
|
||||||
HSSFWorkbook workBook2 = HSSFTestDataSamples.writeOutAndReadBack(workBook);
|
|
||||||
HSSFName name2 = workBook2.getNameAt(0);
|
|
||||||
|
|
||||||
assertEquals("\u03B1", name2.getNameName());
|
|
||||||
assertEquals("Test!$D$3:$E$8", name2.getRefersToFormula());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test to see if the print areas can be retrieved/created in memory
|
|
||||||
*/
|
|
||||||
public void testSinglePrintArea() {
|
|
||||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
||||||
workbook.createSheet("Test Print Area");
|
|
||||||
String sheetName = workbook.getSheetName(0);
|
|
||||||
|
|
||||||
String reference = "$A$1:$B$1";
|
|
||||||
workbook.setPrintArea(0, reference);
|
|
||||||
|
|
||||||
String retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
|
|
||||||
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
|
||||||
assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For Convenience, don't force sheet names to be used
|
|
||||||
*/
|
|
||||||
public void testSinglePrintAreaWOSheet()
|
|
||||||
{
|
|
||||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
||||||
workbook.createSheet("Test Print Area");
|
|
||||||
String sheetName = workbook.getSheetName(0);
|
|
||||||
|
|
||||||
String reference = "$A$1:$B$1";
|
|
||||||
workbook.setPrintArea(0, reference);
|
|
||||||
|
|
||||||
String retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
|
|
||||||
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
|
||||||
assertEquals("'" + sheetName + "'!" + reference, retrievedPrintArea);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test to see if the print area can be retrieved from an excel created file
|
|
||||||
*/
|
|
||||||
public void testPrintAreaFileRead() {
|
|
||||||
HSSFWorkbook workbook = openSample("SimpleWithPrintArea.xls");
|
|
||||||
|
|
||||||
String sheetName = workbook.getSheetName(0);
|
|
||||||
String reference = sheetName+"!$A$1:$C$5";
|
|
||||||
|
|
||||||
assertEquals(reference, workbook.getPrintArea(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test to see if the print area made it to the file
|
|
||||||
*/
|
|
||||||
public void testPrintAreaFile() {
|
|
||||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
||||||
workbook.createSheet("Test Print Area");
|
|
||||||
String sheetName = workbook.getSheetName(0);
|
|
||||||
|
|
||||||
|
|
||||||
String reference = "$A$1:$B$1";
|
|
||||||
workbook.setPrintArea(0, reference);
|
|
||||||
|
|
||||||
workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
|
|
||||||
|
|
||||||
String retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
|
||||||
assertEquals("References Match", "'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test to see if multiple print areas made it to the file
|
|
||||||
*/
|
|
||||||
public void testMultiplePrintAreaFile() {
|
|
||||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
||||||
|
|
||||||
workbook.createSheet("Sheet1");
|
|
||||||
workbook.createSheet("Sheet2");
|
|
||||||
workbook.createSheet("Sheet3");
|
|
||||||
String reference1 = "$A$1:$B$1";
|
|
||||||
String reference2 = "$B$2:$D$5";
|
|
||||||
String reference3 = "$D$2:$F$5";
|
|
||||||
|
|
||||||
workbook.setPrintArea(0, reference1);
|
|
||||||
workbook.setPrintArea(1, reference2);
|
|
||||||
workbook.setPrintArea(2, reference3);
|
|
||||||
|
|
||||||
//Check created print areas
|
|
||||||
String retrievedPrintArea;
|
|
||||||
|
|
||||||
retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea);
|
|
||||||
assertEquals("Sheet1!" + reference1, retrievedPrintArea);
|
|
||||||
|
|
||||||
retrievedPrintArea = workbook.getPrintArea(1);
|
|
||||||
assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea);
|
|
||||||
assertEquals("Sheet2!" + reference2, retrievedPrintArea);
|
|
||||||
|
|
||||||
retrievedPrintArea = workbook.getPrintArea(2);
|
|
||||||
assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea);
|
|
||||||
assertEquals("Sheet3!" + reference3, retrievedPrintArea);
|
|
||||||
|
|
||||||
// Check print areas after re-reading workbook
|
|
||||||
workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
|
|
||||||
|
|
||||||
retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea);
|
|
||||||
assertEquals("Sheet1!" + reference1, retrievedPrintArea);
|
|
||||||
|
|
||||||
retrievedPrintArea = workbook.getPrintArea(1);
|
|
||||||
assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea);
|
|
||||||
assertEquals("Sheet2!" + reference2, retrievedPrintArea);
|
|
||||||
|
|
||||||
retrievedPrintArea = workbook.getPrintArea(2);
|
|
||||||
assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea);
|
|
||||||
assertEquals("Sheet3!" + reference3, retrievedPrintArea);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests the setting of print areas with coordinates (Row/Column designations)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void testPrintAreaCoords(){
|
|
||||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
||||||
workbook.createSheet("Test Print Area");
|
|
||||||
String sheetName = workbook.getSheetName(0);
|
|
||||||
|
|
||||||
workbook.setPrintArea(0, 0, 1, 0, 0);
|
|
||||||
|
|
||||||
String retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
|
|
||||||
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
|
||||||
assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests the parsing of union area expressions, and re-display in the presence of sheet names
|
|
||||||
* with special characters.
|
|
||||||
*/
|
|
||||||
public void testPrintAreaUnion(){
|
|
||||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
||||||
workbook.createSheet("Test Print Area");
|
|
||||||
|
|
||||||
String reference = "$A$1:$B$1,$D$1:$F$2";
|
|
||||||
workbook.setPrintArea(0, reference);
|
|
||||||
String retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
|
||||||
assertEquals("'Test Print Area'!$A$1:$B$1,'Test Print Area'!$D$1:$F$2", retrievedPrintArea);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verifies an existing print area is deleted
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void testPrintAreaRemove() {
|
|
||||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
||||||
workbook.createSheet("Test Print Area");
|
|
||||||
workbook.getSheetName(0);
|
|
||||||
|
|
||||||
workbook.setPrintArea(0, 0, 1, 0, 0);
|
|
||||||
|
|
||||||
String retrievedPrintArea = workbook.getPrintArea(0);
|
|
||||||
|
|
||||||
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
|
||||||
|
|
||||||
workbook.removePrintArea(0);
|
|
||||||
assertNull("PrintArea was not removed", workbook.getPrintArea(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verifies correct functioning for "single cell named range" (aka "named cell")
|
|
||||||
*/
|
|
||||||
public void testNamedCell_1() {
|
|
||||||
|
|
||||||
// setup for this testcase
|
|
||||||
String sheetName = "Test Named Cell";
|
|
||||||
String cellName = "A name for a named cell";
|
|
||||||
String cellValue = "TEST Value";
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet sheet = wb.createSheet(sheetName);
|
|
||||||
sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString(cellValue));
|
|
||||||
|
|
||||||
// create named range for a single cell using areareference
|
|
||||||
HSSFName namedCell = wb.createName();
|
|
||||||
namedCell.setNameName(cellName);
|
|
||||||
String reference = "'" + sheetName + "'" + "!A1:A1";
|
|
||||||
namedCell.setRefersToFormula(reference);
|
|
||||||
|
|
||||||
// retrieve the newly created named range
|
|
||||||
int namedCellIdx = wb.getNameIndex(cellName);
|
|
||||||
HSSFName aNamedCell = wb.getNameAt(namedCellIdx);
|
|
||||||
assertNotNull(aNamedCell);
|
|
||||||
|
|
||||||
// retrieve the cell at the named range and test its contents
|
|
||||||
AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula());
|
|
||||||
assertTrue("Should be exactly 1 cell in the named cell :'" +cellName+"'", aref.isSingleCell());
|
|
||||||
|
|
||||||
CellReference cref = aref.getFirstCell();
|
|
||||||
assertNotNull(cref);
|
|
||||||
HSSFSheet s = wb.getSheet(cref.getSheetName());
|
|
||||||
assertNotNull(s);
|
|
||||||
HSSFRow r = sheet.getRow(cref.getRow());
|
|
||||||
HSSFCell c = r.getCell(cref.getCol());
|
|
||||||
String contents = c.getRichStringCellValue().getString();
|
|
||||||
assertEquals("Contents of cell retrieved by its named reference", contents, cellValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verifies correct functioning for "single cell named range" (aka "named cell")
|
|
||||||
*/
|
|
||||||
public void testNamedCell_2() {
|
|
||||||
|
|
||||||
// setup for this testcase
|
|
||||||
String sname = "TestSheet", cname = "TestName", cvalue = "TestVal";
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet sheet = wb.createSheet(sname);
|
|
||||||
sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString(cvalue));
|
|
||||||
|
|
||||||
// create named range for a single cell using cellreference
|
|
||||||
HSSFName namedCell = wb.createName();
|
|
||||||
namedCell.setNameName(cname);
|
|
||||||
String reference = sname+"!A1";
|
|
||||||
namedCell.setRefersToFormula(reference);
|
|
||||||
|
|
||||||
// retrieve the newly created named range
|
|
||||||
int namedCellIdx = wb.getNameIndex(cname);
|
|
||||||
HSSFName aNamedCell = wb.getNameAt(namedCellIdx);
|
|
||||||
assertNotNull(aNamedCell);
|
|
||||||
|
|
||||||
// retrieve the cell at the named range and test its contents
|
|
||||||
CellReference cref = new CellReference(aNamedCell.getRefersToFormula());
|
|
||||||
assertNotNull(cref);
|
|
||||||
HSSFSheet s = wb.getSheet(cref.getSheetName());
|
|
||||||
HSSFRow r = sheet.getRow(cref.getRow());
|
|
||||||
HSSFCell c = r.getCell(cref.getCol());
|
|
||||||
String contents = c.getRichStringCellValue().getString();
|
|
||||||
assertEquals("Contents of cell retrieved by its named reference", contents, cvalue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDeletedReference() throws Exception {
|
|
||||||
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls");
|
|
||||||
assertEquals(2, wb.getNumberOfNames());
|
|
||||||
|
|
||||||
HSSFName name1 = wb.getNameAt(0);
|
|
||||||
assertEquals("a", name1.getNameName());
|
|
||||||
assertEquals("Sheet1!$A$1", name1.getRefersToFormula());
|
|
||||||
new AreaReference(name1.getRefersToFormula());
|
|
||||||
assertTrue("Successfully constructed first reference", true);
|
|
||||||
|
|
||||||
HSSFName name2 = wb.getNameAt(1);
|
|
||||||
assertEquals("b", name2.getNameName());
|
|
||||||
assertEquals("Sheet1!#REF!", name2.getRefersToFormula());
|
|
||||||
assertTrue(name2.isDeleted());
|
|
||||||
try {
|
|
||||||
new AreaReference(name2.getRefersToFormula());
|
|
||||||
fail("attempt to supply an invalid reference to AreaReference constructor results in exception");
|
|
||||||
} catch (StringIndexOutOfBoundsException e) { // TODO - use a different exception for this condition
|
|
||||||
// expected during successful test
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testRepeatingRowsAndColumsNames() {
|
|
||||||
// First test that setting RR&C for same sheet more than once only creates a
|
|
||||||
// single Print_Titles built-in record
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet sheet = wb.createSheet("FirstSheet");
|
|
||||||
|
|
||||||
// set repeating rows and columns twice for the first sheet
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3-1);
|
|
||||||
sheet.createFreezePane(0, 3);
|
|
||||||
}
|
|
||||||
assertEquals(1, wb.getNumberOfNames());
|
|
||||||
HSSFName nr1 = wb.getNameAt(0);
|
|
||||||
|
|
||||||
assertEquals("Print_Titles", nr1.getNameName());
|
|
||||||
if (false) {
|
|
||||||
// TODO - full column references not rendering properly, absolute markers not present either
|
|
||||||
assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula());
|
|
||||||
} else {
|
|
||||||
assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save and re-open
|
|
||||||
HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
||||||
|
|
||||||
assertEquals(1, nwb.getNumberOfNames());
|
|
||||||
nr1 = nwb.getNameAt(0);
|
|
||||||
|
|
||||||
assertEquals("Print_Titles", nr1.getNameName());
|
|
||||||
assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula());
|
|
||||||
|
|
||||||
// check that setting RR&C on a second sheet causes a new Print_Titles built-in
|
|
||||||
// name to be created
|
|
||||||
sheet = nwb.createSheet("SecondSheet");
|
|
||||||
nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0);
|
|
||||||
|
|
||||||
assertEquals(2, nwb.getNumberOfNames());
|
|
||||||
HSSFName nr2 = nwb.getNameAt(1);
|
|
||||||
|
|
||||||
assertEquals("Print_Titles", nr2.getNameName());
|
|
||||||
assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula());
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
// In case you fancy checking in excel, to ensure it
|
|
||||||
// won't complain about the file now
|
|
||||||
try {
|
|
||||||
File tempFile = File.createTempFile("POI-45126-", ".xls");
|
|
||||||
FileOutputStream fout = new FileOutputStream(tempFile);
|
|
||||||
nwb.write(fout);
|
|
||||||
fout.close();
|
|
||||||
System.out.println("check out " + tempFile.getAbsolutePath());
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* When setting A1 type of referencese HSSFName.setRefersToFormula
|
|
||||||
* must set the type of operands to Ptg.CLASS_REF,
|
|
||||||
* otherwise created named don't appear in the dropdown to the left opf formula bar in Excel
|
|
||||||
*/
|
|
||||||
public void testTypeOfRootPtg(){
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
wb.createSheet("CSCO");
|
|
||||||
|
|
||||||
Ptg[] ptgs = HSSFFormulaParser.parse("CSCO!$E$71", wb, FormulaType.NAMEDRANGE, 0);
|
|
||||||
for (int i = 0; i < ptgs.length; i++) {
|
|
||||||
assertEquals('R', ptgs[i].getRVAType());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testScope() {
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
HSSFSheet sh1 = wb.createSheet();
|
|
||||||
HSSFSheet sh2 = wb.createSheet();
|
|
||||||
|
|
||||||
HSSFName name;
|
|
||||||
|
|
||||||
name = wb.createName();
|
|
||||||
name.setNameName("aaa");
|
|
||||||
name = wb.createName();
|
|
||||||
try {
|
|
||||||
name.setNameName("aaa");
|
|
||||||
fail("Expected exception");
|
|
||||||
} catch(Exception e){
|
|
||||||
assertEquals("The workbook already contains this name: aaa", e.getMessage());
|
|
||||||
name.setNameName("aaa-2");
|
|
||||||
}
|
|
||||||
|
|
||||||
name = wb.createName();
|
|
||||||
name.setSheetIndex(0);
|
|
||||||
name.setNameName("aaa");
|
|
||||||
name = wb.createName();
|
|
||||||
name.setSheetIndex(0);
|
|
||||||
try {
|
|
||||||
name.setNameName("aaa");
|
|
||||||
fail("Expected exception");
|
|
||||||
} catch(Exception e){
|
|
||||||
assertEquals("The sheet already contains this name: aaa", e.getMessage());
|
|
||||||
name.setNameName("aaa-2");
|
|
||||||
}
|
|
||||||
|
|
||||||
name = wb.createName();
|
|
||||||
name.setSheetIndex(1);
|
|
||||||
name.setNameName("aaa");
|
|
||||||
name = wb.createName();
|
|
||||||
name.setSheetIndex(1);
|
|
||||||
try {
|
|
||||||
name.setNameName("aaa");
|
|
||||||
fail("Expected exception");
|
|
||||||
} catch(Exception e){
|
|
||||||
assertEquals("The sheet already contains this name: aaa", e.getMessage());
|
|
||||||
name.setNameName("aaa-2");
|
|
||||||
}
|
|
||||||
|
|
||||||
int cnt = 0;
|
|
||||||
for (int i = 0; i < wb.getNumberOfNames(); i++) {
|
|
||||||
if("aaa".equals(wb.getNameName(i))) cnt++;
|
|
||||||
}
|
|
||||||
assertEquals(3, cnt);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -16,98 +16,11 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.poi.hssf.usermodel;
|
package org.apache.poi.hssf.usermodel;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
|
|
||||||
import org.apache.poi.util.TempFile;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||||
|
|
||||||
public class TestUnicodeWorkbook extends TestCase {
|
public class TestUnicodeWorkbook extends TestCase {
|
||||||
|
|
||||||
public TestUnicodeWorkbook(String s) {
|
|
||||||
super(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Tests that all of the unicode capable string fields can be set, written and then read back
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void testUnicodeInAll() throws Exception {
|
|
||||||
HSSFWorkbook wb = new HSSFWorkbook();
|
|
||||||
//Create a unicode dataformat (contains euro symbol)
|
|
||||||
HSSFDataFormat df = wb.createDataFormat();
|
|
||||||
final String formatStr = "_([$\u20ac-2]\\\\\\ * #,##0.00_);_([$\u20ac-2]\\\\\\ * \\\\\\(#,##0.00\\\\\\);_([$\u20ac-2]\\\\\\ *\\\"\\-\\\\\"??_);_(@_)";
|
|
||||||
short fmt = df.getFormat(formatStr);
|
|
||||||
|
|
||||||
//Create a unicode sheet name (euro symbol)
|
|
||||||
HSSFSheet s = wb.createSheet("\u20ac");
|
|
||||||
|
|
||||||
//Set a unicode header (you guessed it the euro symbol)
|
|
||||||
HSSFHeader h = s.getHeader();
|
|
||||||
h.setCenter("\u20ac");
|
|
||||||
h.setLeft("\u20ac");
|
|
||||||
h.setRight("\u20ac");
|
|
||||||
|
|
||||||
//Set a unicode footer
|
|
||||||
HSSFFooter f = s.getFooter();
|
|
||||||
f.setCenter("\u20ac");
|
|
||||||
f.setLeft("\u20ac");
|
|
||||||
f.setRight("\u20ac");
|
|
||||||
|
|
||||||
HSSFRow r = s.createRow(0);
|
|
||||||
HSSFCell c = r.createCell(1);
|
|
||||||
c.setCellValue(12.34);
|
|
||||||
c.getCellStyle().setDataFormat(fmt);
|
|
||||||
|
|
||||||
HSSFCell c2 = r.createCell(2);
|
|
||||||
c.setCellValue(new HSSFRichTextString("\u20ac"));
|
|
||||||
|
|
||||||
HSSFCell c3 = r.createCell(3);
|
|
||||||
String formulaString = "TEXT(12.34,\"\u20ac###,##\")";
|
|
||||||
c3.setCellFormula(formulaString);
|
|
||||||
|
|
||||||
|
|
||||||
File tempFile = TempFile.createTempFile("unicode", "test.xls");
|
|
||||||
FileOutputStream stream = new FileOutputStream(tempFile);
|
|
||||||
wb.write(stream);
|
|
||||||
|
|
||||||
wb = null;
|
|
||||||
FileInputStream in = new FileInputStream(tempFile);
|
|
||||||
wb = new HSSFWorkbook(in);
|
|
||||||
|
|
||||||
//Test the sheetname
|
|
||||||
s = wb.getSheet("\u20ac");
|
|
||||||
assertNotNull(s);
|
|
||||||
|
|
||||||
//Test the header
|
|
||||||
h = s.getHeader();
|
|
||||||
assertEquals(h.getCenter(), "\u20ac");
|
|
||||||
assertEquals(h.getLeft(), "\u20ac");
|
|
||||||
assertEquals(h.getRight(), "\u20ac");
|
|
||||||
|
|
||||||
//Test the footer
|
|
||||||
f = s.getFooter();
|
|
||||||
assertEquals(f.getCenter(), "\u20ac");
|
|
||||||
assertEquals(f.getLeft(), "\u20ac");
|
|
||||||
assertEquals(f.getRight(), "\u20ac");
|
|
||||||
|
|
||||||
//Test the dataformat
|
|
||||||
r = s.getRow(0);
|
|
||||||
c = r.getCell(1);
|
|
||||||
df = wb.createDataFormat();
|
|
||||||
assertEquals(formatStr, df.getFormat(c.getCellStyle().getDataFormat()));
|
|
||||||
|
|
||||||
//Test the cell string value
|
|
||||||
c2 = r.getCell(2);
|
|
||||||
assertEquals(c.getRichStringCellValue().getString(), "\u20ac");
|
|
||||||
|
|
||||||
//Test the cell formula
|
|
||||||
c3 = r.getCell(3);
|
|
||||||
assertEquals(c3.getCellFormula(), formulaString);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Tests Bug38230
|
/** Tests Bug38230
|
||||||
* That a Umlat is written and then read back.
|
* That a Umlat is written and then read back.
|
||||||
* It should have been written as a compressed unicode.
|
* It should have been written as a compressed unicode.
|
||||||
|
@ -128,13 +41,7 @@ public class TestUnicodeWorkbook extends TestCase {
|
||||||
//Confirm that the sring will be compressed
|
//Confirm that the sring will be compressed
|
||||||
assertEquals(c.getRichStringCellValue().getUnicodeString().getOptionFlags(), 0);
|
assertEquals(c.getRichStringCellValue().getUnicodeString().getOptionFlags(), 0);
|
||||||
|
|
||||||
File tempFile = TempFile.createTempFile("umlat", "test.xls");
|
wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
||||||
FileOutputStream stream = new FileOutputStream(tempFile);
|
|
||||||
wb.write(stream);
|
|
||||||
|
|
||||||
wb = null;
|
|
||||||
FileInputStream in = new FileInputStream(tempFile);
|
|
||||||
wb = new HSSFWorkbook(in);
|
|
||||||
|
|
||||||
//Test the sheetname
|
//Test the sheetname
|
||||||
s = wb.getSheet("test");
|
s = wb.getSheet("test");
|
||||||
|
|
|
@ -44,4 +44,10 @@ public interface ITestDataProvider {
|
||||||
*/
|
*/
|
||||||
Workbook createWorkbook();
|
Workbook createWorkbook();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a sample file from the standard HSSF test data directory
|
||||||
|
*
|
||||||
|
* @return an open <tt>InputStream</tt> for the specified sample file
|
||||||
|
*/
|
||||||
|
byte[] getTestDataFileContent(String fileName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,298 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.ss.usermodel;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
import junit.framework.AssertionFailedError;
|
||||||
|
import org.apache.poi.ss.ITestDataProvider;
|
||||||
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A base class for bugzilla issues that can be described in terms of common ss interfaces.
|
||||||
|
*
|
||||||
|
* @author Yegor Kozlov
|
||||||
|
*/
|
||||||
|
public abstract class BaseTestBugzillaIssues extends TestCase {
|
||||||
|
|
||||||
|
protected abstract ITestDataProvider getTestDataProvider();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Test writing a hyperlink
|
||||||
|
* Open resulting sheet in Excel and check that A1 contains a hyperlink
|
||||||
|
*
|
||||||
|
* Also tests bug 15353 (problems with hyperlinks to Google)
|
||||||
|
*/
|
||||||
|
public void test23094() {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet s = wb.createSheet();
|
||||||
|
Row r = s.createRow(0);
|
||||||
|
r.createCell(0).setCellFormula("HYPERLINK(\"http://jakarta.apache.org\",\"Jakarta\")");
|
||||||
|
r.createCell(1).setCellFormula("HYPERLINK(\"http://google.com\",\"Google\")");
|
||||||
|
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
r = wb.getSheetAt(0).getRow(0);
|
||||||
|
|
||||||
|
Cell cell_0 = r.getCell(0);
|
||||||
|
assertEquals("HYPERLINK(\"http://jakarta.apache.org\",\"Jakarta\")", cell_0.getCellFormula());
|
||||||
|
Cell cell_1 = r.getCell(1);
|
||||||
|
assertEquals("HYPERLINK(\"http://google.com\",\"Google\")", cell_1.getCellFormula());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test writing a file with large number of unique strings,
|
||||||
|
* open resulting file in Excel to check results!
|
||||||
|
* @param num the number of strings to generate
|
||||||
|
*/
|
||||||
|
public void baseTest15375(int num) {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sheet = wb.createSheet();
|
||||||
|
CreationHelper factory = wb.getCreationHelper();
|
||||||
|
|
||||||
|
String tmp1 = null;
|
||||||
|
String tmp2 = null;
|
||||||
|
String tmp3 = null;
|
||||||
|
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
tmp1 = "Test1" + i;
|
||||||
|
tmp2 = "Test2" + i;
|
||||||
|
tmp3 = "Test3" + i;
|
||||||
|
|
||||||
|
Row row = sheet.createRow(i);
|
||||||
|
|
||||||
|
Cell cell = row.createCell(0);
|
||||||
|
cell.setCellValue(factory.createRichTextString(tmp1));
|
||||||
|
cell = row.createCell(1);
|
||||||
|
cell.setCellValue(factory.createRichTextString(tmp2));
|
||||||
|
cell = row.createCell(2);
|
||||||
|
cell.setCellValue(factory.createRichTextString(tmp3));
|
||||||
|
}
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
tmp1 = "Test1" + i;
|
||||||
|
tmp2 = "Test2" + i;
|
||||||
|
tmp3 = "Test3" + i;
|
||||||
|
|
||||||
|
Row row = sheet.getRow(i);
|
||||||
|
|
||||||
|
assertEquals(tmp1, row.getCell(0).getStringCellValue());
|
||||||
|
assertEquals(tmp2, row.getCell(1).getStringCellValue());
|
||||||
|
assertEquals(tmp3, row.getCell(2).getStringCellValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merged regions were being removed from the parent in cloned sheets
|
||||||
|
*/
|
||||||
|
public void test22720() {
|
||||||
|
Workbook workBook = getTestDataProvider().createWorkbook();
|
||||||
|
workBook.createSheet("TEST");
|
||||||
|
Sheet template = workBook.getSheetAt(0);
|
||||||
|
|
||||||
|
template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));
|
||||||
|
template.addMergedRegion(new CellRangeAddress(1, 2, 0, 2));
|
||||||
|
|
||||||
|
Sheet clone = workBook.cloneSheet(0);
|
||||||
|
int originalMerged = template.getNumMergedRegions();
|
||||||
|
assertEquals("2 merged regions", 2, originalMerged);
|
||||||
|
|
||||||
|
//remove merged regions from clone
|
||||||
|
for (int i=template.getNumMergedRegions()-1; i>=0; i--) {
|
||||||
|
clone.removeMergedRegion(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions());
|
||||||
|
//check if template's merged regions are OK
|
||||||
|
if (template.getNumMergedRegions()>0) {
|
||||||
|
// fetch the first merged region...EXCEPTION OCCURS HERE
|
||||||
|
template.getMergedRegion(0);
|
||||||
|
}
|
||||||
|
//make sure we dont exception
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test28031() {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sheet = wb.createSheet();
|
||||||
|
wb.setSheetName(0, "Sheet1");
|
||||||
|
|
||||||
|
Row row = sheet.createRow(0);
|
||||||
|
Cell cell = row.createCell(0);
|
||||||
|
String formulaText =
|
||||||
|
"IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))";
|
||||||
|
cell.setCellFormula(formulaText);
|
||||||
|
|
||||||
|
assertEquals(formulaText, cell.getCellFormula());
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
cell = wb.getSheetAt(0).getRow(0).getCell(0);
|
||||||
|
assertEquals("IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))", cell.getCellFormula());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bug 21334: "File error: data may have been lost" with a file
|
||||||
|
* that contains macros and this formula:
|
||||||
|
* {=SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""))>0,1))}
|
||||||
|
*/
|
||||||
|
public void test21334() {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sh = wb.createSheet();
|
||||||
|
Cell cell = sh.createRow(0).createCell(0);
|
||||||
|
String formula = "SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"))>0,1))";
|
||||||
|
cell.setCellFormula(formula);
|
||||||
|
|
||||||
|
Workbook wb_sv = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
Cell cell_sv = wb_sv.getSheetAt(0).getRow(0).getCell(0);
|
||||||
|
assertEquals(formula, cell_sv.getCellFormula());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** another test for the number of unique strings issue
|
||||||
|
*test opening the resulting file in Excel*/
|
||||||
|
public void test22568() {
|
||||||
|
int r=2000;int c=3;
|
||||||
|
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sheet = wb.createSheet("ExcelTest") ;
|
||||||
|
|
||||||
|
int col_cnt=0, rw_cnt=0 ;
|
||||||
|
|
||||||
|
col_cnt = c;
|
||||||
|
rw_cnt = r;
|
||||||
|
|
||||||
|
Row rw ;
|
||||||
|
rw = sheet.createRow(0) ;
|
||||||
|
//Header row
|
||||||
|
for(int j=0; j<col_cnt; j++){
|
||||||
|
Cell cell = rw.createCell(j) ;
|
||||||
|
cell.setCellValue("Col " + (j+1));
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=1; i<rw_cnt; i++){
|
||||||
|
rw = sheet.createRow(i) ;
|
||||||
|
for(int j=0; j<col_cnt; j++){
|
||||||
|
Cell cell = rw.createCell(j) ;
|
||||||
|
cell.setCellValue("Row:" + (i+1) + ",Column:" + (j+1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sheet.setDefaultColumnWidth(18) ;
|
||||||
|
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
sheet = wb.getSheetAt(0);
|
||||||
|
rw = sheet.getRow(0);
|
||||||
|
//Header row
|
||||||
|
for(int j=0; j<col_cnt; j++){
|
||||||
|
Cell cell = rw.getCell(j) ;
|
||||||
|
assertEquals("Col " + (j+1), cell.getStringCellValue());
|
||||||
|
}
|
||||||
|
for(int i=1; i<rw_cnt; i++){
|
||||||
|
rw = sheet.getRow(i) ;
|
||||||
|
for(int j=0; j<col_cnt; j++){
|
||||||
|
Cell cell = rw.getCell(j) ;
|
||||||
|
assertEquals("Row:" + (i+1) + ",Column:" + (j+1), cell.getStringCellValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bug 42448: Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69
|
||||||
|
*/
|
||||||
|
public void test42448(){
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Cell cell = wb.createSheet().createRow(0).createCell(0);
|
||||||
|
cell.setCellFormula("SUMPRODUCT(A!C7:A!C67, B8:B68) / B69");
|
||||||
|
assertTrue("no errors parsing formula", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HSSFRichTextString.length() returns negative for really
|
||||||
|
* long strings
|
||||||
|
*/
|
||||||
|
public void test46368() {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet s = wb.createSheet();
|
||||||
|
Row r = s.createRow(0);
|
||||||
|
for(int i=0; i<15; i++) {
|
||||||
|
int len = 32760 + i;
|
||||||
|
Cell c = r.createCell(i);
|
||||||
|
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
for(int j=0; j<len; j++) {
|
||||||
|
sb.append("x");
|
||||||
|
}
|
||||||
|
RichTextString rtr = wb.getCreationHelper().createRichTextString(sb.toString());
|
||||||
|
assertEquals(len, rtr.length());
|
||||||
|
c.setCellValue(rtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save and reload
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
s = wb.getSheetAt(0);
|
||||||
|
r = s.getRow(0);
|
||||||
|
for(int i=0; i<15; i++) {
|
||||||
|
int len = 32760 + i;
|
||||||
|
Cell c = r.getCell(i);
|
||||||
|
assertEquals(len, c.getRichStringCellValue().length());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test18800() {
|
||||||
|
Workbook book = getTestDataProvider().createWorkbook();
|
||||||
|
book.createSheet("TEST");
|
||||||
|
Sheet sheet = book.cloneSheet(0);
|
||||||
|
book.setSheetName(1,"CLONE");
|
||||||
|
sheet.createRow(0).createCell(0).setCellValue("Test");
|
||||||
|
|
||||||
|
book = getTestDataProvider().writeOutAndReadBack(book);
|
||||||
|
sheet = book.getSheet("CLONE");
|
||||||
|
Row row = sheet.getRow(0);
|
||||||
|
Cell cell = row.getCell(0);
|
||||||
|
assertEquals("Test", cell.getRichStringCellValue().getString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addNewSheetWithCellsA1toD4(Workbook book, int sheet) {
|
||||||
|
|
||||||
|
Sheet sht = book .createSheet("s" + sheet);
|
||||||
|
for (int r=0; r < 4; r++) {
|
||||||
|
|
||||||
|
Row row = sht.createRow (r);
|
||||||
|
for (int c=0; c < 4; c++) {
|
||||||
|
|
||||||
|
Cell cel = row.createCell(c);
|
||||||
|
cel.setCellValue(sheet*100 + r*10 + c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testBug43093() {
|
||||||
|
Workbook xlw = getTestDataProvider().createWorkbook();
|
||||||
|
|
||||||
|
addNewSheetWithCellsA1toD4(xlw, 1);
|
||||||
|
addNewSheetWithCellsA1toD4(xlw, 2);
|
||||||
|
addNewSheetWithCellsA1toD4(xlw, 3);
|
||||||
|
addNewSheetWithCellsA1toD4(xlw, 4);
|
||||||
|
|
||||||
|
Sheet s2 = xlw.getSheet("s2");
|
||||||
|
Row s2r3 = s2.getRow(3);
|
||||||
|
Cell s2E4 = s2r3.createCell(4);
|
||||||
|
s2E4.setCellFormula("SUM(s3!B2:C3)");
|
||||||
|
|
||||||
|
FormulaEvaluator eva = xlw.getCreationHelper().createFormulaEvaluator();
|
||||||
|
double d = eva.evaluate(s2E4).getNumberValue();
|
||||||
|
|
||||||
|
assertEquals(d, (311+312+321+322), 0.0000001);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,204 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.ss.usermodel;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
import junit.framework.AssertionFailedError;
|
||||||
|
import org.apache.poi.ss.ITestDataProvider;
|
||||||
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Yegor Kozlov
|
||||||
|
*/
|
||||||
|
public abstract class BaseTestFont extends TestCase {
|
||||||
|
|
||||||
|
protected abstract ITestDataProvider getTestDataProvider();
|
||||||
|
|
||||||
|
public void baseTestDefaultFont(String defaultName, short defaultSize, short defaultColor){
|
||||||
|
//get default font and check against default value
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
Font fontFind=workbook.findFont(Font.BOLDWEIGHT_NORMAL, defaultColor, defaultSize, defaultName, 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);
|
||||||
|
assertEquals(Font.BOLDWEIGHT_BOLD, font.getBoldweight());
|
||||||
|
font.setUnderline(Font.U_DOUBLE);
|
||||||
|
assertEquals(Font.U_DOUBLE, font.getUnderline());
|
||||||
|
font.setFontHeightInPoints((short)15);
|
||||||
|
assertEquals(15*20, font.getFontHeight());
|
||||||
|
assertEquals(15, font.getFontHeightInPoints());
|
||||||
|
fontFind=workbook.findFont(Font.BOLDWEIGHT_BOLD, defaultColor, (short)(15*20), defaultName, false, false, Font.SS_NONE, Font.U_DOUBLE);
|
||||||
|
assertNotNull(fontFind);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetNumberOfFonts(){
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
int num0 = wb.getNumberOfFonts();
|
||||||
|
|
||||||
|
Font f1=wb.createFont();
|
||||||
|
f1.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
|
short idx1 = f1.getIndex();
|
||||||
|
wb.createCellStyle().setFont(f1);
|
||||||
|
|
||||||
|
Font f2=wb.createFont();
|
||||||
|
f2.setUnderline(Font.U_DOUBLE);
|
||||||
|
short idx2 = f2.getIndex();
|
||||||
|
wb.createCellStyle().setFont(f2);
|
||||||
|
|
||||||
|
Font f3=wb.createFont();
|
||||||
|
f3.setFontHeightInPoints((short)23);
|
||||||
|
short idx3 = f3.getIndex();
|
||||||
|
wb.createCellStyle().setFont(f3);
|
||||||
|
|
||||||
|
assertEquals(num0 + 3,wb.getNumberOfFonts());
|
||||||
|
assertEquals(Font.BOLDWEIGHT_BOLD,wb.getFontAt(idx1).getBoldweight());
|
||||||
|
assertEquals(Font.U_DOUBLE,wb.getFontAt(idx2).getUnderline());
|
||||||
|
assertEquals(23,wb.getFontAt(idx3).getFontHeightInPoints());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that we can define fonts to a new
|
||||||
|
* file, save, load, and still see them
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void testCreateSave() {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet s1 = wb.createSheet();
|
||||||
|
Row r1 = s1.createRow(0);
|
||||||
|
Cell r1c1 = r1.createCell(0);
|
||||||
|
r1c1.setCellValue(2.2);
|
||||||
|
|
||||||
|
int num0 = wb.getNumberOfFonts();
|
||||||
|
|
||||||
|
Font font=wb.createFont();
|
||||||
|
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
|
font.setStrikeout(true);
|
||||||
|
font.setColor(IndexedColors.YELLOW.getIndex());
|
||||||
|
font.setFontName("Courier");
|
||||||
|
short font1Idx = font.getIndex();
|
||||||
|
wb.createCellStyle().setFont(font);
|
||||||
|
assertEquals(num0 + 1, wb.getNumberOfFonts());
|
||||||
|
|
||||||
|
CellStyle cellStyleTitle=wb.createCellStyle();
|
||||||
|
cellStyleTitle.setFont(font);
|
||||||
|
r1c1.setCellStyle(cellStyleTitle);
|
||||||
|
|
||||||
|
// Save and re-load
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
s1 = wb.getSheetAt(0);
|
||||||
|
|
||||||
|
assertEquals(num0 + 1, wb.getNumberOfFonts());
|
||||||
|
short idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex();
|
||||||
|
Font fnt = wb.getFontAt(idx);
|
||||||
|
assertNotNull(fnt);
|
||||||
|
assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor());
|
||||||
|
assertEquals("Courier", fnt.getFontName());
|
||||||
|
|
||||||
|
// Now add an orphaned one
|
||||||
|
Font font2 = wb.createFont();
|
||||||
|
font2.setItalic(true);
|
||||||
|
font2.setFontHeightInPoints((short)15);
|
||||||
|
short font2Idx = font2.getIndex();
|
||||||
|
wb.createCellStyle().setFont(font2);
|
||||||
|
assertEquals(num0 + 2, wb.getNumberOfFonts());
|
||||||
|
|
||||||
|
// Save and re-load
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
s1 = wb.getSheetAt(0);
|
||||||
|
|
||||||
|
assertEquals(num0 + 2, wb.getNumberOfFonts());
|
||||||
|
assertNotNull(wb.getFontAt(font1Idx));
|
||||||
|
assertNotNull(wb.getFontAt(font2Idx));
|
||||||
|
|
||||||
|
assertEquals(15, wb.getFontAt(font2Idx).getFontHeightInPoints());
|
||||||
|
assertEquals(true, wb.getFontAt(font2Idx).getItalic());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that fonts get added properly
|
||||||
|
*
|
||||||
|
* @see org.apache.poi.hssf.usermodel.TestBugs#test45338()
|
||||||
|
*/
|
||||||
|
public void test45338() {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
int num0 = wb.getNumberOfFonts();
|
||||||
|
|
||||||
|
Sheet s = wb.createSheet();
|
||||||
|
s.createRow(0);
|
||||||
|
s.createRow(1);
|
||||||
|
s.getRow(0).createCell(0);
|
||||||
|
s.getRow(1).createCell(0);
|
||||||
|
|
||||||
|
//default font
|
||||||
|
Font f1 = wb.getFontAt((short)0);
|
||||||
|
assertEquals(Font.BOLDWEIGHT_NORMAL, f1.getBoldweight());
|
||||||
|
|
||||||
|
// Check that asking for the same font
|
||||||
|
// multiple times gives you the same thing.
|
||||||
|
// Otherwise, our tests wouldn't work!
|
||||||
|
assertSame(wb.getFontAt((short)0), wb.getFontAt((short)0));
|
||||||
|
|
||||||
|
// Look for a new font we have
|
||||||
|
// yet to add
|
||||||
|
assertNull(
|
||||||
|
wb.findFont(
|
||||||
|
Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20),
|
||||||
|
"Thingy", false, true, (short)2, (byte)2
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
Font nf = wb.createFont();
|
||||||
|
short nfIdx = nf.getIndex();
|
||||||
|
assertEquals(num0 + 1, wb.getNumberOfFonts());
|
||||||
|
|
||||||
|
assertSame(nf, wb.getFontAt(nfIdx));
|
||||||
|
|
||||||
|
nf.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
|
nf.setColor((short)123);
|
||||||
|
nf.setFontHeightInPoints((short)22);
|
||||||
|
nf.setFontName("Thingy");
|
||||||
|
nf.setItalic(false);
|
||||||
|
nf.setStrikeout(true);
|
||||||
|
nf.setTypeOffset((short)2);
|
||||||
|
nf.setUnderline((byte)2);
|
||||||
|
|
||||||
|
assertEquals(num0 + 1, wb.getNumberOfFonts());
|
||||||
|
assertEquals(nf, wb.getFontAt(nfIdx));
|
||||||
|
|
||||||
|
assertEquals(wb.getFontAt(nfIdx), wb.getFontAt(nfIdx));
|
||||||
|
assertTrue(wb.getFontAt((short)0) != wb.getFontAt(nfIdx));
|
||||||
|
|
||||||
|
// Find it now
|
||||||
|
assertNotNull(
|
||||||
|
wb.findFont(
|
||||||
|
Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20),
|
||||||
|
"Thingy", false, true, (short)2, (byte)2
|
||||||
|
)
|
||||||
|
);
|
||||||
|
assertSame(nf,
|
||||||
|
wb.findFont(
|
||||||
|
Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20),
|
||||||
|
"Thingy", false, true, (short)2, (byte)2
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -19,10 +19,16 @@ package org.apache.poi.ss.usermodel;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import org.apache.poi.ss.ITestDataProvider;
|
import org.apache.poi.ss.ITestDataProvider;
|
||||||
|
import org.apache.poi.ss.formula.FormulaParser;
|
||||||
|
import org.apache.poi.ss.formula.FormulaType;
|
||||||
|
import org.apache.poi.ss.util.CellReference;
|
||||||
|
import org.apache.poi.ss.util.AreaReference;
|
||||||
|
import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests of implementation of {@link org.apache.poi.ss.usermodel.Name}
|
* Tests of implementations of {@link org.apache.poi.ss.usermodel.Name}.
|
||||||
*
|
*
|
||||||
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public abstract class BaseTestNamedRange extends TestCase {
|
public abstract class BaseTestNamedRange extends TestCase {
|
||||||
|
|
||||||
|
@ -84,6 +90,18 @@ public abstract class BaseTestNamedRange extends TestCase {
|
||||||
//-1 means the name applies to the entire workbook
|
//-1 means the name applies to the entire workbook
|
||||||
name1.setSheetIndex(-1);
|
name1.setSheetIndex(-1);
|
||||||
assertEquals(-1, name1.getSheetIndex());
|
assertEquals(-1, name1.getSheetIndex());
|
||||||
|
|
||||||
|
//names cannot be blank and must begin with a letter or underscore and not contain spaces
|
||||||
|
String[] invalidNames = {"", "123", "1Name", "Named Range"};
|
||||||
|
for (String name : invalidNames) {
|
||||||
|
try {
|
||||||
|
name1.setNameName(name);
|
||||||
|
fail("should have thrown exceptiuon due to invalid name: " + name);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// expected during successful test
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testUnicodeNamedRange() {
|
public void testUnicodeNamedRange() {
|
||||||
|
@ -170,4 +188,314 @@ public abstract class BaseTestNamedRange extends TestCase {
|
||||||
}
|
}
|
||||||
assertEquals(3, cnt);
|
assertEquals(3, cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test case provided by czhang@cambian.com (Chun Zhang)
|
||||||
|
* <p>
|
||||||
|
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=13775" target="_bug">#13775</a>
|
||||||
|
*/
|
||||||
|
public void testMultiNamedRange() {
|
||||||
|
|
||||||
|
// Create a new workbook
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
|
||||||
|
// Create a worksheet 'sheet1' in the new workbook
|
||||||
|
wb.createSheet ();
|
||||||
|
wb.setSheetName (0, "sheet1");
|
||||||
|
|
||||||
|
// Create another worksheet 'sheet2' in the new workbook
|
||||||
|
wb.createSheet ();
|
||||||
|
wb.setSheetName (1, "sheet2");
|
||||||
|
|
||||||
|
// Create a new named range for worksheet 'sheet1'
|
||||||
|
Name namedRange1 = wb.createName();
|
||||||
|
|
||||||
|
// Set the name for the named range for worksheet 'sheet1'
|
||||||
|
namedRange1.setNameName("RangeTest1");
|
||||||
|
|
||||||
|
// Set the reference for the named range for worksheet 'sheet1'
|
||||||
|
namedRange1.setRefersToFormula("sheet1" + "!$A$1:$L$41");
|
||||||
|
|
||||||
|
// Create a new named range for worksheet 'sheet2'
|
||||||
|
Name namedRange2 = wb.createName();
|
||||||
|
|
||||||
|
// Set the name for the named range for worksheet 'sheet2'
|
||||||
|
namedRange2.setNameName("RangeTest2");
|
||||||
|
|
||||||
|
// Set the reference for the named range for worksheet 'sheet2'
|
||||||
|
namedRange2.setRefersToFormula("sheet2" + "!$A$1:$O$21");
|
||||||
|
|
||||||
|
// Write the workbook to a file
|
||||||
|
// Read the Excel file and verify its content
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
Name nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1"));
|
||||||
|
assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName()));
|
||||||
|
assertTrue("Reference is "+nm1.getRefersToFormula(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getRefersToFormula()));
|
||||||
|
|
||||||
|
Name nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2"));
|
||||||
|
assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName()));
|
||||||
|
assertTrue("Reference is "+nm2.getRefersToFormula(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getRefersToFormula()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test to see if the print areas can be retrieved/created in memory
|
||||||
|
*/
|
||||||
|
public void testSinglePrintArea() {
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
workbook.createSheet("Test Print Area");
|
||||||
|
String sheetName = workbook.getSheetName(0);
|
||||||
|
|
||||||
|
String reference = "$A$1:$B$1";
|
||||||
|
workbook.setPrintArea(0, reference);
|
||||||
|
|
||||||
|
String retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
|
||||||
|
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
||||||
|
assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For Convenience, don't force sheet names to be used
|
||||||
|
*/
|
||||||
|
public void testSinglePrintAreaWOSheet()
|
||||||
|
{
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
workbook.createSheet("Test Print Area");
|
||||||
|
String sheetName = workbook.getSheetName(0);
|
||||||
|
|
||||||
|
String reference = "$A$1:$B$1";
|
||||||
|
workbook.setPrintArea(0, reference);
|
||||||
|
|
||||||
|
String retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
|
||||||
|
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
||||||
|
assertEquals("'" + sheetName + "'!" + reference, retrievedPrintArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test to see if the print area made it to the file
|
||||||
|
*/
|
||||||
|
public void testPrintAreaFile() {
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
workbook.createSheet("Test Print Area");
|
||||||
|
String sheetName = workbook.getSheetName(0);
|
||||||
|
|
||||||
|
|
||||||
|
String reference = "$A$1:$B$1";
|
||||||
|
workbook.setPrintArea(0, reference);
|
||||||
|
|
||||||
|
workbook = getTestDataProvider().writeOutAndReadBack(workbook);
|
||||||
|
|
||||||
|
String retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
||||||
|
assertEquals("References Match", "'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test to see if multiple print areas made it to the file
|
||||||
|
*/
|
||||||
|
public void testMultiplePrintAreaFile() {
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
|
||||||
|
workbook.createSheet("Sheet1");
|
||||||
|
workbook.createSheet("Sheet2");
|
||||||
|
workbook.createSheet("Sheet3");
|
||||||
|
String reference1 = "$A$1:$B$1";
|
||||||
|
String reference2 = "$B$2:$D$5";
|
||||||
|
String reference3 = "$D$2:$F$5";
|
||||||
|
|
||||||
|
workbook.setPrintArea(0, reference1);
|
||||||
|
workbook.setPrintArea(1, reference2);
|
||||||
|
workbook.setPrintArea(2, reference3);
|
||||||
|
|
||||||
|
//Check created print areas
|
||||||
|
String retrievedPrintArea;
|
||||||
|
|
||||||
|
retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea);
|
||||||
|
assertEquals("Sheet1!" + reference1, retrievedPrintArea);
|
||||||
|
|
||||||
|
retrievedPrintArea = workbook.getPrintArea(1);
|
||||||
|
assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea);
|
||||||
|
assertEquals("Sheet2!" + reference2, retrievedPrintArea);
|
||||||
|
|
||||||
|
retrievedPrintArea = workbook.getPrintArea(2);
|
||||||
|
assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea);
|
||||||
|
assertEquals("Sheet3!" + reference3, retrievedPrintArea);
|
||||||
|
|
||||||
|
// Check print areas after re-reading workbook
|
||||||
|
workbook = getTestDataProvider().writeOutAndReadBack(workbook);
|
||||||
|
|
||||||
|
retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea);
|
||||||
|
assertEquals("Sheet1!" + reference1, retrievedPrintArea);
|
||||||
|
|
||||||
|
retrievedPrintArea = workbook.getPrintArea(1);
|
||||||
|
assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea);
|
||||||
|
assertEquals("Sheet2!" + reference2, retrievedPrintArea);
|
||||||
|
|
||||||
|
retrievedPrintArea = workbook.getPrintArea(2);
|
||||||
|
assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea);
|
||||||
|
assertEquals("Sheet3!" + reference3, retrievedPrintArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the setting of print areas with coordinates (Row/Column designations)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testPrintAreaCoords(){
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
workbook.createSheet("Test Print Area");
|
||||||
|
String sheetName = workbook.getSheetName(0);
|
||||||
|
|
||||||
|
workbook.setPrintArea(0, 0, 1, 0, 0);
|
||||||
|
|
||||||
|
String retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
|
||||||
|
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
||||||
|
assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the parsing of union area expressions, and re-display in the presence of sheet names
|
||||||
|
* with special characters.
|
||||||
|
*/
|
||||||
|
public void testPrintAreaUnion(){
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
workbook.createSheet("Test Print Area");
|
||||||
|
|
||||||
|
String reference = "$A$1:$B$1,$D$1:$F$2";
|
||||||
|
workbook.setPrintArea(0, reference);
|
||||||
|
String retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
||||||
|
assertEquals("'Test Print Area'!$A$1:$B$1,'Test Print Area'!$D$1:$F$2", retrievedPrintArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies an existing print area is deleted
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testPrintAreaRemove() {
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
workbook.createSheet("Test Print Area");
|
||||||
|
workbook.getSheetName(0);
|
||||||
|
|
||||||
|
workbook.setPrintArea(0, 0, 1, 0, 0);
|
||||||
|
|
||||||
|
String retrievedPrintArea = workbook.getPrintArea(0);
|
||||||
|
|
||||||
|
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
|
||||||
|
|
||||||
|
workbook.removePrintArea(0);
|
||||||
|
assertNull("PrintArea was not removed", workbook.getPrintArea(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that multiple named ranges can be added written and read
|
||||||
|
*/
|
||||||
|
public void testMultipleNamedWrite() {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
|
||||||
|
|
||||||
|
wb.createSheet("testSheet1");
|
||||||
|
String sheetName = wb.getSheetName(0);
|
||||||
|
|
||||||
|
assertEquals("testSheet1", sheetName);
|
||||||
|
|
||||||
|
//Creating new Named Range
|
||||||
|
Name newNamedRange = wb.createName();
|
||||||
|
|
||||||
|
newNamedRange.setNameName("RangeTest");
|
||||||
|
newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8");
|
||||||
|
|
||||||
|
//Creating another new Named Range
|
||||||
|
Name newNamedRange2 = wb.createName();
|
||||||
|
|
||||||
|
newNamedRange2.setNameName("AnotherTest");
|
||||||
|
newNamedRange2.setRefersToFormula(sheetName + "!$F$1:$G$6");
|
||||||
|
|
||||||
|
wb.getNameAt(0);
|
||||||
|
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
Name nm =wb.getNameAt(wb.getNameIndex("RangeTest"));
|
||||||
|
assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName()));
|
||||||
|
assertTrue("Reference is "+nm.getRefersToFormula(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getRefersToFormula()));
|
||||||
|
|
||||||
|
nm = wb.getNameAt(wb.getNameIndex("AnotherTest"));
|
||||||
|
assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName()));
|
||||||
|
assertTrue("Reference is "+nm.getRefersToFormula(),newNamedRange2.getRefersToFormula().equals(nm.getRefersToFormula()));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Verifies correct functioning for "single cell named range" (aka "named cell")
|
||||||
|
*/
|
||||||
|
public void testNamedCell_1() {
|
||||||
|
|
||||||
|
// setup for this testcase
|
||||||
|
String sheetName = "Test Named Cell";
|
||||||
|
String cellName = "named_cell";
|
||||||
|
String cellValue = "TEST Value";
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sheet = wb.createSheet(sheetName);
|
||||||
|
CreationHelper factory = wb.getCreationHelper();
|
||||||
|
sheet.createRow(0).createCell(0).setCellValue(factory.createRichTextString(cellValue));
|
||||||
|
|
||||||
|
// create named range for a single cell using areareference
|
||||||
|
Name namedCell = wb.createName();
|
||||||
|
namedCell.setNameName(cellName);
|
||||||
|
String reference = "'" + sheetName + "'" + "!A1:A1";
|
||||||
|
namedCell.setRefersToFormula(reference);
|
||||||
|
|
||||||
|
// retrieve the newly created named range
|
||||||
|
int namedCellIdx = wb.getNameIndex(cellName);
|
||||||
|
Name aNamedCell = wb.getNameAt(namedCellIdx);
|
||||||
|
assertNotNull(aNamedCell);
|
||||||
|
|
||||||
|
// retrieve the cell at the named range and test its contents
|
||||||
|
AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula());
|
||||||
|
assertTrue("Should be exactly 1 cell in the named cell :'" +cellName+"'", aref.isSingleCell());
|
||||||
|
|
||||||
|
CellReference cref = aref.getFirstCell();
|
||||||
|
assertNotNull(cref);
|
||||||
|
Sheet s = wb.getSheet(cref.getSheetName());
|
||||||
|
assertNotNull(s);
|
||||||
|
Row r = sheet.getRow(cref.getRow());
|
||||||
|
Cell c = r.getCell(cref.getCol());
|
||||||
|
String contents = c.getRichStringCellValue().getString();
|
||||||
|
assertEquals("Contents of cell retrieved by its named reference", contents, cellValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies correct functioning for "single cell named range" (aka "named cell")
|
||||||
|
*/
|
||||||
|
public void testNamedCell_2() {
|
||||||
|
|
||||||
|
// setup for this testcase
|
||||||
|
String sname = "TestSheet", cname = "TestName", cvalue = "TestVal";
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
CreationHelper factory = wb.getCreationHelper();
|
||||||
|
Sheet sheet = wb.createSheet(sname);
|
||||||
|
sheet.createRow(0).createCell(0).setCellValue(factory.createRichTextString(cvalue));
|
||||||
|
|
||||||
|
// create named range for a single cell using cellreference
|
||||||
|
Name namedCell = wb.createName();
|
||||||
|
namedCell.setNameName(cname);
|
||||||
|
String reference = sname+"!A1";
|
||||||
|
namedCell.setRefersToFormula(reference);
|
||||||
|
|
||||||
|
// retrieve the newly created named range
|
||||||
|
int namedCellIdx = wb.getNameIndex(cname);
|
||||||
|
Name aNamedCell = wb.getNameAt(namedCellIdx);
|
||||||
|
assertNotNull(aNamedCell);
|
||||||
|
|
||||||
|
// retrieve the cell at the named range and test its contents
|
||||||
|
CellReference cref = new CellReference(aNamedCell.getRefersToFormula());
|
||||||
|
assertNotNull(cref);
|
||||||
|
Sheet s = wb.getSheet(cref.getSheetName());
|
||||||
|
Row r = sheet.getRow(cref.getRow());
|
||||||
|
Cell c = r.getCell(cref.getCol());
|
||||||
|
String contents = c.getRichStringCellValue().getString();
|
||||||
|
assertEquals("Contents of cell retrieved by its named reference", contents, cvalue);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.ss.usermodel;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
import org.apache.poi.ss.ITestDataProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Yegor Kozlov
|
||||||
|
*/
|
||||||
|
public abstract class BaseTestPicture extends TestCase {
|
||||||
|
|
||||||
|
protected abstract ITestDataProvider getTestDataProvider();
|
||||||
|
|
||||||
|
public void baseTestResize(ClientAnchor referenceAnchor) {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sh1 = wb.createSheet();
|
||||||
|
Drawing p1 = sh1.createDrawingPatriarch();
|
||||||
|
CreationHelper factory = wb.getCreationHelper();
|
||||||
|
|
||||||
|
byte[] pictureData = getTestDataProvider().getTestDataFileContent("logoKarmokar4.png");
|
||||||
|
int idx1 = wb.addPicture( pictureData, Workbook.PICTURE_TYPE_PNG );
|
||||||
|
Picture picture = p1.createPicture(factory.createClientAnchor(), idx1);
|
||||||
|
picture.resize();
|
||||||
|
ClientAnchor anchor1 = picture.getPreferredSize();
|
||||||
|
|
||||||
|
//assert against what would BiffViewer print if we insert the image in xls and dump the file
|
||||||
|
assertEquals(referenceAnchor.getCol1(), anchor1.getCol1());
|
||||||
|
assertEquals(referenceAnchor.getRow1(), anchor1.getRow1());
|
||||||
|
assertEquals(referenceAnchor.getCol2(), anchor1.getCol2());
|
||||||
|
assertEquals(referenceAnchor.getRow2(), anchor1.getRow2());
|
||||||
|
assertEquals(referenceAnchor.getDx1(), anchor1.getDx1());
|
||||||
|
assertEquals(referenceAnchor.getDy1(), anchor1.getDy1());
|
||||||
|
assertEquals(referenceAnchor.getDx2(), anchor1.getDx2());
|
||||||
|
assertEquals(referenceAnchor.getDy2(), anchor1.getDy2());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -41,6 +41,9 @@ public abstract class BaseTestRow extends TestCase {
|
||||||
assertEquals(-1, row.getFirstCellNum());
|
assertEquals(-1, row.getFirstCellNum());
|
||||||
assertEquals(-1, row.getLastCellNum());
|
assertEquals(-1, row.getLastCellNum());
|
||||||
|
|
||||||
|
//getting cells from an empty row should returns null
|
||||||
|
for(int i=0; i < 10; i++) assertNull(row.getCell(i));
|
||||||
|
|
||||||
row.createCell(2);
|
row.createCell(2);
|
||||||
assertEquals(2, row.getFirstCellNum());
|
assertEquals(2, row.getFirstCellNum());
|
||||||
assertEquals(3, row.getLastCellNum());
|
assertEquals(3, row.getLastCellNum());
|
||||||
|
|
|
@ -562,4 +562,31 @@ public abstract class BaseTestSheet extends TestCase {
|
||||||
assertFalse(sheet.isColumnBroken(11));
|
assertFalse(sheet.isColumnBroken(11));
|
||||||
assertFalse(sheet.isColumnBroken(12));
|
assertFalse(sheet.isColumnBroken(12));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testGetFirstLastRowNum() {
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sheet = workbook.createSheet("Sheet 1");
|
||||||
|
Row row10 = sheet.createRow(9);
|
||||||
|
Row row1 = sheet.createRow(0);
|
||||||
|
Row row2 = sheet.createRow(1);
|
||||||
|
assertEquals(0, sheet.getFirstRowNum());
|
||||||
|
assertEquals(9, sheet.getLastRowNum());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetFooter() {
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sheet = workbook.createSheet("Sheet 1");
|
||||||
|
assertNotNull(sheet.getFooter());
|
||||||
|
sheet.getFooter().setCenter("test center footer");
|
||||||
|
assertEquals("test center footer", sheet.getFooter().getCenter());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetSetColumnHidden() {
|
||||||
|
Workbook workbook = getTestDataProvider().createWorkbook();
|
||||||
|
Sheet sheet = workbook.createSheet("Sheet 1");
|
||||||
|
sheet.setColumnHidden(2, true);
|
||||||
|
assertTrue(sheet.isColumnHidden(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -273,4 +273,77 @@ public abstract class BaseTestWorkbook extends TestCase {
|
||||||
assertSame(sheet, cell.getSheet());
|
assertSame(sheet, cell.getSheet());
|
||||||
assertSame(row, cell.getRow());
|
assertSame(row, cell.getRow());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Tests that all of the unicode capable string fields can be set, written and then read back
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testUnicodeInAll() throws Exception {
|
||||||
|
Workbook wb = getTestDataProvider().createWorkbook();
|
||||||
|
CreationHelper factory = wb.getCreationHelper();
|
||||||
|
//Create a unicode dataformat (contains euro symbol)
|
||||||
|
DataFormat df = wb.createDataFormat();
|
||||||
|
final String formatStr = "_([$\u20ac-2]\\\\\\ * #,##0.00_);_([$\u20ac-2]\\\\\\ * \\\\\\(#,##0.00\\\\\\);_([$\u20ac-2]\\\\\\ *\\\"\\-\\\\\"??_);_(@_)";
|
||||||
|
short fmt = df.getFormat(formatStr);
|
||||||
|
|
||||||
|
//Create a unicode sheet name (euro symbol)
|
||||||
|
Sheet s = wb.createSheet("\u20ac");
|
||||||
|
|
||||||
|
//Set a unicode header (you guessed it the euro symbol)
|
||||||
|
Header h = s.getHeader();
|
||||||
|
h.setCenter("\u20ac");
|
||||||
|
h.setLeft("\u20ac");
|
||||||
|
h.setRight("\u20ac");
|
||||||
|
|
||||||
|
//Set a unicode footer
|
||||||
|
Footer f = s.getFooter();
|
||||||
|
f.setCenter("\u20ac");
|
||||||
|
f.setLeft("\u20ac");
|
||||||
|
f.setRight("\u20ac");
|
||||||
|
|
||||||
|
Row r = s.createRow(0);
|
||||||
|
Cell c = r.createCell(1);
|
||||||
|
c.setCellValue(12.34);
|
||||||
|
c.getCellStyle().setDataFormat(fmt);
|
||||||
|
|
||||||
|
Cell c2 = r.createCell(2);
|
||||||
|
c.setCellValue(factory.createRichTextString("\u20ac"));
|
||||||
|
|
||||||
|
Cell c3 = r.createCell(3);
|
||||||
|
String formulaString = "TEXT(12.34,\"\u20ac###,##\")";
|
||||||
|
c3.setCellFormula(formulaString);
|
||||||
|
|
||||||
|
wb = getTestDataProvider().writeOutAndReadBack(wb);
|
||||||
|
|
||||||
|
//Test the sheetname
|
||||||
|
s = wb.getSheet("\u20ac");
|
||||||
|
assertNotNull(s);
|
||||||
|
|
||||||
|
//Test the header
|
||||||
|
h = s.getHeader();
|
||||||
|
assertEquals(h.getCenter(), "\u20ac");
|
||||||
|
assertEquals(h.getLeft(), "\u20ac");
|
||||||
|
assertEquals(h.getRight(), "\u20ac");
|
||||||
|
|
||||||
|
//Test the footer
|
||||||
|
f = s.getFooter();
|
||||||
|
assertEquals(f.getCenter(), "\u20ac");
|
||||||
|
assertEquals(f.getLeft(), "\u20ac");
|
||||||
|
assertEquals(f.getRight(), "\u20ac");
|
||||||
|
|
||||||
|
//Test the dataformat
|
||||||
|
r = s.getRow(0);
|
||||||
|
c = r.getCell(1);
|
||||||
|
df = wb.createDataFormat();
|
||||||
|
assertEquals(formatStr, df.getFormat(c.getCellStyle().getDataFormat()));
|
||||||
|
|
||||||
|
//Test the cell string value
|
||||||
|
c2 = r.getCell(2);
|
||||||
|
assertEquals(c.getRichStringCellValue().getString(), "\u20ac");
|
||||||
|
|
||||||
|
//Test the cell formula
|
||||||
|
c3 = r.getCell(3);
|
||||||
|
assertEquals(c3.getCellFormula(), formulaString);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue