12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
-
- package org.apache.poi.xssf.usermodel;
-
- import static org.apache.poi.xssf.XSSFTestDataSamples.openSampleWorkbook;
- import static org.apache.poi.xssf.XSSFTestDataSamples.writeOutAndReadBack;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertFalse;
- import static org.junit.Assert.assertNotNull;
- import static org.junit.Assert.assertNotSame;
- import static org.junit.Assert.assertNull;
- import static org.junit.Assert.assertSame;
- import static org.junit.Assert.assertTrue;
-
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.GregorianCalendar;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
-
- import org.apache.poi.POIXMLException;
- import org.apache.poi.hssf.HSSFTestDataSamples;
- import org.apache.poi.poifs.crypt.CryptoFunctions;
- import org.apache.poi.poifs.crypt.HashAlgorithm;
- import org.apache.poi.ss.SpreadsheetVersion;
- import org.apache.poi.ss.usermodel.AutoFilter;
- import org.apache.poi.ss.usermodel.BaseTestSheet;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.CellCopyPolicy;
- import org.apache.poi.ss.usermodel.FormulaError;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.util.AreaReference;
- import org.apache.poi.ss.util.CellRangeAddress;
- import org.apache.poi.ss.util.CellReference;
- import org.apache.poi.ss.util.CellUtil;
- import org.apache.poi.xssf.XSSFITestDataProvider;
- import org.apache.poi.xssf.XSSFTestDataSamples;
- import org.apache.poi.xssf.model.CalculationChain;
- import org.apache.poi.xssf.model.CommentsTable;
- import org.apache.poi.xssf.model.StylesTable;
- import org.apache.poi.xssf.streaming.SXSSFWorkbook;
- import org.apache.poi.xssf.usermodel.helpers.ColumnHelper;
- import org.junit.Test;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCalcPr;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComments;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetData;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetProtection;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCalcMode;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPane;
-
-
- @SuppressWarnings("resource")
- public final class TestXSSFSheet extends BaseTestSheet {
-
- public TestXSSFSheet() {
- super(XSSFITestDataProvider.instance);
- }
-
- //TODO column styles are not yet supported by XSSF
- @Override
- @Test
- public void defaultColumnStyle() {
- //super.defaultColumnStyle();
- }
-
- @Test
- public void getSetMargin() throws IOException {
- baseTestGetSetMargin(new double[]{0.7, 0.7, 0.75, 0.75, 0.3, 0.3});
- }
-
- @Test
- public void existingHeaderFooter() throws IOException {
- XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("45540_classic_Header.xlsx");
- XSSFOddHeader hdr;
- XSSFOddFooter ftr;
-
- // Sheet 1 has a header with center and right text
- XSSFSheet s1 = wb1.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 = wb1.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 wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
- wb1.close();
-
- hdr = (XSSFOddHeader) wb2.getSheetAt(0).getHeader();
- ftr = (XSSFOddFooter) wb2.getSheetAt(0).getFooter();
-
- assertEquals("", hdr.getLeft());
- assertEquals("testdoc", hdr.getCenter());
- assertEquals("test phrase", hdr.getRight());
-
- assertEquals("", ftr.getLeft());
- assertEquals("", ftr.getCenter());
- assertEquals("", ftr.getRight());
-
- wb2.close();
- }
-
- @Test
- public void getAllHeadersFooters() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet("Sheet 1");
- assertNotNull(sheet.getOddFooter());
- assertNotNull(sheet.getEvenFooter());
- assertNotNull(sheet.getFirstFooter());
- assertNotNull(sheet.getOddHeader());
- assertNotNull(sheet.getEvenHeader());
- assertNotNull(sheet.getFirstHeader());
-
- assertEquals("", sheet.getOddFooter().getLeft());
- sheet.getOddFooter().setLeft("odd footer left");
- assertEquals("odd footer left", sheet.getOddFooter().getLeft());
-
- assertEquals("", sheet.getEvenFooter().getLeft());
- sheet.getEvenFooter().setLeft("even footer left");
- assertEquals("even footer left", sheet.getEvenFooter().getLeft());
-
- assertEquals("", sheet.getFirstFooter().getLeft());
- sheet.getFirstFooter().setLeft("first footer left");
- assertEquals("first footer left", sheet.getFirstFooter().getLeft());
-
- assertEquals("", sheet.getOddHeader().getLeft());
- sheet.getOddHeader().setLeft("odd header left");
- assertEquals("odd header left", sheet.getOddHeader().getLeft());
-
- assertEquals("", sheet.getOddHeader().getRight());
- sheet.getOddHeader().setRight("odd header right");
- assertEquals("odd header right", sheet.getOddHeader().getRight());
-
- assertEquals("", sheet.getOddHeader().getCenter());
- sheet.getOddHeader().setCenter("odd header center");
- assertEquals("odd header center", sheet.getOddHeader().getCenter());
-
- // Defaults are odd
- assertEquals("odd footer left", sheet.getFooter().getLeft());
- assertEquals("odd header center", sheet.getHeader().getCenter());
-
- workbook.close();
- }
-
- @Test
- public void autoSizeColumn() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet("Sheet 1");
- sheet.createRow(0).createCell(13).setCellValue("test");
-
- sheet.autoSizeColumn(13);
-
- ColumnHelper columnHelper = sheet.getColumnHelper();
- CTCol col = columnHelper.getColumn(13, false);
- assertTrue(col.getBestFit());
- workbook.close();
- }
-
-
- @Test
- public void setCellComment() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet();
-
- XSSFDrawing dg = sheet.createDrawingPatriarch();
- XSSFComment comment = dg.createCellComment(new XSSFClientAnchor());
-
- Cell cell = sheet.createRow(0).createCell(0);
- CommentsTable comments = sheet.getCommentsTable(false);
- CTComments ctComments = comments.getCTComments();
-
- cell.setCellComment(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()));
- workbook.close();
- }
-
- @Test
- public void getActiveCell() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet();
- sheet.setActiveCell("R5");
-
- assertEquals("R5", sheet.getActiveCell());
- workbook.close();
- }
-
- @Test
- public void createFreezePane_XSSF() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet();
- CTWorksheet ctWorksheet = sheet.getCTWorksheet();
-
- sheet.createFreezePane(2, 4);
- assertEquals(2.0, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit(), 0.0);
- assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
- sheet.createFreezePane(3, 6, 10, 10);
- assertEquals(3.0, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit(), 0.0);
- // assertEquals(10, sheet.getTopRow());
- // assertEquals(10, sheet.getLeftCol());
- sheet.createSplitPane(4, 8, 12, 12, 1);
- assertEquals(8.0, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getYSplit(), 0.0);
- assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane());
-
- workbook.close();
- }
-
- @Test
- public void removeMergedRegion_lowlevel() throws IOException {
- 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");
- CellRangeAddress region_4 = CellRangeAddress.valueOf("G7:H8");
- 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());
- assertNull(" CTMergeCells should be deleted after removing the last merged " +
- "region on the sheet.", sheet.getCTWorksheet().getMergeCells());
- sheet.addMergedRegion(region_1);
- sheet.addMergedRegion(region_2);
- sheet.addMergedRegion(region_3);
- sheet.addMergedRegion(region_4);
- // test invalid indexes OOBE
- Set<Integer> rmIdx = new HashSet<Integer>(Arrays.asList(5,6));
- sheet.removeMergedRegions(rmIdx);
- rmIdx = new HashSet<Integer>(Arrays.asList(1,3));
- sheet.removeMergedRegions(rmIdx);
- assertEquals("A1:B2", ctWorksheet.getMergeCells().getMergeCellArray(0).getRef());
- assertEquals("E5:F6", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef());
- workbook.close();
- }
-
- @Test
- public void setDefaultColumnStyle() throws IOException {
- 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, null);
- assertEquals(1, cellStyle.getFontIndex());
-
- sheet.setDefaultColumnStyle(3, cellStyle);
- assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle());
- workbook.close();
- }
-
-
- @Test
- @SuppressWarnings("deprecation")
- public void groupUngroupColumn() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet();
-
- //one level
- sheet.groupColumn(2, 7);
- sheet.groupColumn(10, 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());
- assertEquals(0, sheet.getColumnOutlineLevel(0));
-
- //two level
- sheet.groupColumn(1, 2);
- cols = sheet.getCTWorksheet().getColsArray(0);
- assertEquals(4, cols.sizeOfColArray());
- colArray = cols.getColArray();
- assertEquals(2, colArray[1].getOutlineLevel());
-
- //three level
- sheet.groupColumn(6, 8);
- sheet.groupColumn(2, 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(8, 10);
- colArray = cols.getColArray();
- //assertEquals(3, colArray[1].getOutlineLevel());
-
- sheet.ungroupColumn(4, 6);
- sheet.ungroupColumn(2, 2);
- colArray = cols.getColArray();
- assertEquals(4, colArray.length);
- assertEquals(2, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol());
-
- workbook.close();
- }
-
- @Test
- public void groupUngroupRow() throws IOException {
- 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());
-
- workbook.close();
- }
-
- @Test(expected=IllegalArgumentException.class)
- public void setZoom() throws IOException {
- XSSFWorkbook workBook = new XSSFWorkbook();
- XSSFSheet sheet1 = workBook.createSheet("new sheet");
- sheet1.setZoom(3, 4); // 75 percent magnification
- long zoom = sheet1.getCTWorksheet().getSheetViews().getSheetViewArray(0).getZoomScale();
- assertEquals(zoom, 75);
-
- sheet1.setZoom(200);
- zoom = sheet1.getCTWorksheet().getSheetViews().getSheetViewArray(0).getZoomScale();
- assertEquals(zoom, 200);
-
- // Valid scale values range from 10 to 400
- try {
- sheet1.setZoom(500);
- } finally {
- workBook.close();
- }
- }
-
- /**
- * TODO - while this is internally consistent, I'm not
- * completely clear in all cases what it's supposed to
- * be doing... Someone who understands the goals a little
- * better should really review this!
- */
- @Test
- public void setColumnGroupCollapsed() throws IOException {
- Workbook wb = new XSSFWorkbook();
- XSSFSheet sheet1 =(XSSFSheet) wb.createSheet();
-
- CTCols cols=sheet1.getCTWorksheet().getColsArray(0);
- assertEquals(0,cols.sizeOfColArray());
-
- sheet1.groupColumn( (short)4, (short)7 );
- sheet1.groupColumn( (short)9, (short)12 );
-
- assertEquals(2,cols.sizeOfColArray());
-
- assertEquals(false,cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(true, cols.getColArray(1).isSetCollapsed());
- assertEquals(10, cols.getColArray(1).getMin()); // 1 based
- assertEquals(13, cols.getColArray(1).getMax()); // 1 based
-
- sheet1.groupColumn( (short)10, (short)11 );
- assertEquals(4,cols.sizeOfColArray());
-
- assertEquals(false,cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(true, cols.getColArray(1).isSetCollapsed());
- assertEquals(10, cols.getColArray(1).getMin()); // 1 based
- assertEquals(10, cols.getColArray(1).getMax()); // 1 based
- assertEquals(false,cols.getColArray(2).isSetHidden());
- assertEquals(true, cols.getColArray(2).isSetCollapsed());
- assertEquals(11, cols.getColArray(2).getMin()); // 1 based
- assertEquals(12, cols.getColArray(2).getMax()); // 1 based
- assertEquals(false,cols.getColArray(3).isSetHidden());
- assertEquals(true, cols.getColArray(3).isSetCollapsed());
- assertEquals(13, cols.getColArray(3).getMin()); // 1 based
- assertEquals(13, cols.getColArray(3).getMax()); // 1 based
-
- // collapse columns - 1
- sheet1.setColumnGroupCollapsed( (short)5, true );
- assertEquals(5,cols.sizeOfColArray());
-
- assertEquals(true, cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(true, cols.getColArray(1).isSetCollapsed());
- assertEquals(9, cols.getColArray(1).getMin()); // 1 based
- assertEquals(9, cols.getColArray(1).getMax()); // 1 based
- assertEquals(false,cols.getColArray(2).isSetHidden());
- assertEquals(true, cols.getColArray(2).isSetCollapsed());
- assertEquals(10, cols.getColArray(2).getMin()); // 1 based
- assertEquals(10, cols.getColArray(2).getMax()); // 1 based
- assertEquals(false,cols.getColArray(3).isSetHidden());
- assertEquals(true, cols.getColArray(3).isSetCollapsed());
- assertEquals(11, cols.getColArray(3).getMin()); // 1 based
- assertEquals(12, cols.getColArray(3).getMax()); // 1 based
- assertEquals(false,cols.getColArray(4).isSetHidden());
- assertEquals(true, cols.getColArray(4).isSetCollapsed());
- assertEquals(13, cols.getColArray(4).getMin()); // 1 based
- assertEquals(13, cols.getColArray(4).getMax()); // 1 based
-
-
- // expand columns - 1
- sheet1.setColumnGroupCollapsed( (short)5, false );
-
- assertEquals(false,cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(false,cols.getColArray(1).isSetCollapsed());
- assertEquals(9, cols.getColArray(1).getMin()); // 1 based
- assertEquals(9, cols.getColArray(1).getMax()); // 1 based
- assertEquals(false,cols.getColArray(2).isSetHidden());
- assertEquals(true, cols.getColArray(2).isSetCollapsed());
- assertEquals(10, cols.getColArray(2).getMin()); // 1 based
- assertEquals(10, cols.getColArray(2).getMax()); // 1 based
- assertEquals(false,cols.getColArray(3).isSetHidden());
- assertEquals(true, cols.getColArray(3).isSetCollapsed());
- assertEquals(11, cols.getColArray(3).getMin()); // 1 based
- assertEquals(12, cols.getColArray(3).getMax()); // 1 based
- assertEquals(false,cols.getColArray(4).isSetHidden());
- assertEquals(true, cols.getColArray(4).isSetCollapsed());
- assertEquals(13, cols.getColArray(4).getMin()); // 1 based
- assertEquals(13, cols.getColArray(4).getMax()); // 1 based
-
-
- //collapse - 2
- sheet1.setColumnGroupCollapsed( (short)9, true );
- assertEquals(6,cols.sizeOfColArray());
- assertEquals(false,cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(false,cols.getColArray(1).isSetCollapsed());
- assertEquals(9, cols.getColArray(1).getMin()); // 1 based
- assertEquals(9, cols.getColArray(1).getMax()); // 1 based
- assertEquals(true, cols.getColArray(2).isSetHidden());
- assertEquals(true, cols.getColArray(2).isSetCollapsed());
- assertEquals(10, cols.getColArray(2).getMin()); // 1 based
- assertEquals(10, cols.getColArray(2).getMax()); // 1 based
- assertEquals(true, cols.getColArray(3).isSetHidden());
- assertEquals(true, cols.getColArray(3).isSetCollapsed());
- assertEquals(11, cols.getColArray(3).getMin()); // 1 based
- assertEquals(12, cols.getColArray(3).getMax()); // 1 based
- assertEquals(true, cols.getColArray(4).isSetHidden());
- assertEquals(true, cols.getColArray(4).isSetCollapsed());
- assertEquals(13, cols.getColArray(4).getMin()); // 1 based
- assertEquals(13, cols.getColArray(4).getMax()); // 1 based
- assertEquals(false,cols.getColArray(5).isSetHidden());
- assertEquals(true, cols.getColArray(5).isSetCollapsed());
- assertEquals(14, cols.getColArray(5).getMin()); // 1 based
- assertEquals(14, cols.getColArray(5).getMax()); // 1 based
-
-
- //expand - 2
- sheet1.setColumnGroupCollapsed( (short)9, false );
- assertEquals(6,cols.sizeOfColArray());
- assertEquals(14,cols.getColArray(5).getMin());
-
- //outline level 2: the line under ==> collapsed==True
- assertEquals(2,cols.getColArray(3).getOutlineLevel());
- assertEquals(true,cols.getColArray(4).isSetCollapsed());
-
- assertEquals(false,cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(false,cols.getColArray(1).isSetCollapsed());
- assertEquals(9, cols.getColArray(1).getMin()); // 1 based
- assertEquals(9, cols.getColArray(1).getMax()); // 1 based
- assertEquals(false,cols.getColArray(2).isSetHidden());
- assertEquals(true, cols.getColArray(2).isSetCollapsed());
- assertEquals(10, cols.getColArray(2).getMin()); // 1 based
- assertEquals(10, cols.getColArray(2).getMax()); // 1 based
- assertEquals(true, cols.getColArray(3).isSetHidden());
- assertEquals(true, cols.getColArray(3).isSetCollapsed());
- assertEquals(11, cols.getColArray(3).getMin()); // 1 based
- assertEquals(12, cols.getColArray(3).getMax()); // 1 based
- assertEquals(false,cols.getColArray(4).isSetHidden());
- assertEquals(true, cols.getColArray(4).isSetCollapsed());
- assertEquals(13, cols.getColArray(4).getMin()); // 1 based
- assertEquals(13, cols.getColArray(4).getMax()); // 1 based
- assertEquals(false,cols.getColArray(5).isSetHidden());
- assertEquals(false,cols.getColArray(5).isSetCollapsed());
- assertEquals(14, cols.getColArray(5).getMin()); // 1 based
- assertEquals(14, cols.getColArray(5).getMax()); // 1 based
-
- //DOCUMENTARE MEGLIO IL DISCORSO DEL LIVELLO
- //collapse - 3
- sheet1.setColumnGroupCollapsed( (short)10, true );
- assertEquals(6,cols.sizeOfColArray());
- assertEquals(false,cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(false,cols.getColArray(1).isSetCollapsed());
- assertEquals(9, cols.getColArray(1).getMin()); // 1 based
- assertEquals(9, cols.getColArray(1).getMax()); // 1 based
- assertEquals(false,cols.getColArray(2).isSetHidden());
- assertEquals(true, cols.getColArray(2).isSetCollapsed());
- assertEquals(10, cols.getColArray(2).getMin()); // 1 based
- assertEquals(10, cols.getColArray(2).getMax()); // 1 based
- assertEquals(true, cols.getColArray(3).isSetHidden());
- assertEquals(true, cols.getColArray(3).isSetCollapsed());
- assertEquals(11, cols.getColArray(3).getMin()); // 1 based
- assertEquals(12, cols.getColArray(3).getMax()); // 1 based
- assertEquals(false,cols.getColArray(4).isSetHidden());
- assertEquals(true, cols.getColArray(4).isSetCollapsed());
- assertEquals(13, cols.getColArray(4).getMin()); // 1 based
- assertEquals(13, cols.getColArray(4).getMax()); // 1 based
- assertEquals(false,cols.getColArray(5).isSetHidden());
- assertEquals(false,cols.getColArray(5).isSetCollapsed());
- assertEquals(14, cols.getColArray(5).getMin()); // 1 based
- assertEquals(14, cols.getColArray(5).getMax()); // 1 based
-
-
- //expand - 3
- sheet1.setColumnGroupCollapsed( (short)10, false );
- assertEquals(6,cols.sizeOfColArray());
- assertEquals(false,cols.getColArray(0).getHidden());
- assertEquals(false,cols.getColArray(5).getHidden());
- assertEquals(false,cols.getColArray(4).isSetCollapsed());
-
- // write out and give back
- // Save and re-load
- wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet1 = (XSSFSheet)wb.getSheetAt(0);
- assertEquals(6,cols.sizeOfColArray());
-
- assertEquals(false,cols.getColArray(0).isSetHidden());
- assertEquals(true, cols.getColArray(0).isSetCollapsed());
- assertEquals(5, cols.getColArray(0).getMin()); // 1 based
- assertEquals(8, cols.getColArray(0).getMax()); // 1 based
- assertEquals(false,cols.getColArray(1).isSetHidden());
- assertEquals(false,cols.getColArray(1).isSetCollapsed());
- assertEquals(9, cols.getColArray(1).getMin()); // 1 based
- assertEquals(9, cols.getColArray(1).getMax()); // 1 based
- assertEquals(false,cols.getColArray(2).isSetHidden());
- assertEquals(true, cols.getColArray(2).isSetCollapsed());
- assertEquals(10, cols.getColArray(2).getMin()); // 1 based
- assertEquals(10, cols.getColArray(2).getMax()); // 1 based
- assertEquals(false,cols.getColArray(3).isSetHidden());
- assertEquals(true, cols.getColArray(3).isSetCollapsed());
- assertEquals(11, cols.getColArray(3).getMin()); // 1 based
- assertEquals(12, cols.getColArray(3).getMax()); // 1 based
- assertEquals(false,cols.getColArray(4).isSetHidden());
- assertEquals(false,cols.getColArray(4).isSetCollapsed());
- assertEquals(13, cols.getColArray(4).getMin()); // 1 based
- assertEquals(13, cols.getColArray(4).getMax()); // 1 based
- assertEquals(false,cols.getColArray(5).isSetHidden());
- assertEquals(false,cols.getColArray(5).isSetCollapsed());
- assertEquals(14, cols.getColArray(5).getMin()); // 1 based
- assertEquals(14, cols.getColArray(5).getMax()); // 1 based
-
- wb.close();
- }
-
- /**
- * TODO - while this is internally consistent, I'm not
- * completely clear in all cases what it's supposed to
- * be doing... Someone who understands the goals a little
- * better should really review this!
- */
- @Test
- public void setRowGroupCollapsed() throws IOException {
- Workbook wb = new XSSFWorkbook();
- XSSFSheet sheet1 = (XSSFSheet)wb.createSheet();
-
- sheet1.groupRow( 5, 14 );
- sheet1.groupRow( 7, 14 );
- sheet1.groupRow( 16, 19 );
-
- assertEquals(14,sheet1.getPhysicalNumberOfRows());
- assertFalse(sheet1.getRow(6).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(6).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(7).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(7).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(9).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(9).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(14).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(14).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(16).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(16).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(18).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(18).getCTRow().isSetHidden());
-
- //collapsed
- sheet1.setRowGroupCollapsed( 7, true );
-
- assertFalse(sheet1.getRow(6).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(6).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(7).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(7).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(9).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(9).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(14).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(14).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(16).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(16).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(18).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(18).getCTRow().isSetHidden());
-
- //expanded
- sheet1.setRowGroupCollapsed( 7, false );
-
- assertFalse(sheet1.getRow(6).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(6).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(7).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(7).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(9).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(9).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(14).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(14).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(16).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(16).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(18).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(18).getCTRow().isSetHidden());
-
-
- // Save and re-load
- wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet1 = (XSSFSheet)wb.getSheetAt(0);
-
- assertFalse(sheet1.getRow(6).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(6).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(7).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(7).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(9).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(9).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(14).getCTRow().isSetCollapsed());
- assertTrue (sheet1.getRow(14).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(16).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(16).getCTRow().isSetHidden());
- assertFalse(sheet1.getRow(18).getCTRow().isSetCollapsed());
- assertFalse(sheet1.getRow(18).getCTRow().isSetHidden());
-
- wb.close();
- }
-
- /**
- * Get / Set column width and check the actual values of the underlying XML beans
- */
- @Test
- public void columnWidth_lowlevel() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet("Sheet 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
- XSSFSheet xs = sheet;
- CTWorksheet cts = xs.getCTWorksheet();
-
- assertEquals(1, cts.sizeOfColsArray());
- CTCols cols = cts.getColsArray(0);
- assertEquals(1, cols.sizeOfColArray());
- CTCol col = cols.getColArray(0);
-
- // XML is 1 based, POI is 0 based
- assertEquals(2, col.getMin());
- assertEquals(2, col.getMax());
- assertEquals(22.0, col.getWidth(), 0.0);
- assertTrue(col.getCustomWidth());
-
- // Now set another
- sheet.setColumnWidth(3, 33 * 256);
-
- assertEquals(1, cts.sizeOfColsArray());
- cols = cts.getColsArray(0);
- assertEquals(2, cols.sizeOfColArray());
-
- col = cols.getColArray(0);
- assertEquals(2, col.getMin()); // POI 1
- assertEquals(2, col.getMax());
- assertEquals(22.0, col.getWidth(), 0.0);
- assertTrue(col.getCustomWidth());
-
- col = cols.getColArray(1);
- assertEquals(4, col.getMin()); // POI 3
- assertEquals(4, col.getMax());
- assertEquals(33.0, col.getWidth(), 0.0);
- assertTrue(col.getCustomWidth());
-
- workbook.close();
- }
-
- /**
- * Setting width of a column included in a column span
- */
- @Test
- public void bug47862() throws IOException {
- XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("47862.xlsx");
- XSSFSheet sheet = wb.getSheetAt(0);
- CTCols cols = sheet.getCTWorksheet().getColsArray(0);
- //<cols>
- // <col min="1" max="5" width="15.77734375" customWidth="1"/>
- //</cols>
-
- //a span of columns [1,5]
- assertEquals(1, cols.sizeOfColArray());
- CTCol col = cols.getColArray(0);
- assertEquals(1, col.getMin());
- assertEquals(5, col.getMax());
- double swidth = 15.77734375; //width of columns in the span
- assertEquals(swidth, col.getWidth(), 0.0);
-
- for (int i = 0; i < 5; i++) {
- assertEquals((int)(swidth*256), sheet.getColumnWidth(i));
- }
-
- int[] cw = new int[]{10, 15, 20, 25, 30};
- for (int i = 0; i < 5; i++) {
- sheet.setColumnWidth(i, cw[i]*256);
- }
-
- //the check below failed prior to fix of Bug #47862
- ColumnHelper.sortColumns(cols);
- //<cols>
- // <col min="1" max="1" customWidth="true" width="10.0" />
- // <col min="2" max="2" customWidth="true" width="15.0" />
- // <col min="3" max="3" customWidth="true" width="20.0" />
- // <col min="4" max="4" customWidth="true" width="25.0" />
- // <col min="5" max="5" customWidth="true" width="30.0" />
- //</cols>
-
- //now the span is splitted into 5 individual columns
- assertEquals(5, cols.sizeOfColArray());
- for (int i = 0; i < 5; i++) {
- assertEquals(cw[i]*256, sheet.getColumnWidth(i));
- assertEquals(cw[i], cols.getColArray(i).getWidth(), 0.0);
- }
-
- //serialize and check again
- wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- cols = sheet.getCTWorksheet().getColsArray(0);
- assertEquals(5, cols.sizeOfColArray());
- for (int i = 0; i < 5; i++) {
- assertEquals(cw[i]*256, sheet.getColumnWidth(i));
- assertEquals(cw[i], cols.getColArray(i).getWidth(), 0.0);
- }
-
- wb.close();
- }
-
- /**
- * Hiding a column included in a column span
- */
- @Test
- public void bug47804() throws IOException {
- XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("47804.xlsx");
- XSSFSheet sheet = wb.getSheetAt(0);
- CTCols cols = sheet.getCTWorksheet().getColsArray(0);
- assertEquals(2, cols.sizeOfColArray());
- CTCol col;
- //<cols>
- // <col min="2" max="4" width="12" customWidth="1"/>
- // <col min="7" max="7" width="10.85546875" customWidth="1"/>
- //</cols>
-
- //a span of columns [2,4]
- col = cols.getColArray(0);
- assertEquals(2, col.getMin());
- assertEquals(4, col.getMax());
- //individual column
- col = cols.getColArray(1);
- assertEquals(7, col.getMin());
- assertEquals(7, col.getMax());
-
- sheet.setColumnHidden(2, true); // Column C
- sheet.setColumnHidden(6, true); // Column G
-
- assertTrue(sheet.isColumnHidden(2));
- assertTrue(sheet.isColumnHidden(6));
-
- //other columns but C and G are not hidden
- assertFalse(sheet.isColumnHidden(1));
- assertFalse(sheet.isColumnHidden(3));
- assertFalse(sheet.isColumnHidden(4));
- assertFalse(sheet.isColumnHidden(5));
-
- //the check below failed prior to fix of Bug #47804
- ColumnHelper.sortColumns(cols);
- //the span is now splitted into three parts
- //<cols>
- // <col min="2" max="2" customWidth="true" width="12.0" />
- // <col min="3" max="3" customWidth="true" width="12.0" hidden="true"/>
- // <col min="4" max="4" customWidth="true" width="12.0"/>
- // <col min="7" max="7" customWidth="true" width="10.85546875" hidden="true"/>
- //</cols>
-
- assertEquals(4, cols.sizeOfColArray());
- col = cols.getColArray(0);
- assertEquals(2, col.getMin());
- assertEquals(2, col.getMax());
- col = cols.getColArray(1);
- assertEquals(3, col.getMin());
- assertEquals(3, col.getMax());
- col = cols.getColArray(2);
- assertEquals(4, col.getMin());
- assertEquals(4, col.getMax());
- col = cols.getColArray(3);
- assertEquals(7, col.getMin());
- assertEquals(7, col.getMax());
-
- //serialize and check again
- wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- assertTrue(sheet.isColumnHidden(2));
- assertTrue(sheet.isColumnHidden(6));
- assertFalse(sheet.isColumnHidden(1));
- assertFalse(sheet.isColumnHidden(3));
- assertFalse(sheet.isColumnHidden(4));
- assertFalse(sheet.isColumnHidden(5));
-
- wb.close();
- }
-
- @Test
- public void commentsTable() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet1 = workbook.createSheet();
- CommentsTable comment1 = sheet1.getCommentsTable(false);
- assertNull(comment1);
-
- comment1 = sheet1.getCommentsTable(true);
- assertNotNull(comment1);
- assertEquals("/xl/comments1.xml", comment1.getPackageRelationship().getTargetURI().toString());
-
- assertSame(comment1, sheet1.getCommentsTable(true));
-
- //second sheet
- XSSFSheet sheet2 = workbook.createSheet();
- CommentsTable comment2 = sheet2.getCommentsTable(false);
- assertNull(comment2);
-
- comment2 = sheet2.getCommentsTable(true);
- assertNotNull(comment2);
-
- assertSame(comment2, sheet2.getCommentsTable(true));
- assertEquals("/xl/comments2.xml", comment2.getPackageRelationship().getTargetURI().toString());
-
- //comment1 and comment2 are different objects
- assertNotSame(comment1, comment2);
-
- //now test against a workbook containing cell comments
- workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx");
- sheet1 = workbook.getSheetAt(0);
- comment1 = sheet1.getCommentsTable(true);
- assertNotNull(comment1);
- assertEquals("/xl/comments1.xml", comment1.getPackageRelationship().getTargetURI().toString());
- assertSame(comment1, sheet1.getCommentsTable(true));
-
- workbook.close();
- }
-
- /**
- * Rows and cells can be created in random order,
- * but CTRows are kept in ascending order
- */
- @Override
- @Test
- @SuppressWarnings("deprecation")
- public void createRow() throws IOException {
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = workbook.createSheet();
- CTWorksheet wsh = sheet.getCTWorksheet();
- CTSheetData sheetData = wsh.getSheetData();
- assertEquals(0, sheetData.sizeOfRowArray());
-
- XSSFRow row1 = sheet.createRow(2);
- row1.createCell(2);
- row1.createCell(1);
-
- XSSFRow row2 = sheet.createRow(1);
- row2.createCell(2);
- row2.createCell(1);
- row2.createCell(0);
-
- XSSFRow row3 = sheet.createRow(0);
- row3.createCell(3);
- row3.createCell(0);
- row3.createCell(2);
- row3.createCell(5);
-
-
- CTRow[] xrow = sheetData.getRowArray();
- assertEquals(3, xrow.length);
-
- //rows are sorted: {0, 1, 2}
- assertEquals(4, xrow[0].sizeOfCArray());
- assertEquals(1, xrow[0].getR());
- assertTrue(xrow[0].equals(row3.getCTRow()));
-
- assertEquals(3, xrow[1].sizeOfCArray());
- assertEquals(2, xrow[1].getR());
- assertTrue(xrow[1].equals(row2.getCTRow()));
-
- assertEquals(2, xrow[2].sizeOfCArray());
- assertEquals(3, xrow[2].getR());
- assertTrue(xrow[2].equals(row1.getCTRow()));
-
- CTCell[] xcell = xrow[0].getCArray();
- assertEquals("D1", xcell[0].getR());
- assertEquals("A1", xcell[1].getR());
- assertEquals("C1", xcell[2].getR());
- assertEquals("F1", xcell[3].getR());
-
- //re-creating a row does NOT add extra data to the parent
- row2 = sheet.createRow(1);
- assertEquals(3, sheetData.sizeOfRowArray());
- //existing cells are invalidated
- assertEquals(0, sheetData.getRowArray(1).sizeOfCArray());
- assertEquals(0, row2.getPhysicalNumberOfCells());
-
- workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
- sheet = workbook.getSheetAt(0);
- wsh = sheet.getCTWorksheet();
- xrow = sheetData.getRowArray();
- assertEquals(3, xrow.length);
-
- //rows are sorted: {0, 1, 2}
- assertEquals(4, xrow[0].sizeOfCArray());
- assertEquals(1, xrow[0].getR());
- //cells are now sorted
- xcell = xrow[0].getCArray();
- assertEquals("A1", xcell[0].getR());
- assertEquals("C1", xcell[1].getR());
- assertEquals("D1", xcell[2].getR());
- assertEquals("F1", xcell[3].getR());
-
-
- assertEquals(0, xrow[1].sizeOfCArray());
- assertEquals(2, xrow[1].getR());
-
- assertEquals(2, xrow[2].sizeOfCArray());
- assertEquals(3, xrow[2].getR());
-
- workbook.close();
- }
-
- @Test(expected=IllegalArgumentException.class)
- public void createRowAfterLastRow() throws IOException {
- createRowAfterLastRow(SpreadsheetVersion.EXCEL2007);
- }
-
- @Test
- public void setAutoFilter() throws IOException {
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet sheet = wb.createSheet("new sheet");
- sheet.setAutoFilter(CellRangeAddress.valueOf("A1:D100"));
-
- assertEquals("A1:D100", sheet.getCTWorksheet().getAutoFilter().getRef());
-
- // auto-filter must be registered in workboook.xml, see Bugzilla 50315
- XSSFName nm = wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, 0);
- assertNotNull(nm);
-
- assertEquals(0, nm.getCTName().getLocalSheetId());
- assertEquals(true, nm.getCTName().getHidden());
- assertEquals("_xlnm._FilterDatabase", nm.getCTName().getName());
- assertEquals("'new sheet'!$A$1:$D$100", nm.getCTName().getStringValue());
-
- wb.close();
- }
-
- @Test
- public void protectSheet_lowlevel() throws IOException {
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet sheet = wb.createSheet();
- CTSheetProtection pr = sheet.getCTWorksheet().getSheetProtection();
- assertNull("CTSheetProtection should be null by default", pr);
- String password = "Test";
- sheet.protectSheet(password);
- pr = sheet.getCTWorksheet().getSheetProtection();
- assertNotNull("CTSheetProtection should be not null", pr);
- assertTrue("sheet protection should be on", pr.isSetSheet());
- assertTrue("object protection should be on", pr.isSetObjects());
- assertTrue("scenario protection should be on", pr.isSetScenarios());
- int hashVal = CryptoFunctions.createXorVerifier1(password);
- int actualVal = Integer.parseInt(pr.xgetPassword().getStringValue(),16);
- assertEquals("well known value for top secret hash should match", hashVal, actualVal);
-
- sheet.protectSheet(null);
- assertNull("protectSheet(null) should unset CTSheetProtection", sheet.getCTWorksheet().getSheetProtection());
-
- wb.close();
- }
-
- @Test
- public void protectSheet_lowlevel_2013() throws IOException {
- String password = "test";
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet xs = wb.createSheet();
- xs.setSheetPassword(password, HashAlgorithm.sha384);
- wb = writeOutAndReadBack(wb);
- assertTrue(wb.getSheetAt(0).validateSheetPassword(password));
-
- wb = openSampleWorkbook("workbookProtection-sheet_password-2013.xlsx");
- assertTrue(wb.getSheetAt(0).validateSheetPassword("pwd"));
-
- wb.close();
- }
-
-
- @Test
- public void bug49966() throws IOException {
- XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("49966.xlsx");
- CalculationChain calcChain = wb1.getCalculationChain();
- assertNotNull(wb1.getCalculationChain());
- assertEquals(3, calcChain.getCTCalcChain().sizeOfCArray());
-
- XSSFSheet sheet = wb1.getSheetAt(0);
- XSSFRow row = sheet.getRow(0);
-
- sheet.removeRow(row);
- assertEquals("XSSFSheet#removeRow did not clear calcChain entries",
- 0, calcChain.getCTCalcChain().sizeOfCArray());
-
- //calcChain should be gone
- XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
- wb1.close();
- assertNull(wb2.getCalculationChain());
- wb2.close();
- }
-
- /**
- * See bug #50829
- */
- @Test
- public void tables() throws IOException {
- XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithTable.xlsx");
- assertEquals(3, wb.getNumberOfSheets());
-
- // Check the table sheet
- XSSFSheet s1 = wb.getSheetAt(0);
- assertEquals("a", s1.getRow(0).getCell(0).getRichStringCellValue().toString());
- assertEquals(1.0, s1.getRow(1).getCell(0).getNumericCellValue(), 0);
-
- List<XSSFTable> tables = s1.getTables();
- assertNotNull(tables);
- assertEquals(1, tables.size());
-
- XSSFTable table = tables.get(0);
- assertEquals("Tabella1", table.getName());
- assertEquals("Tabella1", table.getDisplayName());
-
- // And the others
- XSSFSheet s2 = wb.getSheetAt(1);
- assertEquals(0, s2.getTables().size());
- XSSFSheet s3 = wb.getSheetAt(2);
- assertEquals(0, s3.getTables().size());
- wb.close();
- }
-
- /**
- * Test to trigger OOXML-LITE generating to include org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetCalcPr
- */
- @Test
- public void setForceFormulaRecalculation() throws IOException {
- XSSFWorkbook wb1 = new XSSFWorkbook();
- XSSFSheet sheet = wb1.createSheet("Sheet 1");
-
- assertFalse(sheet.getForceFormulaRecalculation());
-
- // Set
- sheet.setForceFormulaRecalculation(true);
- assertEquals(true, sheet.getForceFormulaRecalculation());
-
- // calcMode="manual" is unset when forceFormulaRecalculation=true
- CTCalcPr calcPr = wb1.getCTWorkbook().addNewCalcPr();
- calcPr.setCalcMode(STCalcMode.MANUAL);
- sheet.setForceFormulaRecalculation(true);
- assertEquals(STCalcMode.AUTO, calcPr.getCalcMode());
-
- // Check
- sheet.setForceFormulaRecalculation(false);
- assertEquals(false, sheet.getForceFormulaRecalculation());
-
-
- // Save, re-load, and re-check
- XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
- wb1.close();
- sheet = wb2.getSheet("Sheet 1");
- assertEquals(false, sheet.getForceFormulaRecalculation());
- wb2.close();
- }
-
- @Test
- public void bug54607() throws IOException {
- // run with the file provided in the Bug-Report
- runGetTopRow("54607.xlsx", true, 1, 0, 0);
- runGetLeftCol("54607.xlsx", true, 0, 0, 0);
-
- // run with some other flie to see
- runGetTopRow("54436.xlsx", true, 0);
- runGetLeftCol("54436.xlsx", true, 0);
- runGetTopRow("TwoSheetsNoneHidden.xlsx", true, 0, 0);
- runGetLeftCol("TwoSheetsNoneHidden.xlsx", true, 0, 0);
- runGetTopRow("TwoSheetsNoneHidden.xls", false, 0, 0);
- runGetLeftCol("TwoSheetsNoneHidden.xls", false, 0, 0);
- }
-
- private void runGetTopRow(String file, boolean isXSSF, int... topRows) throws IOException {
- final Workbook wb;
- if(isXSSF) {
- wb = XSSFTestDataSamples.openSampleWorkbook(file);
- } else {
- wb = HSSFTestDataSamples.openSampleWorkbook(file);
- }
- for (int si = 0; si < wb.getNumberOfSheets(); si++) {
- Sheet sh = wb.getSheetAt(si);
- assertNotNull(sh.getSheetName());
- assertEquals("Did not match for sheet " + si, topRows[si], sh.getTopRow());
- }
-
- // for XSSF also test with SXSSF
- if(isXSSF) {
- Workbook swb = new SXSSFWorkbook((XSSFWorkbook) wb);
- try {
- for (int si = 0; si < swb.getNumberOfSheets(); si++) {
- Sheet sh = swb.getSheetAt(si);
- assertNotNull(sh.getSheetName());
- assertEquals("Did not match for sheet " + si, topRows[si], sh.getTopRow());
- }
- } finally {
- swb.close();
- }
- }
- }
-
- private void runGetLeftCol(String file, boolean isXSSF, int... topRows) throws IOException {
- final Workbook wb;
- if(isXSSF) {
- wb = XSSFTestDataSamples.openSampleWorkbook(file);
- } else {
- wb = HSSFTestDataSamples.openSampleWorkbook(file);
- }
- for (int si = 0; si < wb.getNumberOfSheets(); si++) {
- Sheet sh = wb.getSheetAt(si);
- assertNotNull(sh.getSheetName());
- assertEquals("Did not match for sheet " + si, topRows[si], sh.getLeftCol());
- }
-
- // for XSSF also test with SXSSF
- if(isXSSF) {
- Workbook swb = new SXSSFWorkbook((XSSFWorkbook) wb);
- for (int si = 0; si < swb.getNumberOfSheets(); si++) {
- Sheet sh = swb.getSheetAt(si);
- assertNotNull(sh.getSheetName());
- assertEquals("Did not match for sheet " + si, topRows[si], sh.getLeftCol());
- }
- swb.close();
- }
- }
-
- @Test
- public void bug55745() throws Exception {
- XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55745.xlsx");
- XSSFSheet sheet = wb.getSheetAt(0);
- List<XSSFTable> tables = sheet.getTables();
- /*System.out.println(tables.size());
-
- for(XSSFTable table : tables) {
- System.out.println("XPath: " + table.getCommonXpath());
- System.out.println("Name: " + table.getName());
- System.out.println("Mapped Cols: " + table.getNumerOfMappedColumns());
- System.out.println("Rowcount: " + table.getRowCount());
- System.out.println("End Cell: " + table.getEndCellReference());
- System.out.println("Start Cell: " + table.getStartCellReference());
- }*/
- assertEquals("Sheet should contain 8 tables", 8, tables.size());
- assertNotNull("Sheet should contain a comments table", sheet.getCommentsTable(false));
- wb.close();
- }
-
- @Test
- public void bug55723b() throws IOException {
- XSSFWorkbook wb = new XSSFWorkbook();
- Sheet sheet = wb.createSheet();
-
- // stored with a special name
- assertNull(wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, 0));
-
- CellRangeAddress range = CellRangeAddress.valueOf("A:B");
- AutoFilter filter = sheet.setAutoFilter(range);
- assertNotNull(filter);
-
- // stored with a special name
- XSSFName name = wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, 0);
- assertNotNull(name);
- assertEquals("Sheet0!$A:$B", name.getRefersToFormula());
-
- range = CellRangeAddress.valueOf("B:C");
- filter = sheet.setAutoFilter(range);
- assertNotNull(filter);
-
- // stored with a special name
- name = wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, 0);
- assertNotNull(name);
- assertEquals("Sheet0!$B:$C", name.getRefersToFormula());
-
- wb.close();
- }
-
- @Test(timeout=180000)
- public void bug51585() throws IOException {
- XSSFTestDataSamples.openSampleWorkbook("51585.xlsx").close();;
- }
-
- private XSSFWorkbook setupSheet(){
- //set up workbook
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet sheet = wb.createSheet();
-
- Row row1 = sheet.createRow((short) 0);
- Cell cell = row1.createCell((short) 0);
- cell.setCellValue("Names");
- Cell cell2 = row1.createCell((short) 1);
- cell2.setCellValue("#");
-
- Row row2 = sheet.createRow((short) 1);
- Cell cell3 = row2.createCell((short) 0);
- cell3.setCellValue("Jane");
- Cell cell4 = row2.createCell((short) 1);
- cell4.setCellValue(3);
-
- Row row3 = sheet.createRow((short) 2);
- Cell cell5 = row3.createCell((short) 0);
- cell5.setCellValue("John");
- Cell cell6 = row3.createCell((short) 1);
- cell6.setCellValue(3);
-
- return wb;
- }
-
- @Test
- public void testCreateTwoPivotTablesInOneSheet() throws IOException {
- XSSFWorkbook wb = setupSheet();
- XSSFSheet sheet = wb.getSheetAt(0);
-
- assertNotNull(wb);
- assertNotNull(sheet);
- XSSFPivotTable pivotTable = sheet.createPivotTable(new AreaReference("A1:B2", SpreadsheetVersion.EXCEL2007), new CellReference("H5"));
- assertNotNull(pivotTable);
- assertTrue(wb.getPivotTables().size() > 0);
- XSSFPivotTable pivotTable2 = sheet.createPivotTable(new AreaReference("A1:B2", SpreadsheetVersion.EXCEL2007), new CellReference("L5"), sheet);
- assertNotNull(pivotTable2);
- assertTrue(wb.getPivotTables().size() > 1);
- wb.close();
- }
-
- @Test
- public void testCreateTwoPivotTablesInTwoSheets() throws IOException {
- XSSFWorkbook wb = setupSheet();
- XSSFSheet sheet = wb.getSheetAt(0);
-
- assertNotNull(wb);
- assertNotNull(sheet);
- XSSFPivotTable pivotTable = sheet.createPivotTable(new AreaReference("A1:B2", SpreadsheetVersion.EXCEL2007), new CellReference("H5"));
- assertNotNull(pivotTable);
- assertTrue(wb.getPivotTables().size() > 0);
- assertNotNull(wb);
- XSSFSheet sheet2 = wb.createSheet();
- XSSFPivotTable pivotTable2 = sheet2.createPivotTable(new AreaReference("A1:B2", SpreadsheetVersion.EXCEL2007), new CellReference("H5"), sheet);
- assertNotNull(pivotTable2);
- assertTrue(wb.getPivotTables().size() > 1);
- wb.close();
- }
-
- @Test
- public void testCreatePivotTable() throws IOException {
- XSSFWorkbook wb = setupSheet();
- XSSFSheet sheet = wb.getSheetAt(0);
-
- assertNotNull(wb);
- assertNotNull(sheet);
- XSSFPivotTable pivotTable = sheet.createPivotTable(new AreaReference("A1:B2", SpreadsheetVersion.EXCEL2007), new CellReference("H5"));
- assertNotNull(pivotTable);
- assertTrue(wb.getPivotTables().size() > 0);
- wb.close();
- }
-
- @Test
- public void testCreatePivotTableInOtherSheetThanDataSheet() throws IOException {
- XSSFWorkbook wb = setupSheet();
- XSSFSheet sheet1 = wb.getSheetAt(0);
- XSSFSheet sheet2 = wb.createSheet();
-
- XSSFPivotTable pivotTable = sheet2.createPivotTable
- (new AreaReference("A1:B2", SpreadsheetVersion.EXCEL2007), new CellReference("H5"), sheet1);
- assertEquals(0, pivotTable.getRowLabelColumns().size());
-
- assertEquals(1, wb.getPivotTables().size());
- assertEquals(0, sheet1.getPivotTables().size());
- assertEquals(1, sheet2.getPivotTables().size());
- wb.close();
- }
-
- @Test
- public void testCreatePivotTableInOtherSheetThanDataSheetUsingAreaReference() throws IOException {
- XSSFWorkbook wb = setupSheet();
- XSSFSheet sheet = wb.getSheetAt(0);
- XSSFSheet sheet2 = wb.createSheet("TEST");
-
- XSSFPivotTable pivotTable = sheet2.createPivotTable(
- new AreaReference(sheet.getSheetName()+"!A$1:B$2", SpreadsheetVersion.EXCEL2007),
- new CellReference("H5"));
- assertEquals(0, pivotTable.getRowLabelColumns().size());
- wb.close();
- }
-
- @Test(expected=IllegalArgumentException.class)
- public void testCreatePivotTableWithConflictingDataSheets() throws IOException {
- XSSFWorkbook wb = setupSheet();
- XSSFSheet sheet = wb.getSheetAt(0);
- XSSFSheet sheet2 = wb.createSheet("TEST");
-
- sheet2.createPivotTable(
- new AreaReference(sheet.getSheetName()+"!A$1:B$2", SpreadsheetVersion.EXCEL2007),
- new CellReference("H5"),
- sheet2);
- }
-
- @Test(expected=POIXMLException.class)
- public void testReadFails() throws IOException {
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet sheet = wb.createSheet();
-
- // Throws exception because we cannot read here
- sheet.onDocumentRead();
- }
-
- @SuppressWarnings("deprecation")
- @Test
- public void testCreateComment() throws IOException {
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet sheet = wb.createSheet();
- assertNotNull(sheet.createComment());
- wb.close();
- }
-
- protected void testCopyOneRow(String copyRowsTestWorkbook) throws IOException {
- final double FLOAT_PRECISION = 1e-9;
- final XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook(copyRowsTestWorkbook);
- final XSSFSheet sheet = workbook.getSheetAt(0);
- final CellCopyPolicy defaultCopyPolicy = new CellCopyPolicy();
- sheet.copyRows(1, 1, 6, defaultCopyPolicy);
-
- final Row srcRow = sheet.getRow(1);
- final Row destRow = sheet.getRow(6);
- int col = 0;
- Cell cell;
-
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("Source row ->", cell.getStringCellValue());
-
- // Style
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Style] B7 cell value", "Red", cell.getStringCellValue());
- assertEquals("[Style] B7 cell style", CellUtil.getCell(srcRow, 1).getCellStyle(), cell.getCellStyle());
-
- // Blank
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Blank] C7 cell type", Cell.CELL_TYPE_BLANK, cell.getCellType());
-
- // Error
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Error] D7 cell type", Cell.CELL_TYPE_ERROR, cell.getCellType());
- final FormulaError error = FormulaError.forInt(cell.getErrorCellValue());
- assertEquals("[Error] D7 cell value", FormulaError.NA, error); //FIXME: XSSFCell and HSSFCell expose different interfaces. getErrorCellString would be helpful here
-
- // Date
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Date] E7 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- final Date date = new GregorianCalendar(2000, Calendar.JANUARY, 1).getTime();
- assertEquals("[Date] E7 cell value", date, cell.getDateCellValue());
-
- // Boolean
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Boolean] F7 cell type", Cell.CELL_TYPE_BOOLEAN, cell.getCellType());
- assertEquals("[Boolean] F7 cell value", true, cell.getBooleanCellValue());
-
- // String
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[String] G7 cell type", Cell.CELL_TYPE_STRING, cell.getCellType());
- assertEquals("[String] G7 cell value", "Hello", cell.getStringCellValue());
-
- // Int
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Int] H7 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Int] H7 cell value", 15, (int) cell.getNumericCellValue());
-
- // Float
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Float] I7 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Float] I7 cell value", 12.5, cell.getNumericCellValue(), FLOAT_PRECISION);
-
- // Cell Formula
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("J7", new CellReference(cell).formatAsString());
- assertEquals("[Cell Formula] J7 cell type", Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula] J7 cell formula", "5+2", cell.getCellFormula());
- System.out.println("Cell formula evaluation currently unsupported");
-
- // Cell Formula with Reference
- // Formula row references should be adjusted by destRowNum-srcRowNum
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("K7", new CellReference(cell).formatAsString());
- assertEquals("[Cell Formula with Reference] K7 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Reference] K7 cell formula",
- "J7+H$2", cell.getCellFormula());
-
- // Cell Formula with Reference spanning multiple rows
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Cell Formula with Reference spanning multiple rows] L7 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Reference spanning multiple rows] L7 cell formula",
- "G7&\" \"&G8", cell.getCellFormula());
-
- // Cell Formula with Reference spanning multiple rows
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Cell Formula with Area Reference] M7 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Area Reference] M7 cell formula",
- "SUM(H7:I8)", cell.getCellFormula());
-
- // Array Formula
- cell = CellUtil.getCell(destRow, col++);
- System.out.println("Array formulas currently unsupported");
- // FIXME: Array Formula set with Sheet.setArrayFormula() instead of cell.setFormula()
- /*
- assertEquals("[Array Formula] N7 cell type", Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Array Formula] N7 cell formula", "{SUM(H7:J7*{1,2,3})}", cell.getCellFormula());
- */
-
- // Data Format
- cell = CellUtil.getCell(destRow, col++);
- assertEquals("[Data Format] O7 cell type;", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Data Format] O7 cell value", 100.20, cell.getNumericCellValue(), FLOAT_PRECISION);
- //FIXME: currently fails
- final String moneyFormat = "\"$\"#,##0.00_);[Red]\\(\"$\"#,##0.00\\)";
- assertEquals("[Data Format] O7 data format", moneyFormat, cell.getCellStyle().getDataFormatString());
-
- // Merged
- cell = CellUtil.getCell(destRow, col);
- assertEquals("[Merged] P7:Q7 cell value",
- "Merged cells", cell.getStringCellValue());
- assertTrue("[Merged] P7:Q7 merged region",
- sheet.getMergedRegions().contains(CellRangeAddress.valueOf("P7:Q7")));
-
- // Merged across multiple rows
- // Microsoft Excel 2013 does not copy a merged region unless all rows of
- // the source merged region are selected
- // POI's behavior should match this behavior
- col += 2;
- cell = CellUtil.getCell(destRow, col);
- // Note: this behavior deviates from Microsoft Excel,
- // which will not overwrite a cell in destination row if merged region extends beyond the copied row.
- // The Excel way would require:
- //assertEquals("[Merged across multiple rows] R7:S8 merged region", "Should NOT be overwritten", cell.getStringCellValue());
- //assertFalse("[Merged across multiple rows] R7:S8 merged region",
- // sheet.getMergedRegions().contains(CellRangeAddress.valueOf("R7:S8")));
- // As currently implemented, cell value is copied but merged region is not copied
- assertEquals("[Merged across multiple rows] R7:S8 cell value",
- "Merged cells across multiple rows", cell.getStringCellValue());
- assertFalse("[Merged across multiple rows] R7:S7 merged region (one row)",
- sheet.getMergedRegions().contains(CellRangeAddress.valueOf("R7:S7"))); //shouldn't do 1-row merge
- assertFalse("[Merged across multiple rows] R7:S8 merged region",
- sheet.getMergedRegions().contains(CellRangeAddress.valueOf("R7:S8"))); //shouldn't do 2-row merge
-
- // Make sure other rows are blank (off-by-one errors)
- assertNull(sheet.getRow(5));
- assertNull(sheet.getRow(7));
- }
-
- public void testCopyMultipleRows(String copyRowsTestWorkbook) throws IOException {
- final double FLOAT_PRECISION = 1e-9;
- final XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook(copyRowsTestWorkbook);
- final XSSFSheet sheet = workbook.getSheetAt(0);
- final CellCopyPolicy defaultCopyPolicy = new CellCopyPolicy();
- sheet.copyRows(0, 3, 8, defaultCopyPolicy);
-
- @SuppressWarnings("unused")
- final Row srcHeaderRow = sheet.getRow(0);
- final Row srcRow1 = sheet.getRow(1);
- final Row srcRow2 = sheet.getRow(2);
- final Row srcRow3 = sheet.getRow(3);
- final Row destHeaderRow = sheet.getRow(8);
- final Row destRow1 = sheet.getRow(9);
- final Row destRow2 = sheet.getRow(10);
- final Row destRow3 = sheet.getRow(11);
- int col = 0;
- Cell cell;
-
- // Header row should be copied
- assertNotNull(destHeaderRow);
-
- // Data rows
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("Source row ->", cell.getStringCellValue());
-
- // Style
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Style] B10 cell value", "Red", cell.getStringCellValue());
- assertEquals("[Style] B10 cell style", CellUtil.getCell(srcRow1, 1).getCellStyle(), cell.getCellStyle());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Style] B11 cell value", "Blue", cell.getStringCellValue());
- assertEquals("[Style] B11 cell style", CellUtil.getCell(srcRow2, 1).getCellStyle(), cell.getCellStyle());
-
- // Blank
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Blank] C10 cell type", Cell.CELL_TYPE_BLANK, cell.getCellType());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Blank] C11 cell type", Cell.CELL_TYPE_BLANK, cell.getCellType());
-
- // Error
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Error] D10 cell type", Cell.CELL_TYPE_ERROR, cell.getCellType());
- FormulaError error = FormulaError.forInt(cell.getErrorCellValue());
- assertEquals("[Error] D10 cell value", FormulaError.NA, error); //FIXME: XSSFCell and HSSFCell expose different interfaces. getErrorCellString would be helpful here
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Error] D11 cell type", Cell.CELL_TYPE_ERROR, cell.getCellType());
- error = FormulaError.forInt(cell.getErrorCellValue());
- assertEquals("[Error] D11 cell value", FormulaError.NAME, error); //FIXME: XSSFCell and HSSFCell expose different interfaces. getErrorCellString would be helpful here
-
- // Date
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Date] E10 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- Date date = new GregorianCalendar(2000, Calendar.JANUARY, 1).getTime();
- assertEquals("[Date] E10 cell value", date, cell.getDateCellValue());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Date] E11 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- date = new GregorianCalendar(2000, Calendar.JANUARY, 2).getTime();
- assertEquals("[Date] E11 cell value", date, cell.getDateCellValue());
-
- // Boolean
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Boolean] F10 cell type", Cell.CELL_TYPE_BOOLEAN, cell.getCellType());
- assertEquals("[Boolean] F10 cell value", true, cell.getBooleanCellValue());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Boolean] F11 cell type", Cell.CELL_TYPE_BOOLEAN, cell.getCellType());
- assertEquals("[Boolean] F11 cell value", false, cell.getBooleanCellValue());
-
- // String
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[String] G10 cell type", Cell.CELL_TYPE_STRING, cell.getCellType());
- assertEquals("[String] G10 cell value", "Hello", cell.getStringCellValue());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[String] G11 cell type", Cell.CELL_TYPE_STRING, cell.getCellType());
- assertEquals("[String] G11 cell value", "World", cell.getStringCellValue());
-
- // Int
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Int] H10 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Int] H10 cell value", 15, (int) cell.getNumericCellValue());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Int] H11 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Int] H11 cell value", 42, (int) cell.getNumericCellValue());
-
- // Float
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Float] I10 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Float] I10 cell value", 12.5, cell.getNumericCellValue(), FLOAT_PRECISION);
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Float] I11 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Float] I11 cell value", 5.5, cell.getNumericCellValue(), FLOAT_PRECISION);
-
- // Cell Formula
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Cell Formula] J10 cell type", Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula] J10 cell formula", "5+2", cell.getCellFormula());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Cell Formula] J11 cell type", Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula] J11 cell formula", "6+18", cell.getCellFormula());
-
- // Cell Formula with Reference
- col++;
- // Formula row references should be adjusted by destRowNum-srcRowNum
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Cell Formula with Reference] K10 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Reference] K10 cell formula",
- "J10+H$2", cell.getCellFormula());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Cell Formula with Reference] K11 cell type", Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Reference] K11 cell formula", "J11+H$2", cell.getCellFormula());
-
- // Cell Formula with Reference spanning multiple rows
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Cell Formula with Reference spanning multiple rows] L10 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Reference spanning multiple rows] L10 cell formula",
- "G10&\" \"&G11", cell.getCellFormula());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Cell Formula with Reference spanning multiple rows] L11 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Reference spanning multiple rows] L11 cell formula",
- "G11&\" \"&G12", cell.getCellFormula());
-
- // Cell Formula with Area Reference
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Cell Formula with Area Reference] M10 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Area Reference] M10 cell formula",
- "SUM(H10:I11)", cell.getCellFormula());
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Cell Formula with Area Reference] M11 cell type",
- Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Cell Formula with Area Reference] M11 cell formula",
- "SUM($H$3:I10)", cell.getCellFormula()); //Also acceptable: SUM($H10:I$3), but this AreaReference isn't in ascending order
-
- // Array Formula
- col++;
- cell = CellUtil.getCell(destRow1, col);
- System.out.println("Array formulas currently unsupported");
- /*
- // FIXME: Array Formula set with Sheet.setArrayFormula() instead of cell.setFormula()
- assertEquals("[Array Formula] N10 cell type", Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Array Formula] N10 cell formula", "{SUM(H10:J10*{1,2,3})}", cell.getCellFormula());
-
- cell = CellUtil.getCell(destRow2, col);
- // FIXME: Array Formula set with Sheet.setArrayFormula() instead of cell.setFormula()
- assertEquals("[Array Formula] N11 cell type", Cell.CELL_TYPE_FORMULA, cell.getCellType());
- assertEquals("[Array Formula] N11 cell formula", "{SUM(H11:J11*{1,2,3})}", cell.getCellFormula());
- */
-
- // Data Format
- col++;
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Data Format] O10 cell type", Cell.CELL_TYPE_NUMERIC, cell.getCellType());
- assertEquals("[Data Format] O10 cell value", 100.20, cell.getNumericCellValue(), FLOAT_PRECISION);
- final String moneyFormat = "\"$\"#,##0.00_);[Red]\\(\"$\"#,##0.00\\)";
- assertEquals("[Data Format] O10 cell data format", moneyFormat, cell.getCellStyle().getDataFormatString());
-
- // Merged
- col++;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Merged] P10:Q10 cell value",
- "Merged cells", cell.getStringCellValue());
- assertTrue("[Merged] P10:Q10 merged region",
- sheet.getMergedRegions().contains(CellRangeAddress.valueOf("P10:Q10")));
-
- cell = CellUtil.getCell(destRow2, col);
- assertEquals("[Merged] P11:Q11 cell value", "Merged cells", cell.getStringCellValue());
- assertTrue("[Merged] P11:Q11 merged region",
- sheet.getMergedRegions().contains(CellRangeAddress.valueOf("P11:Q11")));
-
- // Should Q10/Q11 be checked?
-
- // Merged across multiple rows
- // Microsoft Excel 2013 does not copy a merged region unless all rows of
- // the source merged region are selected
- // POI's behavior should match this behavior
- col += 2;
- cell = CellUtil.getCell(destRow1, col);
- assertEquals("[Merged across multiple rows] R10:S11 cell value",
- "Merged cells across multiple rows", cell.getStringCellValue());
- assertTrue("[Merged across multiple rows] R10:S11 merged region",
- sheet.getMergedRegions().contains(CellRangeAddress.valueOf("R10:S11")));
-
- // Row 3 (zero-based) was empty, so Row 11 (zero-based) should be empty too.
- if (srcRow3 == null) {
- assertNull("Row 3 was empty, so Row 11 should be empty", destRow3);
- }
-
- // Make sure other rows are blank (off-by-one errors)
- assertNull("Off-by-one lower edge case", sheet.getRow(7)); //one row above destHeaderRow
- assertNull("Off-by-one upper edge case", sheet.getRow(12)); //one row below destRow3
- }
-
- @Test
- public void testCopyOneRow() throws IOException {
- testCopyOneRow("XSSFSheet.copyRows.xlsx");
- }
-
- @Test
- public void testCopyMultipleRows() throws IOException {
- testCopyMultipleRows("XSSFSheet.copyRows.xlsx");
- }
- }
|