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
52ab464cab
commit
51d71180ab
@ -74,18 +74,6 @@ import org.apache.poi.ss.formula.FormulaType;
|
||||
* @author Yegor Kozlov cell comments support
|
||||
*/
|
||||
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";
|
||||
/**
|
||||
|
@ -44,195 +44,6 @@ public class HSSFCellStyle implements CellStyle
|
||||
private short index = 0;
|
||||
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?? */
|
||||
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 {
|
||||
|
||||
/**
|
||||
* Arial font
|
||||
*/
|
||||
|
||||
public final static String FONT_ARIAL = "Arial";
|
||||
|
||||
|
||||
private FontRecord font;
|
||||
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)
|
||||
*/
|
||||
public void setNameName(String nameName){
|
||||
validateName(nameName);
|
||||
|
||||
Workbook wb = _book.getWorkbook();
|
||||
_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.
|
||||
*
|
||||
|
@ -19,13 +19,6 @@ package org.apache.poi.ss.usermodel;
|
||||
|
||||
|
||||
public interface Font {
|
||||
|
||||
/**
|
||||
* Arial font
|
||||
*/
|
||||
|
||||
public final static String FONT_ARIAL = "Arial";
|
||||
|
||||
/**
|
||||
* Normal boldness (not bold)
|
||||
*/
|
||||
@ -116,7 +109,6 @@ public interface Font {
|
||||
/**
|
||||
* set the name for the font (i.e. Arial)
|
||||
* @param name String representing the name of the font to use
|
||||
* @see #FONT_ARIAL
|
||||
*/
|
||||
|
||||
void setFontName(String name);
|
||||
@ -124,7 +116,6 @@ public interface Font {
|
||||
/**
|
||||
* get the name for the font (i.e. Arial)
|
||||
* @return String representing the name of the font to use
|
||||
* @see #FONT_ARIAL
|
||||
*/
|
||||
|
||||
String getFontName();
|
||||
|
@ -36,4 +36,7 @@ public interface Picture {
|
||||
* <code>resize(2.0)</code> resizes to 200% of the original.
|
||||
*/
|
||||
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.FontScheme;
|
||||
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.XSSFFont;
|
||||
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) {
|
||||
for (XSSFFont font : fonts) {
|
||||
if ( (font.getBold() == (boldWeight == XSSFFont.BOLDWEIGHT_BOLD))
|
||||
if ( (font.getBoldweight() == boldWeight)
|
||||
&& font.getColor() == color
|
||||
&& font.getFontHeightInPoints() == fontHeight
|
||||
&& font.getFontHeight() == fontHeight
|
||||
&& font.getFontName().equals(name)
|
||||
&& font.getItalic() == italic
|
||||
&& font.getStrikeout() == strikeout
|
||||
|
@ -66,7 +66,7 @@ public class XSSFFont implements Font {
|
||||
protected XSSFFont() {
|
||||
this.ctFont = CTFont.Factory.newInstance();
|
||||
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);
|
||||
if (size != null) {
|
||||
double fontHeight = size.getVal();
|
||||
return (short) fontHeight;
|
||||
return (short)(fontHeight*20);
|
||||
} else
|
||||
return DEFAULT_FONT_SIZE;
|
||||
return (short)(DEFAULT_FONT_SIZE*20);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #getFontHeight()
|
||||
*/
|
||||
public short getFontHeightInPoints() {
|
||||
CTFontSize size = ctFont.sizeOfSzArray() == 0 ? null : ctFont.getSzArray(0);
|
||||
if (size != null) {
|
||||
double fontHeight = size.getVal();
|
||||
return (short) fontHeight;
|
||||
} else
|
||||
return DEFAULT_FONT_SIZE;
|
||||
return (short)(getFontHeight()/20);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -347,7 +342,7 @@ public class XSSFFont implements Font {
|
||||
* @param height - height in points
|
||||
*/
|
||||
public void setFontHeight(short height) {
|
||||
setFontHeight((double) height);
|
||||
setFontHeight((double) height/20);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -366,7 +361,7 @@ public class XSSFFont implements Font {
|
||||
* @link #setFontHeight
|
||||
*/
|
||||
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){
|
||||
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");
|
||||
|
@ -436,6 +436,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
||||
*/
|
||||
public XSSFSheet createSheet() {
|
||||
String sheetname = "Sheet" + (sheets.size());
|
||||
int idx = 0;
|
||||
while(getSheet(sheetname) != null) {
|
||||
sheetname = "Sheet" + idx;
|
||||
idx++;
|
||||
}
|
||||
return createSheet(sheetname);
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,7 @@ package org.apache.poi.xssf;
|
||||
import org.apache.poi.ss.ITestDataProvider;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||
|
||||
/**
|
||||
* @author Yegor Kozlov
|
||||
@ -41,6 +42,10 @@ public final class XSSFITestDataProvider implements ITestDataProvider {
|
||||
return new XSSFWorkbook();
|
||||
}
|
||||
|
||||
public byte[] getTestDataFileContent(String fileName) {
|
||||
return HSSFTestDataSamples.getTestDataFileContent(fileName);
|
||||
}
|
||||
|
||||
private XSSFITestDataProvider(){}
|
||||
private static XSSFITestDataProvider inst = new XSSFITestDataProvider();
|
||||
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.PackagingURIHelper;
|
||||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
|
||||
|
||||
public class TestXSSFBugs extends TestCase {
|
||||
private String getFilePath(String file) {
|
||||
File xml = new File(
|
||||
System.getProperty("HSSF.testdata.path") +
|
||||
File.separator + file
|
||||
);
|
||||
assertTrue(xml.exists());
|
||||
public class TestXSSFBugs extends BaseTestBugzillaIssues {
|
||||
@Override
|
||||
protected XSSFITestDataProvider getTestDataProvider(){
|
||||
return XSSFITestDataProvider.getInstance();
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
public void test45430() throws Exception {
|
||||
XSSFWorkbook wb = new XSSFWorkbook(getFilePath("45430.xlsx"));
|
||||
XSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("45430.xlsx");
|
||||
assertFalse(wb.isMacroEnabled());
|
||||
assertEquals(3, wb.getNumberOfNames());
|
||||
|
||||
@ -72,8 +77,8 @@ public class TestXSSFBugs extends TestCase {
|
||||
* We should carry vba macros over after save
|
||||
*/
|
||||
public void test45431() throws Exception {
|
||||
OPCPackage pkg = OPCPackage.open(getFilePath("45431.xlsm"));
|
||||
XSSFWorkbook wb = new XSSFWorkbook(pkg);
|
||||
XSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("45431.xlsm");
|
||||
OPCPackage pkg = wb.getPackage();
|
||||
assertTrue(wb.isMacroEnabled());
|
||||
|
||||
// Check the various macro related bits can be found
|
||||
@ -115,10 +120,5 @@ public class TestXSSFBugs extends TestCase {
|
||||
PackagingURIHelper.createPartName("/xl/drawings/vmlDrawing1.vml")
|
||||
);
|
||||
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.xssf.XSSFTestDataSamples;
|
||||
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||
import org.apache.poi.xssf.usermodel.XSSFColor;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
|
||||
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.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() {
|
||||
XSSFFont xssfFont=new XSSFFont();
|
||||
@ -119,9 +129,9 @@ public final class TestXSSFFont extends TestCase{
|
||||
ctFont.setSzArray(0,size);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -236,203 +246,4 @@ public final class TestXSSFFont extends TestCase{
|
||||
font.setTypeOffset(XSSFFont.SS_SUPER);
|
||||
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();
|
||||
}
|
||||
|
||||
//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 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.STEditAs;
|
||||
|
||||
@ -27,7 +29,17 @@ import java.util.Arrays;
|
||||
/**
|
||||
* @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(){
|
||||
XSSFWorkbook wb = new XSSFWorkbook();
|
||||
|
@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Iterator;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
@ -35,7 +36,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
|
||||
public class TestXSSFSheet extends BaseTestSheet {
|
||||
|
||||
@Override
|
||||
protected XSSFITestDataProvider getTestDataProvider(){
|
||||
protected XSSFITestDataProvider getTestDataProvider() {
|
||||
return XSSFITestDataProvider.getInstance();
|
||||
}
|
||||
|
||||
@ -48,90 +49,66 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||
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 {
|
||||
File xml = new File(
|
||||
System.getProperty("HSSF.testdata.path") +
|
||||
File.separator + "45540_classic_Header.xlsx"
|
||||
);
|
||||
assertTrue(xml.exists());
|
||||
File xml = new File(
|
||||
System.getProperty("HSSF.testdata.path") +
|
||||
File.separator + "45540_classic_Header.xlsx"
|
||||
);
|
||||
assertTrue(xml.exists());
|
||||
|
||||
XSSFWorkbook workbook = new XSSFWorkbook(xml.toString());
|
||||
XSSFOddHeader hdr;
|
||||
XSSFOddFooter ftr;
|
||||
XSSFWorkbook workbook = new XSSFWorkbook(xml.toString());
|
||||
XSSFOddHeader hdr;
|
||||
XSSFOddFooter ftr;
|
||||
|
||||
// Sheet 1 has a header with center and right text
|
||||
XSSFSheet s1 = workbook.getSheetAt(0);
|
||||
assertNotNull(s1.getHeader());
|
||||
assertNotNull(s1.getFooter());
|
||||
hdr = (XSSFOddHeader)s1.getHeader();
|
||||
ftr = (XSSFOddFooter)s1.getFooter();
|
||||
// Sheet 1 has a header with center and right text
|
||||
XSSFSheet s1 = workbook.getSheetAt(0);
|
||||
assertNotNull(s1.getHeader());
|
||||
assertNotNull(s1.getFooter());
|
||||
hdr = (XSSFOddHeader) s1.getHeader();
|
||||
ftr = (XSSFOddFooter) s1.getFooter();
|
||||
|
||||
assertEquals("&Ctestdoc&Rtest phrase", hdr.getText());
|
||||
assertEquals(null, ftr.getText());
|
||||
assertEquals("&Ctestdoc&Rtest phrase", hdr.getText());
|
||||
assertEquals(null, ftr.getText());
|
||||
|
||||
assertEquals("", hdr.getLeft());
|
||||
assertEquals("testdoc", hdr.getCenter());
|
||||
assertEquals("test phrase", hdr.getRight());
|
||||
assertEquals("", hdr.getLeft());
|
||||
assertEquals("testdoc", hdr.getCenter());
|
||||
assertEquals("test phrase", hdr.getRight());
|
||||
|
||||
assertEquals("", ftr.getLeft());
|
||||
assertEquals("", ftr.getCenter());
|
||||
assertEquals("", ftr.getRight());
|
||||
assertEquals("", ftr.getLeft());
|
||||
assertEquals("", ftr.getCenter());
|
||||
assertEquals("", ftr.getRight());
|
||||
|
||||
// Sheet 2 has a footer, but it's empty
|
||||
XSSFSheet s2 = workbook.getSheetAt(1);
|
||||
assertNotNull(s2.getHeader());
|
||||
assertNotNull(s2.getFooter());
|
||||
hdr = (XSSFOddHeader) s2.getHeader();
|
||||
ftr = (XSSFOddFooter) s2.getFooter();
|
||||
|
||||
// Sheet 2 has a footer, but it's empty
|
||||
XSSFSheet s2 = workbook.getSheetAt(1);
|
||||
assertNotNull(s2.getHeader());
|
||||
assertNotNull(s2.getFooter());
|
||||
hdr = (XSSFOddHeader)s2.getHeader();
|
||||
ftr = (XSSFOddFooter)s2.getFooter();
|
||||
assertEquals(null, hdr.getText());
|
||||
assertEquals("&L&F", ftr.getText());
|
||||
|
||||
assertEquals(null, hdr.getText());
|
||||
assertEquals("&L&F", ftr.getText());
|
||||
assertEquals("", hdr.getLeft());
|
||||
assertEquals("", hdr.getCenter());
|
||||
assertEquals("", hdr.getRight());
|
||||
|
||||
assertEquals("", hdr.getLeft());
|
||||
assertEquals("", hdr.getCenter());
|
||||
assertEquals("", hdr.getRight());
|
||||
assertEquals("&F", ftr.getLeft());
|
||||
assertEquals("", ftr.getCenter());
|
||||
assertEquals("", ftr.getRight());
|
||||
|
||||
assertEquals("&F", ftr.getLeft());
|
||||
assertEquals("", ftr.getCenter());
|
||||
assertEquals("", ftr.getRight());
|
||||
// Save and reload
|
||||
XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
||||
|
||||
hdr = (XSSFOddHeader) wb.getSheetAt(0).getHeader();
|
||||
ftr = (XSSFOddFooter) wb.getSheetAt(0).getFooter();
|
||||
|
||||
// Save and reload
|
||||
XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
||||
assertEquals("", hdr.getLeft());
|
||||
assertEquals("testdoc", hdr.getCenter());
|
||||
assertEquals("test phrase", hdr.getRight());
|
||||
|
||||
hdr = (XSSFOddHeader)wb.getSheetAt(0).getHeader();
|
||||
ftr = (XSSFOddFooter)wb.getSheetAt(0).getFooter();
|
||||
|
||||
assertEquals("", hdr.getLeft());
|
||||
assertEquals("testdoc", hdr.getCenter());
|
||||
assertEquals("test phrase", hdr.getRight());
|
||||
|
||||
assertEquals("", ftr.getLeft());
|
||||
assertEquals("", ftr.getCenter());
|
||||
assertEquals("", ftr.getRight());
|
||||
assertEquals("", ftr.getLeft());
|
||||
assertEquals("", ftr.getCenter());
|
||||
assertEquals("", ftr.getRight());
|
||||
}
|
||||
|
||||
public void testGetAllHeadersFooters() {
|
||||
@ -173,19 +150,12 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||
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() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet("Sheet 1");
|
||||
sheet.createRow(0).createCell(13).setCellValue("test");
|
||||
|
||||
sheet.autoSizeColumn((short)13);
|
||||
sheet.autoSizeColumn(13);
|
||||
|
||||
ColumnHelper columnHelper = sheet.getColumnHelper();
|
||||
CTCol col = columnHelper.getColumn(13, false);
|
||||
@ -210,188 +180,177 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||
|
||||
XSSFComment comment = sheet.createComment();
|
||||
|
||||
Cell cell = sheet.createRow(0).createCell((short)0);
|
||||
Cell cell = sheet.createRow(0).createCell((short) 0);
|
||||
CommentsTable comments = sheet.getCommentsTable();
|
||||
CTComments ctComments = comments.getCTComments();
|
||||
|
||||
sheet.setCellComment("A1", comment);
|
||||
assertEquals("A1", ctComments.getCommentList().getCommentArray(0).getRef());
|
||||
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() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
sheet.setActiveCell("R5");
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
sheet.setActiveCell("R5");
|
||||
|
||||
assertEquals("R5", sheet.getActiveCell());
|
||||
assertEquals("R5", sheet.getActiveCell());
|
||||
|
||||
}
|
||||
|
||||
public void testCreateFreezePane() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
|
||||
|
||||
sheet.createFreezePane(2, 4);
|
||||
assertEquals((double)2, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
||||
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
||||
sheet.createFreezePane(3, 6, 10, 10);
|
||||
assertEquals((double)3, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
||||
// assertEquals(10, sheet.getTopRow());
|
||||
// assertEquals(10, sheet.getLeftCol());
|
||||
sheet.createSplitPane(4, 8, 12, 12, 1);
|
||||
assertEquals((double)8, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getYSplit());
|
||||
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
||||
sheet.createFreezePane(2, 4);
|
||||
assertEquals((double) 2, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
||||
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
||||
sheet.createFreezePane(3, 6, 10, 10);
|
||||
assertEquals((double) 3, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit());
|
||||
// assertEquals(10, sheet.getTopRow());
|
||||
// assertEquals(10, sheet.getLeftCol());
|
||||
sheet.createSplitPane(4, 8, 12, 12, 1);
|
||||
assertEquals((double) 8, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getYSplit());
|
||||
assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
|
||||
}
|
||||
|
||||
public void testNewMergedRegionAt() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
|
||||
sheet.addMergedRegion(region);
|
||||
assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
|
||||
CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
|
||||
sheet.addMergedRegion(region);
|
||||
assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
|
||||
assertEquals(1, sheet.getNumMergedRegions());
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
public void testRemoveMergedRegion() {
|
||||
public void testRemoveMergedRegion_lowlevel() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
|
||||
CellRangeAddress region_1 = CellRangeAddress.valueOf("A1:B2");
|
||||
CellRangeAddress region_2 = CellRangeAddress.valueOf("C3:D4");
|
||||
CellRangeAddress region_3 = CellRangeAddress.valueOf("E5:F6");
|
||||
sheet.addMergedRegion(region_1);
|
||||
sheet.addMergedRegion(region_2);
|
||||
sheet.addMergedRegion(region_3);
|
||||
assertEquals("C3:D4", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef());
|
||||
assertEquals(3, sheet.getNumMergedRegions());
|
||||
sheet.removeMergedRegion(1);
|
||||
assertEquals("E5:F6", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef());
|
||||
assertEquals(2, sheet.getNumMergedRegions());
|
||||
sheet.removeMergedRegion(1);
|
||||
sheet.removeMergedRegion(0);
|
||||
assertEquals(0, sheet.getNumMergedRegions());
|
||||
CellRangeAddress region_1 = CellRangeAddress.valueOf("A1:B2");
|
||||
CellRangeAddress region_2 = CellRangeAddress.valueOf("C3:D4");
|
||||
CellRangeAddress region_3 = CellRangeAddress.valueOf("E5:F6");
|
||||
sheet.addMergedRegion(region_1);
|
||||
sheet.addMergedRegion(region_2);
|
||||
sheet.addMergedRegion(region_3);
|
||||
assertEquals("C3:D4", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef());
|
||||
assertEquals(3, sheet.getNumMergedRegions());
|
||||
sheet.removeMergedRegion(1);
|
||||
assertEquals("E5:F6", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef());
|
||||
assertEquals(2, sheet.getNumMergedRegions());
|
||||
sheet.removeMergedRegion(1);
|
||||
sheet.removeMergedRegion(0);
|
||||
assertEquals(0, sheet.getNumMergedRegions());
|
||||
}
|
||||
|
||||
public void testSetDefaultColumnStyle() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
|
||||
StylesTable stylesTable = workbook.getStylesSource();
|
||||
XSSFFont font = new XSSFFont();
|
||||
font.setFontName("Cambria");
|
||||
stylesTable.putFont(font);
|
||||
CTXf cellStyleXf = CTXf.Factory.newInstance();
|
||||
cellStyleXf.setFontId(1);
|
||||
cellStyleXf.setFillId(0);
|
||||
cellStyleXf.setBorderId(0);
|
||||
cellStyleXf.setNumFmtId(0);
|
||||
stylesTable.putCellStyleXf(cellStyleXf);
|
||||
CTXf cellXf = CTXf.Factory.newInstance();
|
||||
cellXf.setXfId(1);
|
||||
stylesTable.putCellXf(cellXf);
|
||||
XSSFCellStyle cellStyle = new XSSFCellStyle(1, 1, stylesTable);
|
||||
assertEquals(1, cellStyle.getFontIndex());
|
||||
StylesTable stylesTable = workbook.getStylesSource();
|
||||
XSSFFont font = new XSSFFont();
|
||||
font.setFontName("Cambria");
|
||||
stylesTable.putFont(font);
|
||||
CTXf cellStyleXf = CTXf.Factory.newInstance();
|
||||
cellStyleXf.setFontId(1);
|
||||
cellStyleXf.setFillId(0);
|
||||
cellStyleXf.setBorderId(0);
|
||||
cellStyleXf.setNumFmtId(0);
|
||||
stylesTable.putCellStyleXf(cellStyleXf);
|
||||
CTXf cellXf = CTXf.Factory.newInstance();
|
||||
cellXf.setXfId(1);
|
||||
stylesTable.putCellXf(cellXf);
|
||||
XSSFCellStyle cellStyle = new XSSFCellStyle(1, 1, stylesTable);
|
||||
assertEquals(1, cellStyle.getFontIndex());
|
||||
|
||||
sheet.setDefaultColumnStyle((short) 3, cellStyle);
|
||||
assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle());
|
||||
sheet.setDefaultColumnStyle((short) 3, cellStyle);
|
||||
assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle());
|
||||
}
|
||||
|
||||
|
||||
public void testGroupUngroupColumn() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
|
||||
//one level
|
||||
sheet.groupColumn((short) 2, (short) 7);
|
||||
sheet.groupColumn((short) 10, (short) 11);
|
||||
CTCols cols = sheet.getCTWorksheet().getColsArray(0);
|
||||
assertEquals(2, cols.sizeOfColArray());
|
||||
CTCol[] colArray = cols.getColArray();
|
||||
assertNotNull(colArray);
|
||||
assertEquals(2 + 1, colArray[0].getMin()); // 1 based
|
||||
assertEquals(7 + 1, colArray[0].getMax()); // 1 based
|
||||
assertEquals(1, colArray[0].getOutlineLevel());
|
||||
|
||||
//two level
|
||||
sheet.groupColumn((short) 1, (short) 2);
|
||||
cols = sheet.getCTWorksheet().getColsArray(0);
|
||||
assertEquals(4, cols.sizeOfColArray());
|
||||
colArray = cols.getColArray();
|
||||
assertEquals(2, colArray[1].getOutlineLevel());
|
||||
|
||||
//three level
|
||||
sheet.groupColumn((short) 6, (short) 8);
|
||||
sheet.groupColumn((short) 2, (short) 3);
|
||||
cols = sheet.getCTWorksheet().getColsArray(0);
|
||||
assertEquals(7, cols.sizeOfColArray());
|
||||
colArray = cols.getColArray();
|
||||
assertEquals(3, colArray[1].getOutlineLevel());
|
||||
assertEquals(3, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
||||
|
||||
sheet.ungroupColumn((short) 8, (short) 10);
|
||||
colArray = cols.getColArray();
|
||||
//assertEquals(3, colArray[1].getOutlineLevel());
|
||||
|
||||
sheet.ungroupColumn((short) 4, (short) 6);
|
||||
sheet.ungroupColumn((short) 2, (short) 2);
|
||||
colArray = cols.getColArray();
|
||||
assertEquals(4, colArray.length);
|
||||
assertEquals(2, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
||||
}
|
||||
|
||||
|
||||
public void testGroupUngroupRow() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
|
||||
public void testGroupUngroupColumn() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
//one level
|
||||
sheet.groupRow(9, 10);
|
||||
assertEquals(2, sheet.getPhysicalNumberOfRows());
|
||||
CTRow ctrow = sheet.getRow(9).getCTRow();
|
||||
|
||||
//one level
|
||||
sheet.groupColumn((short)2,(short)7);
|
||||
sheet.groupColumn((short)10,(short)11);
|
||||
CTCols cols=sheet.getCTWorksheet().getColsArray(0);
|
||||
assertEquals(2,cols.sizeOfColArray());
|
||||
CTCol[]colArray=cols.getColArray();
|
||||
assertNotNull(colArray);
|
||||
assertEquals(2+1,colArray[0].getMin()); // 1 based
|
||||
assertEquals(7+1,colArray[0].getMax()); // 1 based
|
||||
assertEquals(1, colArray[0].getOutlineLevel());
|
||||
assertNotNull(ctrow);
|
||||
assertEquals(10, ctrow.getR());
|
||||
assertEquals(1, ctrow.getOutlineLevel());
|
||||
assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
|
||||
//two level
|
||||
sheet.groupColumn((short)1,(short)2);
|
||||
cols=sheet.getCTWorksheet().getColsArray(0);
|
||||
assertEquals(4,cols.sizeOfColArray());
|
||||
colArray=cols.getColArray();
|
||||
assertEquals(2, colArray[1].getOutlineLevel());
|
||||
|
||||
//three level
|
||||
sheet.groupColumn((short)6,(short)8);
|
||||
sheet.groupColumn((short)2,(short)3);
|
||||
cols=sheet.getCTWorksheet().getColsArray(0);
|
||||
assertEquals(7,cols.sizeOfColArray());
|
||||
colArray=cols.getColArray();
|
||||
assertEquals(3, colArray[1].getOutlineLevel());
|
||||
assertEquals(3,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
||||
|
||||
sheet.ungroupColumn((short)8,(short) 10);
|
||||
colArray=cols.getColArray();
|
||||
//assertEquals(3, colArray[1].getOutlineLevel());
|
||||
|
||||
sheet.ungroupColumn((short)4,(short)6);
|
||||
sheet.ungroupColumn((short)2,(short)2);
|
||||
colArray=cols.getColArray();
|
||||
assertEquals(4, colArray.length);
|
||||
assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
|
||||
}
|
||||
//two level
|
||||
sheet.groupRow(10, 13);
|
||||
assertEquals(5, sheet.getPhysicalNumberOfRows());
|
||||
ctrow = sheet.getRow(10).getCTRow();
|
||||
assertNotNull(ctrow);
|
||||
assertEquals(11, ctrow.getR());
|
||||
assertEquals(2, ctrow.getOutlineLevel());
|
||||
assertEquals(2, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
|
||||
|
||||
public void testGroupUngroupRow() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet();
|
||||
sheet.ungroupRow(8, 10);
|
||||
assertEquals(4, sheet.getPhysicalNumberOfRows());
|
||||
assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
|
||||
//one level
|
||||
sheet.groupRow(9,10);
|
||||
assertEquals(2,sheet.getPhysicalNumberOfRows());
|
||||
CTRow ctrow = sheet.getRow(9).getCTRow();
|
||||
sheet.ungroupRow(10, 10);
|
||||
assertEquals(3, sheet.getPhysicalNumberOfRows());
|
||||
|
||||
assertNotNull(ctrow);
|
||||
assertEquals(10,ctrow.getR());
|
||||
assertEquals(1, ctrow.getOutlineLevel());
|
||||
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
|
||||
//two level
|
||||
sheet.groupRow(10,13);
|
||||
assertEquals(5,sheet.getPhysicalNumberOfRows());
|
||||
ctrow = sheet.getRow(10).getCTRow();
|
||||
assertNotNull(ctrow);
|
||||
assertEquals(11,ctrow.getR());
|
||||
assertEquals(2, ctrow.getOutlineLevel());
|
||||
assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
|
||||
|
||||
sheet.ungroupRow(8, 10);
|
||||
assertEquals(4,sheet.getPhysicalNumberOfRows());
|
||||
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
|
||||
sheet.ungroupRow(10,10);
|
||||
assertEquals(3,sheet.getPhysicalNumberOfRows());
|
||||
|
||||
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
}
|
||||
assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||
}
|
||||
|
||||
public void testSetZoom() {
|
||||
XSSFWorkbook workBook = new XSSFWorkbook();
|
||||
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();
|
||||
assertEquals(zoom, 75);
|
||||
|
||||
@ -402,7 +361,7 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||
try {
|
||||
sheet1.setZoom(500);
|
||||
fail("Expecting exception");
|
||||
} catch (IllegalArgumentException e){
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertEquals("Valid scale values range from 10 to 400", e.getMessage());
|
||||
}
|
||||
}
|
||||
@ -413,8 +372,8 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||
public void testColumnWidth_lowlevel() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
XSSFSheet sheet = workbook.createSheet("Sheet 1");
|
||||
sheet.setColumnWidth(1, 22*256);
|
||||
assertEquals(22*256, sheet.getColumnWidth(1));
|
||||
sheet.setColumnWidth(1, 22 * 256);
|
||||
assertEquals(22 * 256, sheet.getColumnWidth(1));
|
||||
|
||||
// Now check the low level stuff, and check that's all
|
||||
// been set correctly
|
||||
@ -432,9 +391,8 @@ public class TestXSSFSheet extends BaseTestSheet {
|
||||
assertEquals(2, col.getMax());
|
||||
assertEquals(22.0, col.getWidth());
|
||||
|
||||
|
||||
// Now set another
|
||||
sheet.setColumnWidth(3, 33*256);
|
||||
sheet.setColumnWidth(3, 33 * 256);
|
||||
|
||||
cols_s = cts.getColsArray();
|
||||
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
|
||||
*/
|
||||
@ -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(){
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
short i = 0;
|
||||
@ -212,25 +158,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
||||
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(){
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
short i = workbook.getNumCellStyles();
|
||||
@ -240,17 +167,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
||||
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() {
|
||||
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("Formatting.xlsx");
|
||||
assertEquals(3, workbook.getNumberOfSheets());
|
||||
|
@ -42,6 +42,10 @@ public final class HSSFITestDataProvider implements ITestDataProvider {
|
||||
return new HSSFWorkbook();
|
||||
}
|
||||
|
||||
public byte[] getTestDataFileContent(String fileName) {
|
||||
return HSSFTestDataSamples.getTestDataFileContent(fileName);
|
||||
}
|
||||
|
||||
private HSSFITestDataProvider(){}
|
||||
private static HSSFITestDataProvider inst = new HSSFITestDataProvider();
|
||||
public static HSSFITestDataProvider getInstance(){
|
||||
|
@ -60,7 +60,7 @@ public class AllUserModelTests {
|
||||
result.addTestSuite(TestHSSFTextbox.class);
|
||||
result.addTestSuite(TestHSSFWorkbook.class);
|
||||
result.addTestSuite(TestLinkTable.class);
|
||||
result.addTestSuite(TestNamedRange.class);
|
||||
result.addTestSuite(TestHSSFName.class);
|
||||
result.addTestSuite(TestOLE2Embeding.class);
|
||||
result.addTestSuite(TestPOIFSProperties.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.OldExcelFormatException;
|
||||
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||
import org.apache.poi.hssf.model.Workbook;
|
||||
import org.apache.poi.hssf.record.CellValueRecordInterface;
|
||||
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.RichTextString;
|
||||
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.util.TempFile;
|
||||
|
||||
/**
|
||||
* Testcases for bugs entered in bugzilla
|
||||
* 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 Yegor Kozlov
|
||||
*/
|
||||
public final class TestBugs extends TestCase {
|
||||
public final class TestBugs extends BaseTestBugzillaIssues {
|
||||
|
||||
private static HSSFWorkbook openSample(String sampleFileName) {
|
||||
return HSSFTestDataSamples.openSampleWorkbook(sampleFileName);
|
||||
@Override
|
||||
protected HSSFITestDataProvider getTestDataProvider(){
|
||||
return HSSFITestDataProvider.getInstance();
|
||||
}
|
||||
|
||||
private static HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) {
|
||||
return HSSFTestDataSamples.writeOutAndReadBack(original);
|
||||
private HSSFWorkbook openSample(String sampleFileName) {
|
||||
return getTestDataProvider().openSampleWorkbook(sampleFileName);
|
||||
}
|
||||
|
||||
private HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) {
|
||||
return getTestDataProvider().writeOutAndReadBack(original);
|
||||
}
|
||||
|
||||
private static void writeTestOutputFileForViewing(HSSFWorkbook wb, String simpleFileName) {
|
||||
@ -94,16 +105,6 @@ public final class TestBugs extends TestCase {
|
||||
c.setCellValue(10);
|
||||
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
|
||||
* 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");
|
||||
}
|
||||
|
||||
/** test writing a file with large number of unique strings
|
||||
*open resulting file in Excel to check results!*/
|
||||
|
||||
public void test15375_2() throws Exception{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
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");
|
||||
/**
|
||||
* test writing a file with large number of unique strings,
|
||||
* open resulting file in Excel to check results!
|
||||
*/
|
||||
public void test15375_2() {
|
||||
baseTest15375(6000);
|
||||
}
|
||||
|
||||
/**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
|
||||
* bug and testcase submitted by Sompop Kumnoonsate
|
||||
* 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() {
|
||||
openSample("33082.xls");
|
||||
}
|
||||
@ -486,19 +374,8 @@ public final class TestBugs extends TestCase {
|
||||
*/
|
||||
public void test29206() {
|
||||
//the first check with blank workbook
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFWorkbook wb = openSample("Simple.xls");
|
||||
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++) {
|
||||
HSSFRow row = sheet.getRow(i);
|
||||
if(row != null) {
|
||||
@ -901,23 +778,6 @@ public final class TestBugs extends TestCase {
|
||||
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() {
|
||||
HSSFWorkbook wb = openSample("36947.xls");
|
||||
assertTrue("no errors reading sample xls", true);
|
||||
@ -925,16 +785,6 @@ public final class TestBugs extends TestCase {
|
||||
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() {
|
||||
HSSFWorkbook wb = openSample("39634.xls");
|
||||
assertTrue("no errors reading sample xls", true);
|
||||
@ -1521,38 +1371,6 @@ public final class TestBugs extends TestCase {
|
||||
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:
|
||||
* =MY_VBA_FUNCTION("lskdjflsk")
|
||||
|
56
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java
Executable file
56
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java
Executable file
@ -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.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.ErrorConstants;
|
||||
import org.apache.poi.ss.usermodel.BaseTestCell;
|
||||
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
|
||||
* particular datatypes, etc.
|
||||
* @author Andrew C. Oliver (andy at superlinksoftware dot com)
|
||||
* @author Dan Sherman (dsherman at isisph.com)
|
||||
* @author Alex Jacoby (ajacoby at gmail.com)
|
||||
* Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}.
|
||||
*
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author ROMANL
|
||||
* @author Danny Mui (danny at muibros.com)
|
||||
* @author Amol S. Deshmukh < amol at ap ache dot org >
|
||||
*/
|
||||
public final class TestHSSFName extends BaseTestNamedRange {
|
||||
|
||||
@ -45,4 +55,187 @@ public final class TestHSSFName extends BaseTestNamedRange {
|
||||
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 org.apache.poi.hssf.HSSFTestDataSamples;
|
||||
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||
import org.apache.poi.ss.usermodel.BaseTestPicture;
|
||||
|
||||
/**
|
||||
* Test <code>HSSFPicture</code>.
|
||||
*
|
||||
* @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() {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
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());
|
||||
baseTestResize(new HSSFClientAnchor(0, 0, 848, 240, (short)0, 0, (short)1, 9));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -59,23 +59,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||
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() {
|
||||
HSSFWorkbook b = new HSSFWorkbook( );
|
||||
try {
|
||||
@ -154,7 +137,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||
// So, start again
|
||||
b = getTestDataProvider().openSampleWorkbook("44010-SingleChart.xls");
|
||||
|
||||
b = writeRead(b);
|
||||
b = getTestDataProvider().writeOutAndReadBack(b);
|
||||
assertEquals(2, b.getNumberOfSheets());
|
||||
s = b.getSheetAt(1);
|
||||
assertEquals(0, s.getFirstRowNum());
|
||||
@ -184,7 +167,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||
// So, start again
|
||||
b = getTestDataProvider().openSampleWorkbook("44010-TwoCharts.xls");
|
||||
|
||||
b = writeRead(b);
|
||||
b = getTestDataProvider().writeOutAndReadBack(b);
|
||||
assertEquals(3, b.getNumberOfSheets());
|
||||
|
||||
s = b.getSheetAt(1);
|
||||
@ -195,11 +178,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
|
||||
assertEquals(8, s.getLastRowNum());
|
||||
}
|
||||
|
||||
private static HSSFWorkbook writeRead(HSSFWorkbook b) {
|
||||
return HSSFTestDataSamples.writeOutAndReadBack(b);
|
||||
}
|
||||
|
||||
|
||||
public void testSelectedSheet_bug44523() {
|
||||
HSSFWorkbook wb=new HSSFWorkbook();
|
||||
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;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileInputStream;
|
||||
|
||||
import org.apache.poi.util.TempFile;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||
|
||||
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
|
||||
* That a Umlat is written and then read back.
|
||||
* 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
|
||||
assertEquals(c.getRichStringCellValue().getUnicodeString().getOptionFlags(), 0);
|
||||
|
||||
File tempFile = TempFile.createTempFile("umlat", "test.xls");
|
||||
FileOutputStream stream = new FileOutputStream(tempFile);
|
||||
wb.write(stream);
|
||||
|
||||
wb = null;
|
||||
FileInputStream in = new FileInputStream(tempFile);
|
||||
wb = new HSSFWorkbook(in);
|
||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
|
||||
|
||||
//Test the sheetname
|
||||
s = wb.getSheet("test");
|
||||
|
@ -44,4 +44,10 @@ public interface ITestDataProvider {
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
298
src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
Executable file
298
src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
Executable file
@ -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);
|
||||
}
|
||||
}
|
204
src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java
Executable file
204
src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java
Executable file
@ -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 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 {
|
||||
|
||||
@ -84,6 +90,18 @@ public abstract class BaseTestNamedRange extends TestCase {
|
||||
//-1 means the name applies to the entire workbook
|
||||
name1.setSheetIndex(-1);
|
||||
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() {
|
||||
@ -170,4 +188,314 @@ public abstract class BaseTestNamedRange extends TestCase {
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
53
src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java
Executable file
53
src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java
Executable file
@ -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.getLastCellNum());
|
||||
|
||||
//getting cells from an empty row should returns null
|
||||
for(int i=0; i < 10; i++) assertNull(row.getCell(i));
|
||||
|
||||
row.createCell(2);
|
||||
assertEquals(2, row.getFirstCellNum());
|
||||
assertEquals(3, row.getLastCellNum());
|
||||
|
@ -562,4 +562,31 @@ public abstract class BaseTestSheet extends TestCase {
|
||||
assertFalse(sheet.isColumnBroken(11));
|
||||
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(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
Block a user