git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@759714 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_5_BETA6
@@ -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()); | |||
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(); | |||
assertEquals("&Ctestdoc&Rtest phrase", hdr.getText()); | |||
assertEquals(null, ftr.getText()); | |||
assertEquals("", hdr.getLeft()); | |||
assertEquals("testdoc", hdr.getCenter()); | |||
assertEquals("test phrase", hdr.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(); | |||
assertEquals(null, hdr.getText()); | |||
assertEquals("&L&F", ftr.getText()); | |||
assertEquals("", hdr.getLeft()); | |||
assertEquals("", hdr.getCenter()); | |||
assertEquals("", hdr.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(); | |||
assertEquals("", hdr.getLeft()); | |||
assertEquals("testdoc", hdr.getCenter()); | |||
assertEquals("test phrase", hdr.getRight()); | |||
assertEquals("", ftr.getLeft()); | |||
assertEquals("", ftr.getCenter()); | |||
assertEquals("", ftr.getRight()); | |||
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; | |||
// 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("", hdr.getLeft()); | |||
assertEquals("testdoc", hdr.getCenter()); | |||
assertEquals("test phrase", hdr.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(); | |||
assertEquals(null, hdr.getText()); | |||
assertEquals("&L&F", ftr.getText()); | |||
assertEquals("", hdr.getLeft()); | |||
assertEquals("", hdr.getCenter()); | |||
assertEquals("", hdr.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(); | |||
assertEquals("", hdr.getLeft()); | |||
assertEquals("testdoc", hdr.getCenter()); | |||
assertEquals("test phrase", hdr.getRight()); | |||
assertEquals("", ftr.getLeft()); | |||
assertEquals("", ftr.getCenter()); | |||
assertEquals("", ftr.getRight()); | |||
} | |||
public void testGetAllHeadersFooters() { | |||
@@ -173,25 +150,18 @@ 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); | |||
assertTrue(col.getBestFit()); | |||
} | |||
public void testGetCellComment() { | |||
XSSFWorkbook workbook = new XSSFWorkbook(); | |||
@@ -203,195 +173,184 @@ public class TestXSSFSheet extends BaseTestSheet { | |||
assertNotNull(sheet.getCellComment(9, 2)); | |||
assertEquals("test C10 author", sheet.getCellComment(9, 2).getAuthor()); | |||
} | |||
public void testSetCellComment() { | |||
XSSFWorkbook workbook = new XSSFWorkbook(); | |||
XSSFSheet sheet = workbook.createSheet(); | |||
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() { | |||
public void testRemoveMergedRegion_lowlevel() { | |||
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()); | |||
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()); | |||
} | |||
public void testRemoveMergedRegion() { | |||
public void testSetDefaultColumnStyle() { | |||
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()); | |||
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()); | |||
} | |||
public void testSetDefaultColumnStyle() { | |||
public void testGroupUngroupColumn() { | |||
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()); | |||
sheet.setDefaultColumnStyle((short) 3, cellStyle); | |||
assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle()); | |||
//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 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(); | |||
//one level | |||
sheet.groupRow(9,10); | |||
assertEquals(2,sheet.getPhysicalNumberOfRows()); | |||
CTRow ctrow = sheet.getRow(9).getCTRow(); | |||
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()); | |||
} | |||
public void testGroupUngroupRow() { | |||
XSSFWorkbook workbook = new XSSFWorkbook(); | |||
XSSFSheet sheet = workbook.createSheet(); | |||
//one level | |||
sheet.groupRow(9, 10); | |||
assertEquals(2, sheet.getPhysicalNumberOfRows()); | |||
CTRow ctrow = sheet.getRow(9).getCTRow(); | |||
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()); | |||
} | |||
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,68 +164,14 @@ 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*/ | |||
public void test15556() { | |||
@@ -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") |
@@ -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 { | |||
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(); | |||
@Override | |||
protected HSSFITestDataProvider getTestDataProvider(){ | |||
return HSSFITestDataProvider.getInstance(); | |||
} | |||
//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()); | |||
public void testResize() { | |||
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,132 +16,39 @@ | |||
*/ | |||
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. | |||
* | |||
* | |||
* | |||
* | |||
* | |||
*/ | |||
public void testUmlatReadWrite() throws Exception { | |||
HSSFWorkbook wb = new HSSFWorkbook(); | |||
//Create a unicode sheet name (euro symbol) | |||
HSSFSheet s = wb.createSheet("test"); | |||
HSSFRow r = s.createRow(0); | |||
HSSFCell c = r.createCell(1); | |||
c.setCellValue(new HSSFRichTextString("\u00e4")); | |||
//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"); | |||
assertNotNull(s); | |||
c = r.getCell(1); | |||
assertEquals(c.getRichStringCellValue().getString(), "\u00e4"); | |||
} | |||
} | |||
} |
@@ -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); | |||
} |
@@ -0,0 +1,298 @@ | |||
/* ==================================================================== | |||
Licensed to the Apache Software Foundation (ASF) under one or more | |||
contributor license agreements. See the NOTICE file distributed with | |||
this work for additional information regarding copyright ownership. | |||
The ASF licenses this file to You under the Apache License, Version 2.0 | |||
(the "License"); you may not use this file except in compliance with | |||
the License. You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
==================================================================== */ | |||
package org.apache.poi.ss.usermodel; | |||
import junit.framework.TestCase; | |||
import junit.framework.AssertionFailedError; | |||
import org.apache.poi.ss.ITestDataProvider; | |||
import org.apache.poi.ss.util.CellRangeAddress; | |||
/** | |||
* A base class for bugzilla issues that can be described in terms of common ss interfaces. | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public abstract class BaseTestBugzillaIssues extends TestCase { | |||
protected abstract ITestDataProvider getTestDataProvider(); | |||
/** | |||
* | |||
* Test writing a hyperlink | |||
* Open resulting sheet in Excel and check that A1 contains a hyperlink | |||
* | |||
* Also tests bug 15353 (problems with hyperlinks to Google) | |||
*/ | |||
public void test23094() { | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Sheet s = wb.createSheet(); | |||
Row r = s.createRow(0); | |||
r.createCell(0).setCellFormula("HYPERLINK(\"http://jakarta.apache.org\",\"Jakarta\")"); | |||
r.createCell(1).setCellFormula("HYPERLINK(\"http://google.com\",\"Google\")"); | |||
wb = getTestDataProvider().writeOutAndReadBack(wb); | |||
r = wb.getSheetAt(0).getRow(0); | |||
Cell cell_0 = r.getCell(0); | |||
assertEquals("HYPERLINK(\"http://jakarta.apache.org\",\"Jakarta\")", cell_0.getCellFormula()); | |||
Cell cell_1 = r.getCell(1); | |||
assertEquals("HYPERLINK(\"http://google.com\",\"Google\")", cell_1.getCellFormula()); | |||
} | |||
/** | |||
* test writing a file with large number of unique strings, | |||
* open resulting file in Excel to check results! | |||
* @param num the number of strings to generate | |||
*/ | |||
public void baseTest15375(int num) { | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Sheet sheet = wb.createSheet(); | |||
CreationHelper factory = wb.getCreationHelper(); | |||
String tmp1 = null; | |||
String tmp2 = null; | |||
String tmp3 = null; | |||
for (int i = 0; i < num; i++) { | |||
tmp1 = "Test1" + i; | |||
tmp2 = "Test2" + i; | |||
tmp3 = "Test3" + i; | |||
Row row = sheet.createRow(i); | |||
Cell cell = row.createCell(0); | |||
cell.setCellValue(factory.createRichTextString(tmp1)); | |||
cell = row.createCell(1); | |||
cell.setCellValue(factory.createRichTextString(tmp2)); | |||
cell = row.createCell(2); | |||
cell.setCellValue(factory.createRichTextString(tmp3)); | |||
} | |||
wb = getTestDataProvider().writeOutAndReadBack(wb); | |||
for (int i = 0; i < num; i++) { | |||
tmp1 = "Test1" + i; | |||
tmp2 = "Test2" + i; | |||
tmp3 = "Test3" + i; | |||
Row row = sheet.getRow(i); | |||
assertEquals(tmp1, row.getCell(0).getStringCellValue()); | |||
assertEquals(tmp2, row.getCell(1).getStringCellValue()); | |||
assertEquals(tmp3, row.getCell(2).getStringCellValue()); | |||
} | |||
} | |||
/** | |||
* Merged regions were being removed from the parent in cloned sheets | |||
*/ | |||
public void test22720() { | |||
Workbook workBook = getTestDataProvider().createWorkbook(); | |||
workBook.createSheet("TEST"); | |||
Sheet template = workBook.getSheetAt(0); | |||
template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)); | |||
template.addMergedRegion(new CellRangeAddress(1, 2, 0, 2)); | |||
Sheet clone = workBook.cloneSheet(0); | |||
int originalMerged = template.getNumMergedRegions(); | |||
assertEquals("2 merged regions", 2, originalMerged); | |||
//remove merged regions from clone | |||
for (int i=template.getNumMergedRegions()-1; i>=0; i--) { | |||
clone.removeMergedRegion(i); | |||
} | |||
assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions()); | |||
//check if template's merged regions are OK | |||
if (template.getNumMergedRegions()>0) { | |||
// fetch the first merged region...EXCEPTION OCCURS HERE | |||
template.getMergedRegion(0); | |||
} | |||
//make sure we dont exception | |||
} | |||
public void test28031() { | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Sheet sheet = wb.createSheet(); | |||
wb.setSheetName(0, "Sheet1"); | |||
Row row = sheet.createRow(0); | |||
Cell cell = row.createCell(0); | |||
String formulaText = | |||
"IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))"; | |||
cell.setCellFormula(formulaText); | |||
assertEquals(formulaText, cell.getCellFormula()); | |||
wb = getTestDataProvider().writeOutAndReadBack(wb); | |||
cell = wb.getSheetAt(0).getRow(0).getCell(0); | |||
assertEquals("IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))", cell.getCellFormula()); | |||
} | |||
/** | |||
* Bug 21334: "File error: data may have been lost" with a file | |||
* that contains macros and this formula: | |||
* {=SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""))>0,1))} | |||
*/ | |||
public void test21334() { | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Sheet sh = wb.createSheet(); | |||
Cell cell = sh.createRow(0).createCell(0); | |||
String formula = "SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"))>0,1))"; | |||
cell.setCellFormula(formula); | |||
Workbook wb_sv = getTestDataProvider().writeOutAndReadBack(wb); | |||
Cell cell_sv = wb_sv.getSheetAt(0).getRow(0).getCell(0); | |||
assertEquals(formula, cell_sv.getCellFormula()); | |||
} | |||
/** another test for the number of unique strings issue | |||
*test opening the resulting file in Excel*/ | |||
public void test22568() { | |||
int r=2000;int c=3; | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Sheet sheet = wb.createSheet("ExcelTest") ; | |||
int col_cnt=0, rw_cnt=0 ; | |||
col_cnt = c; | |||
rw_cnt = r; | |||
Row rw ; | |||
rw = sheet.createRow(0) ; | |||
//Header row | |||
for(int j=0; j<col_cnt; j++){ | |||
Cell cell = rw.createCell(j) ; | |||
cell.setCellValue("Col " + (j+1)); | |||
} | |||
for(int i=1; i<rw_cnt; i++){ | |||
rw = sheet.createRow(i) ; | |||
for(int j=0; j<col_cnt; j++){ | |||
Cell cell = rw.createCell(j) ; | |||
cell.setCellValue("Row:" + (i+1) + ",Column:" + (j+1)); | |||
} | |||
} | |||
sheet.setDefaultColumnWidth(18) ; | |||
wb = getTestDataProvider().writeOutAndReadBack(wb); | |||
sheet = wb.getSheetAt(0); | |||
rw = sheet.getRow(0); | |||
//Header row | |||
for(int j=0; j<col_cnt; j++){ | |||
Cell cell = rw.getCell(j) ; | |||
assertEquals("Col " + (j+1), cell.getStringCellValue()); | |||
} | |||
for(int i=1; i<rw_cnt; i++){ | |||
rw = sheet.getRow(i) ; | |||
for(int j=0; j<col_cnt; j++){ | |||
Cell cell = rw.getCell(j) ; | |||
assertEquals("Row:" + (i+1) + ",Column:" + (j+1), cell.getStringCellValue()); | |||
} | |||
} | |||
} | |||
/** | |||
* Bug 42448: Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69 | |||
*/ | |||
public void test42448(){ | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Cell cell = wb.createSheet().createRow(0).createCell(0); | |||
cell.setCellFormula("SUMPRODUCT(A!C7:A!C67, B8:B68) / B69"); | |||
assertTrue("no errors parsing formula", true); | |||
} | |||
/** | |||
* HSSFRichTextString.length() returns negative for really | |||
* long strings | |||
*/ | |||
public void test46368() { | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Sheet s = wb.createSheet(); | |||
Row r = s.createRow(0); | |||
for(int i=0; i<15; i++) { | |||
int len = 32760 + i; | |||
Cell c = r.createCell(i); | |||
StringBuffer sb = new StringBuffer(); | |||
for(int j=0; j<len; j++) { | |||
sb.append("x"); | |||
} | |||
RichTextString rtr = wb.getCreationHelper().createRichTextString(sb.toString()); | |||
assertEquals(len, rtr.length()); | |||
c.setCellValue(rtr); | |||
} | |||
// Save and reload | |||
wb = getTestDataProvider().writeOutAndReadBack(wb); | |||
s = wb.getSheetAt(0); | |||
r = s.getRow(0); | |||
for(int i=0; i<15; i++) { | |||
int len = 32760 + i; | |||
Cell c = r.getCell(i); | |||
assertEquals(len, c.getRichStringCellValue().length()); | |||
} | |||
} | |||
public void test18800() { | |||
Workbook book = getTestDataProvider().createWorkbook(); | |||
book.createSheet("TEST"); | |||
Sheet sheet = book.cloneSheet(0); | |||
book.setSheetName(1,"CLONE"); | |||
sheet.createRow(0).createCell(0).setCellValue("Test"); | |||
book = getTestDataProvider().writeOutAndReadBack(book); | |||
sheet = book.getSheet("CLONE"); | |||
Row row = sheet.getRow(0); | |||
Cell cell = row.getCell(0); | |||
assertEquals("Test", cell.getRichStringCellValue().getString()); | |||
} | |||
private static void addNewSheetWithCellsA1toD4(Workbook book, int sheet) { | |||
Sheet sht = book .createSheet("s" + sheet); | |||
for (int r=0; r < 4; r++) { | |||
Row row = sht.createRow (r); | |||
for (int c=0; c < 4; c++) { | |||
Cell cel = row.createCell(c); | |||
cel.setCellValue(sheet*100 + r*10 + c); | |||
} | |||
} | |||
} | |||
public void testBug43093() { | |||
Workbook xlw = getTestDataProvider().createWorkbook(); | |||
addNewSheetWithCellsA1toD4(xlw, 1); | |||
addNewSheetWithCellsA1toD4(xlw, 2); | |||
addNewSheetWithCellsA1toD4(xlw, 3); | |||
addNewSheetWithCellsA1toD4(xlw, 4); | |||
Sheet s2 = xlw.getSheet("s2"); | |||
Row s2r3 = s2.getRow(3); | |||
Cell s2E4 = s2r3.createCell(4); | |||
s2E4.setCellFormula("SUM(s3!B2:C3)"); | |||
FormulaEvaluator eva = xlw.getCreationHelper().createFormulaEvaluator(); | |||
double d = eva.evaluate(s2E4).getNumberValue(); | |||
assertEquals(d, (311+312+321+322), 0.0000001); | |||
} | |||
} |
@@ -0,0 +1,204 @@ | |||
/* ==================================================================== | |||
Licensed to the Apache Software Foundation (ASF) under one or more | |||
contributor license agreements. See the NOTICE file distributed with | |||
this work for additional information regarding copyright ownership. | |||
The ASF licenses this file to You under the Apache License, Version 2.0 | |||
(the "License"); you may not use this file except in compliance with | |||
the License. You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
==================================================================== */ | |||
package org.apache.poi.ss.usermodel; | |||
import junit.framework.TestCase; | |||
import junit.framework.AssertionFailedError; | |||
import org.apache.poi.ss.ITestDataProvider; | |||
import org.apache.poi.ss.util.CellRangeAddress; | |||
/** | |||
* @author Yegor Kozlov | |||
*/ | |||
public abstract class BaseTestFont extends TestCase { | |||
protected abstract ITestDataProvider getTestDataProvider(); | |||
public void baseTestDefaultFont(String defaultName, short defaultSize, short defaultColor){ | |||
//get default font and check against default value | |||
Workbook workbook = getTestDataProvider().createWorkbook(); | |||
Font fontFind=workbook.findFont(Font.BOLDWEIGHT_NORMAL, defaultColor, defaultSize, defaultName, false, false, Font.SS_NONE, Font.U_NONE); | |||
assertNotNull(fontFind); | |||
//get default font, then change 2 values and check against different values (height changes) | |||
Font font=workbook.createFont(); | |||
font.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
assertEquals(Font.BOLDWEIGHT_BOLD, font.getBoldweight()); | |||
font.setUnderline(Font.U_DOUBLE); | |||
assertEquals(Font.U_DOUBLE, font.getUnderline()); | |||
font.setFontHeightInPoints((short)15); | |||
assertEquals(15*20, font.getFontHeight()); | |||
assertEquals(15, font.getFontHeightInPoints()); | |||
fontFind=workbook.findFont(Font.BOLDWEIGHT_BOLD, defaultColor, (short)(15*20), defaultName, false, false, Font.SS_NONE, Font.U_DOUBLE); | |||
assertNotNull(fontFind); | |||
} | |||
public void testGetNumberOfFonts(){ | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
int num0 = wb.getNumberOfFonts(); | |||
Font f1=wb.createFont(); | |||
f1.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
short idx1 = f1.getIndex(); | |||
wb.createCellStyle().setFont(f1); | |||
Font f2=wb.createFont(); | |||
f2.setUnderline(Font.U_DOUBLE); | |||
short idx2 = f2.getIndex(); | |||
wb.createCellStyle().setFont(f2); | |||
Font f3=wb.createFont(); | |||
f3.setFontHeightInPoints((short)23); | |||
short idx3 = f3.getIndex(); | |||
wb.createCellStyle().setFont(f3); | |||
assertEquals(num0 + 3,wb.getNumberOfFonts()); | |||
assertEquals(Font.BOLDWEIGHT_BOLD,wb.getFontAt(idx1).getBoldweight()); | |||
assertEquals(Font.U_DOUBLE,wb.getFontAt(idx2).getUnderline()); | |||
assertEquals(23,wb.getFontAt(idx3).getFontHeightInPoints()); | |||
} | |||
/** | |||
* Tests that we can define fonts to a new | |||
* file, save, load, and still see them | |||
* @throws Exception | |||
*/ | |||
public void testCreateSave() { | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
Sheet s1 = wb.createSheet(); | |||
Row r1 = s1.createRow(0); | |||
Cell r1c1 = r1.createCell(0); | |||
r1c1.setCellValue(2.2); | |||
int num0 = wb.getNumberOfFonts(); | |||
Font font=wb.createFont(); | |||
font.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
font.setStrikeout(true); | |||
font.setColor(IndexedColors.YELLOW.getIndex()); | |||
font.setFontName("Courier"); | |||
short font1Idx = font.getIndex(); | |||
wb.createCellStyle().setFont(font); | |||
assertEquals(num0 + 1, wb.getNumberOfFonts()); | |||
CellStyle cellStyleTitle=wb.createCellStyle(); | |||
cellStyleTitle.setFont(font); | |||
r1c1.setCellStyle(cellStyleTitle); | |||
// Save and re-load | |||
wb = getTestDataProvider().writeOutAndReadBack(wb); | |||
s1 = wb.getSheetAt(0); | |||
assertEquals(num0 + 1, wb.getNumberOfFonts()); | |||
short idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex(); | |||
Font fnt = wb.getFontAt(idx); | |||
assertNotNull(fnt); | |||
assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor()); | |||
assertEquals("Courier", fnt.getFontName()); | |||
// Now add an orphaned one | |||
Font font2 = wb.createFont(); | |||
font2.setItalic(true); | |||
font2.setFontHeightInPoints((short)15); | |||
short font2Idx = font2.getIndex(); | |||
wb.createCellStyle().setFont(font2); | |||
assertEquals(num0 + 2, wb.getNumberOfFonts()); | |||
// Save and re-load | |||
wb = getTestDataProvider().writeOutAndReadBack(wb); | |||
s1 = wb.getSheetAt(0); | |||
assertEquals(num0 + 2, wb.getNumberOfFonts()); | |||
assertNotNull(wb.getFontAt(font1Idx)); | |||
assertNotNull(wb.getFontAt(font2Idx)); | |||
assertEquals(15, wb.getFontAt(font2Idx).getFontHeightInPoints()); | |||
assertEquals(true, wb.getFontAt(font2Idx).getItalic()); | |||
} | |||
/** | |||
* Test that fonts get added properly | |||
* | |||
* @see org.apache.poi.hssf.usermodel.TestBugs#test45338() | |||
*/ | |||
public void test45338() { | |||
Workbook wb = getTestDataProvider().createWorkbook(); | |||
int num0 = wb.getNumberOfFonts(); | |||
Sheet s = wb.createSheet(); | |||
s.createRow(0); | |||
s.createRow(1); | |||
s.getRow(0).createCell(0); | |||
s.getRow(1).createCell(0); | |||
//default font | |||
Font f1 = wb.getFontAt((short)0); | |||
assertEquals(Font.BOLDWEIGHT_NORMAL, f1.getBoldweight()); | |||
// Check that asking for the same font | |||
// multiple times gives you the same thing. | |||
// Otherwise, our tests wouldn't work! | |||
assertSame(wb.getFontAt((short)0), wb.getFontAt((short)0)); | |||
// Look for a new font we have | |||
// yet to add | |||
assertNull( | |||
wb.findFont( | |||
Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20), | |||
"Thingy", false, true, (short)2, (byte)2 | |||
) | |||
); | |||
Font nf = wb.createFont(); | |||
short nfIdx = nf.getIndex(); | |||
assertEquals(num0 + 1, wb.getNumberOfFonts()); | |||
assertSame(nf, wb.getFontAt(nfIdx)); | |||
nf.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
nf.setColor((short)123); | |||
nf.setFontHeightInPoints((short)22); | |||
nf.setFontName("Thingy"); | |||
nf.setItalic(false); | |||
nf.setStrikeout(true); | |||
nf.setTypeOffset((short)2); | |||
nf.setUnderline((byte)2); | |||
assertEquals(num0 + 1, wb.getNumberOfFonts()); | |||
assertEquals(nf, wb.getFontAt(nfIdx)); | |||
assertEquals(wb.getFontAt(nfIdx), wb.getFontAt(nfIdx)); | |||
assertTrue(wb.getFontAt((short)0) != wb.getFontAt(nfIdx)); | |||
// Find it now | |||
assertNotNull( | |||
wb.findFont( | |||
Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20), | |||
"Thingy", false, true, (short)2, (byte)2 | |||
) | |||
); | |||
assertSame(nf, | |||
wb.findFont( | |||
Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20), | |||
"Thingy", false, true, (short)2, (byte)2 | |||
) | |||
); | |||
} | |||
} |
@@ -19,10 +19,16 @@ package org.apache.poi.ss.usermodel; | |||
import junit.framework.TestCase; | |||
import 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); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |