2008-01-22 06:26:27 -05:00
/ * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
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 ;
2014-09-04 18:50:28 -04:00
import static org.apache.poi.xssf.XSSFTestDataSamples.openSampleWorkbook ;
import static org.apache.poi.xssf.XSSFTestDataSamples.writeOutAndReadBack ;
2015-10-04 20:28:54 -04:00
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 ;
2014-01-25 21:18:53 -05:00
2014-12-28 04:16:57 -05:00
import java.io.IOException ;
2014-09-14 18:57:38 -04:00
import java.util.Arrays ;
2015-11-01 21:50:33 -05:00
import java.util.Calendar ;
import java.util.Date ;
2014-09-14 18:57:38 -04:00
import java.util.HashSet ;
2011-02-25 16:44:09 -05:00
import java.util.List ;
2014-09-14 18:57:38 -04:00
import java.util.Set ;
2011-02-25 16:44:09 -05:00
2015-01-04 05:23:01 -05:00
import org.apache.poi.POIXMLException ;
2013-06-17 05:06:39 -04:00
import org.apache.poi.hssf.HSSFTestDataSamples ;
2014-09-04 18:50:28 -04:00
import org.apache.poi.poifs.crypt.CryptoFunctions ;
import org.apache.poi.poifs.crypt.HashAlgorithm ;
2015-09-20 16:16:17 -04:00
import org.apache.poi.ss.SpreadsheetVersion ;
2014-01-01 17:15:44 -05:00
import org.apache.poi.ss.usermodel.AutoFilter ;
2013-06-17 05:06:39 -04:00
import org.apache.poi.ss.usermodel.BaseTestSheet ;
import org.apache.poi.ss.usermodel.Cell ;
2015-11-01 21:50:33 -05:00
import org.apache.poi.ss.usermodel.CellCopyPolicy ;
import org.apache.poi.ss.usermodel.FormulaError ;
2014-07-30 11:27:09 -04:00
import org.apache.poi.ss.usermodel.Row ;
2013-06-17 05:06:39 -04:00
import org.apache.poi.ss.usermodel.Sheet ;
import org.apache.poi.ss.usermodel.Workbook ;
2014-07-30 11:27:09 -04:00
import org.apache.poi.ss.util.AreaReference ;
2008-10-25 07:48:50 -04:00
import org.apache.poi.ss.util.CellRangeAddress ;
2014-07-30 11:27:09 -04:00
import org.apache.poi.ss.util.CellReference ;
2015-11-01 21:50:33 -05:00
import org.apache.poi.ss.util.CellUtil ;
2015-11-04 19:15:51 -05:00
import org.apache.poi.util.LocaleUtil ;
2009-08-17 22:41:45 -04:00
import org.apache.poi.xssf.XSSFITestDataProvider ;
import org.apache.poi.xssf.XSSFTestDataSamples ;
2013-06-17 05:06:39 -04:00
import org.apache.poi.xssf.model.CalculationChain ;
2008-03-31 19:15:38 -04:00
import org.apache.poi.xssf.model.CommentsTable ;
2008-04-10 03:35:47 -04:00
import org.apache.poi.xssf.model.StylesTable ;
2013-06-17 05:06:39 -04:00
import org.apache.poi.xssf.streaming.SXSSFWorkbook ;
2008-02-29 09:18:06 -05:00
import org.apache.poi.xssf.usermodel.helpers.ColumnHelper ;
2014-01-25 21:18:53 -05:00
import org.junit.Test ;
2015-10-04 20:28:54 -04:00
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 ;
2008-01-22 06:26:27 -05:00
2014-10-20 09:49:51 -04:00
@SuppressWarnings ( " resource " )
2009-12-25 21:17:34 -05:00
public final class TestXSSFSheet extends BaseTestSheet {
2008-10-10 10:54:32 -04:00
2009-12-25 21:17:34 -05:00
public TestXSSFSheet ( ) {
super ( XSSFITestDataProvider . instance ) ;
2008-01-29 08:32:48 -05:00
}
2008-10-10 10:54:32 -04:00
2009-03-27 07:50:52 -04:00
//TODO column styles are not yet supported by XSSF
2014-10-20 09:49:51 -04:00
@Override
2014-01-25 21:18:53 -05:00
@Test
public void defaultColumnStyle ( ) {
//super.defaultColumnStyle();
2008-01-29 08:32:48 -05:00
}
2008-10-10 10:54:32 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void getSetMargin ( ) throws IOException {
2009-03-27 07:50:52 -04:00
baseTestGetSetMargin ( new double [ ] { 0 . 7 , 0 . 7 , 0 . 75 , 0 . 75 , 0 . 3 , 0 . 3 } ) ;
2008-01-29 08:32:48 -05:00
}
2008-10-10 10:54:32 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void existingHeaderFooter ( ) throws IOException {
XSSFWorkbook wb1 = XSSFTestDataSamples . openSampleWorkbook ( " 45540_classic_Header.xlsx " ) ;
2009-03-29 12:10:40 -04:00
XSSFOddHeader hdr ;
XSSFOddFooter ftr ;
// Sheet 1 has a header with center and right text
2015-10-04 20:28:54 -04:00
XSSFSheet s1 = wb1 . getSheetAt ( 0 ) ;
2009-03-29 12:10:40 -04:00
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
2015-10-04 20:28:54 -04:00
XSSFSheet s2 = wb1 . getSheetAt ( 1 ) ;
2009-03-29 12:10:40 -04:00
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
2015-10-04 20:28:54 -04:00
XSSFWorkbook wb2 = XSSFTestDataSamples . writeOutAndReadBack ( wb1 ) ;
wb1 . close ( ) ;
2009-03-29 12:10:40 -04:00
2015-10-04 20:28:54 -04:00
hdr = ( XSSFOddHeader ) wb2 . getSheetAt ( 0 ) . getHeader ( ) ;
ftr = ( XSSFOddFooter ) wb2 . getSheetAt ( 0 ) . getFooter ( ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( " " , hdr . getLeft ( ) ) ;
assertEquals ( " testdoc " , hdr . getCenter ( ) ) ;
assertEquals ( " test phrase " , hdr . getRight ( ) ) ;
assertEquals ( " " , ftr . getLeft ( ) ) ;
assertEquals ( " " , ftr . getCenter ( ) ) ;
assertEquals ( " " , ftr . getRight ( ) ) ;
2015-10-04 20:28:54 -04:00
wb2 . close ( ) ;
2008-08-05 07:26:38 -04:00
}
2008-10-10 10:54:32 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void getAllHeadersFooters ( ) throws IOException {
2009-12-25 21:17:34 -05:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
2008-10-21 13:56:34 -04:00
XSSFSheet sheet = workbook . createSheet ( " Sheet 1 " ) ;
2008-02-07 04:24:49 -05:00
assertNotNull ( sheet . getOddFooter ( ) ) ;
assertNotNull ( sheet . getEvenFooter ( ) ) ;
assertNotNull ( sheet . getFirstFooter ( ) ) ;
assertNotNull ( sheet . getOddHeader ( ) ) ;
assertNotNull ( sheet . getEvenHeader ( ) ) ;
assertNotNull ( sheet . getFirstHeader ( ) ) ;
2008-10-10 10:54:32 -04:00
2008-02-07 04:24:49 -05:00
assertEquals ( " " , sheet . getOddFooter ( ) . getLeft ( ) ) ;
sheet . getOddFooter ( ) . setLeft ( " odd footer left " ) ;
assertEquals ( " odd footer left " , sheet . getOddFooter ( ) . getLeft ( ) ) ;
2008-10-10 10:54:32 -04:00
2008-02-07 04:24:49 -05:00
assertEquals ( " " , sheet . getEvenFooter ( ) . getLeft ( ) ) ;
sheet . getEvenFooter ( ) . setLeft ( " even footer left " ) ;
assertEquals ( " even footer left " , sheet . getEvenFooter ( ) . getLeft ( ) ) ;
2008-10-10 10:54:32 -04:00
2008-02-07 04:24:49 -05:00
assertEquals ( " " , sheet . getFirstFooter ( ) . getLeft ( ) ) ;
sheet . getFirstFooter ( ) . setLeft ( " first footer left " ) ;
assertEquals ( " first footer left " , sheet . getFirstFooter ( ) . getLeft ( ) ) ;
2008-10-10 10:54:32 -04:00
2008-02-07 04:24:49 -05:00
assertEquals ( " " , sheet . getOddHeader ( ) . getLeft ( ) ) ;
sheet . getOddHeader ( ) . setLeft ( " odd header left " ) ;
assertEquals ( " odd header left " , sheet . getOddHeader ( ) . getLeft ( ) ) ;
2008-10-10 10:54:32 -04:00
2008-02-07 04:24:49 -05:00
assertEquals ( " " , sheet . getOddHeader ( ) . getRight ( ) ) ;
sheet . getOddHeader ( ) . setRight ( " odd header right " ) ;
assertEquals ( " odd header right " , sheet . getOddHeader ( ) . getRight ( ) ) ;
2008-10-10 10:54:32 -04:00
2008-02-07 04:24:49 -05:00
assertEquals ( " " , sheet . getOddHeader ( ) . getCenter ( ) ) ;
sheet . getOddHeader ( ) . setCenter ( " odd header center " ) ;
assertEquals ( " odd header center " , sheet . getOddHeader ( ) . getCenter ( ) ) ;
2008-08-05 06:22:13 -04:00
// Defaults are odd
assertEquals ( " odd footer left " , sheet . getFooter ( ) . getLeft ( ) ) ;
assertEquals ( " odd header center " , sheet . getHeader ( ) . getCenter ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-02-07 04:24:49 -05:00
}
2008-10-10 10:54:32 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void autoSizeColumn ( ) throws IOException {
2008-02-29 09:18:06 -05:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
2008-10-21 13:56:34 -04:00
XSSFSheet sheet = workbook . createSheet ( " Sheet 1 " ) ;
sheet . createRow ( 0 ) . createCell ( 13 ) . setCellValue ( " test " ) ;
2009-03-29 12:10:40 -04:00
sheet . autoSizeColumn ( 13 ) ;
2008-10-21 13:56:34 -04:00
2008-02-29 09:18:06 -05:00
ColumnHelper columnHelper = sheet . getColumnHelper ( ) ;
2008-04-10 03:35:47 -04:00
CTCol col = columnHelper . getColumn ( 13 , false ) ;
2008-10-21 13:56:34 -04:00
assertTrue ( col . getBestFit ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-02-29 09:18:06 -05:00
}
2009-03-29 12:10:40 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void setCellComment ( ) throws IOException {
2008-03-08 06:19:23 -05:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
2008-10-19 08:54:40 -04:00
XSSFSheet sheet = workbook . createSheet ( ) ;
2010-05-29 14:31:04 -04:00
XSSFDrawing dg = sheet . createDrawingPatriarch ( ) ;
XSSFComment comment = dg . createCellComment ( new XSSFClientAnchor ( ) ) ;
2008-10-19 08:54:40 -04:00
2009-12-25 18:43:55 -05:00
Cell cell = sheet . createRow ( 0 ) . createCell ( 0 ) ;
2009-11-27 12:39:17 -05:00
CommentsTable comments = sheet . getCommentsTable ( false ) ;
2008-10-19 08:54:40 -04:00
CTComments ctComments = comments . getCTComments ( ) ;
2010-05-29 14:31:04 -04:00
cell . setCellComment ( comment ) ;
2008-03-08 06:19:23 -05:00
assertEquals ( " A1 " , ctComments . getCommentList ( ) . getCommentArray ( 0 ) . getRef ( ) ) ;
comment . setAuthor ( " test A1 author " ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( " test A1 author " , comments . getAuthor ( ( int ) ctComments . getCommentList ( ) . getCommentArray ( 0 ) . getAuthorId ( ) ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-03-08 06:19:23 -05:00
}
2009-03-29 12:10:40 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void getActiveCell ( ) throws IOException {
2009-03-29 12:10:40 -04:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
XSSFSheet sheet = workbook . createSheet ( ) ;
sheet . setActiveCell ( " R5 " ) ;
assertEquals ( " R5 " , sheet . getActiveCell ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-03-08 06:19:23 -05:00
}
2009-03-29 12:10:40 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void createFreezePane_XSSF ( ) throws IOException {
2009-03-29 12:10:40 -04:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
XSSFSheet sheet = workbook . createSheet ( ) ;
2008-10-25 07:48:50 -04:00
CTWorksheet ctWorksheet = sheet . getCTWorksheet ( ) ;
2008-10-19 08:54:40 -04:00
2009-03-29 12:10:40 -04:00
sheet . createFreezePane ( 2 , 4 ) ;
2009-08-17 22:41:45 -04:00
assertEquals ( 2 . 0 , ctWorksheet . getSheetViews ( ) . getSheetViewArray ( 0 ) . getPane ( ) . getXSplit ( ) , 0 . 0 ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( STPane . BOTTOM_RIGHT , ctWorksheet . getSheetViews ( ) . getSheetViewArray ( 0 ) . getPane ( ) . getActivePane ( ) ) ;
sheet . createFreezePane ( 3 , 6 , 10 , 10 ) ;
2009-08-17 22:41:45 -04:00
assertEquals ( 3 . 0 , ctWorksheet . getSheetViews ( ) . getSheetViewArray ( 0 ) . getPane ( ) . getXSplit ( ) , 0 . 0 ) ;
2009-12-25 18:43:55 -05:00
// assertEquals(10, sheet.getTopRow());
// assertEquals(10, sheet.getLeftCol());
2009-03-29 12:10:40 -04:00
sheet . createSplitPane ( 4 , 8 , 12 , 12 , 1 ) ;
2009-08-17 22:41:45 -04:00
assertEquals ( 8 . 0 , ctWorksheet . getSheetViews ( ) . getSheetViewArray ( 0 ) . getPane ( ) . getYSplit ( ) , 0 . 0 ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( STPane . BOTTOM_RIGHT , ctWorksheet . getSheetViews ( ) . getSheetViewArray ( 0 ) . getPane ( ) . getActivePane ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-04-07 15:54:43 -04:00
}
2009-03-29 12:10:40 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void removeMergedRegion_lowlevel ( ) throws IOException {
2008-10-19 08:54:40 -04:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
XSSFSheet sheet = workbook . createSheet ( ) ;
2009-03-29 12:10:40 -04:00
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 " ) ;
2014-09-14 18:57:38 -04:00
CellRangeAddress region_4 = CellRangeAddress . valueOf ( " G7:H8 " ) ;
2009-03-29 12:10:40 -04:00
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 ( ) ) ;
2010-09-11 09:48:00 -04:00
assertNull ( " CTMergeCells should be deleted after removing the last merged " +
" region on the sheet. " , sheet . getCTWorksheet ( ) . getMergeCells ( ) ) ;
2014-09-14 18:57:38 -04:00
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 ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-04-07 16:31:43 -04:00
}
2009-03-29 12:10:40 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void setDefaultColumnStyle ( ) throws IOException {
2008-10-19 08:54:40 -04:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
XSSFSheet sheet = workbook . createSheet ( ) ;
2008-10-25 07:48:50 -04:00
CTWorksheet ctWorksheet = sheet . getCTWorksheet ( ) ;
2009-03-29 12:10:40 -04:00
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 ) ;
2010-05-19 07:55:17 -04:00
XSSFCellStyle cellStyle = new XSSFCellStyle ( 1 , 1 , stylesTable , null ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( 1 , cellStyle . getFontIndex ( ) ) ;
2009-12-25 18:43:55 -05:00
sheet . setDefaultColumnStyle ( 3 , cellStyle ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( 1 , ctWorksheet . getColsArray ( 0 ) . getColArray ( 0 ) . getStyle ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-04-09 16:50:55 -04:00
}
2009-03-29 12:10:40 -04:00
2014-01-25 21:18:53 -05:00
@Test
2014-08-27 20:08:41 -04:00
@SuppressWarnings ( " deprecation " )
2015-10-04 20:28:54 -04:00
public void groupUngroupColumn ( ) throws IOException {
2008-10-19 08:54:40 -04:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
XSSFSheet sheet = workbook . createSheet ( ) ;
2009-03-29 12:10:40 -04:00
//one level
2009-12-25 18:43:55 -05:00
sheet . groupColumn ( 2 , 7 ) ;
sheet . groupColumn ( 10 , 11 ) ;
2009-03-29 12:10:40 -04:00
CTCols cols = sheet . getCTWorksheet ( ) . getColsArray ( 0 ) ;
assertEquals ( 2 , cols . sizeOfColArray ( ) ) ;
2014-08-27 20:08:41 -04:00
CTCol [ ] colArray = cols . getColArray ( ) ;
2009-03-29 12:10:40 -04:00
assertNotNull ( colArray ) ;
2014-08-27 20:08:41 -04:00
assertEquals ( 2 + 1 , colArray [ 0 ] . getMin ( ) ) ; // 1 based
assertEquals ( 7 + 1 , colArray [ 0 ] . getMax ( ) ) ; // 1 based
assertEquals ( 1 , colArray [ 0 ] . getOutlineLevel ( ) ) ;
2015-01-04 05:23:01 -05:00
assertEquals ( 0 , sheet . getColumnOutlineLevel ( 0 ) ) ;
2009-03-29 12:10:40 -04:00
//two level
2009-12-25 18:43:55 -05:00
sheet . groupColumn ( 1 , 2 ) ;
2009-03-29 12:10:40 -04:00
cols = sheet . getCTWorksheet ( ) . getColsArray ( 0 ) ;
assertEquals ( 4 , cols . sizeOfColArray ( ) ) ;
2014-08-27 20:08:41 -04:00
colArray = cols . getColArray ( ) ;
assertEquals ( 2 , colArray [ 1 ] . getOutlineLevel ( ) ) ;
2009-03-29 12:10:40 -04:00
//three level
2009-12-25 18:43:55 -05:00
sheet . groupColumn ( 6 , 8 ) ;
sheet . groupColumn ( 2 , 3 ) ;
2009-03-29 12:10:40 -04:00
cols = sheet . getCTWorksheet ( ) . getColsArray ( 0 ) ;
assertEquals ( 7 , cols . sizeOfColArray ( ) ) ;
2014-08-27 20:08:41 -04:00
colArray = cols . getColArray ( ) ;
assertEquals ( 3 , colArray [ 1 ] . getOutlineLevel ( ) ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( 3 , sheet . getCTWorksheet ( ) . getSheetFormatPr ( ) . getOutlineLevelCol ( ) ) ;
2009-12-25 18:43:55 -05:00
sheet . ungroupColumn ( 8 , 10 ) ;
2014-08-27 20:08:41 -04:00
colArray = cols . getColArray ( ) ;
2009-03-29 12:10:40 -04:00
//assertEquals(3, colArray[1].getOutlineLevel());
2009-12-25 18:43:55 -05:00
sheet . ungroupColumn ( 4 , 6 ) ;
sheet . ungroupColumn ( 2 , 2 ) ;
2014-08-27 20:08:41 -04:00
colArray = cols . getColArray ( ) ;
assertEquals ( 4 , colArray . length ) ;
2009-03-29 12:10:40 -04:00
assertEquals ( 2 , sheet . getCTWorksheet ( ) . getSheetFormatPr ( ) . getOutlineLevelCol ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2008-04-10 03:35:47 -04:00
}
2009-03-29 12:10:40 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void groupUngroupRow ( ) throws IOException {
2009-03-29 12:10:40 -04:00
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 ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2009-03-29 12:10:40 -04:00
}
2015-10-04 20:28:54 -04:00
@Test ( expected = IllegalArgumentException . class )
public void setZoom ( ) throws IOException {
2008-10-29 15:12:47 -04:00
XSSFWorkbook workBook = new XSSFWorkbook ( ) ;
XSSFSheet sheet1 = workBook . createSheet ( " new sheet " ) ;
2009-03-29 12:10:40 -04:00
sheet1 . setZoom ( 3 , 4 ) ; // 75 percent magnification
2008-10-29 15:12:47 -04:00
long zoom = sheet1 . getCTWorksheet ( ) . getSheetViews ( ) . getSheetViewArray ( 0 ) . getZoomScale ( ) ;
assertEquals ( zoom , 75 ) ;
sheet1 . setZoom ( 200 ) ;
zoom = sheet1 . getCTWorksheet ( ) . getSheetViews ( ) . getSheetViewArray ( 0 ) . getZoomScale ( ) ;
assertEquals ( zoom , 200 ) ;
2015-10-04 20:28:54 -04:00
// Valid scale values range from 10 to 400
2008-10-29 15:12:47 -04:00
try {
sheet1 . setZoom ( 500 ) ;
2015-10-04 20:28:54 -04:00
} finally {
workBook . close ( ) ;
2008-10-29 15:12:47 -04:00
}
}
2008-09-11 11:11:57 -04:00
2009-05-17 14:32:55 -04:00
/ * *
* 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 !
* /
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void setColumnGroupCollapsed ( ) throws IOException {
2009-12-25 18:43:55 -05:00
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 ( ) ) ;
2015-10-05 06:31:33 -04:00
assertEquals ( false , cols . getColArray ( 1 ) . isSetCollapsed ( ) ) ;
2009-12-25 18:43:55 -05:00
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 ( ) ) ;
2015-10-05 06:31:33 -04:00
assertEquals ( false , cols . getColArray ( 1 ) . isSetCollapsed ( ) ) ;
2009-12-25 18:43:55 -05:00
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 ( ) ) ;
2015-10-05 06:31:33 -04:00
assertEquals ( false , cols . getColArray ( 1 ) . isSetCollapsed ( ) ) ;
2009-12-25 18:43:55 -05:00
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 ( ) ) ;
2015-10-05 06:31:33 -04:00
assertEquals ( false , cols . getColArray ( 1 ) . isSetCollapsed ( ) ) ;
2009-12-25 18:43:55 -05:00
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
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2009-05-17 14:32:55 -04:00
}
/ * *
* 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 !
* /
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void setRowGroupCollapsed ( ) throws IOException {
2009-12-25 18:43:55 -05:00
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 ( ) ) ;
2015-10-04 20:28:54 -04:00
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 ( ) ) ;
2009-12-25 18:43:55 -05:00
//collapsed
sheet1 . setRowGroupCollapsed ( 7 , true ) ;
2015-10-04 20:28:54 -04:00
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 ( ) ) ;
2009-12-25 18:43:55 -05:00
//expanded
sheet1 . setRowGroupCollapsed ( 7 , false ) ;
2015-10-04 20:28:54 -04:00
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 ( ) ) ;
2009-12-25 18:43:55 -05:00
// Save and re-load
wb = XSSFTestDataSamples . writeOutAndReadBack ( wb ) ;
sheet1 = ( XSSFSheet ) wb . getSheetAt ( 0 ) ;
2015-10-04 20:28:54 -04:00
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 ( ) ;
2009-05-17 14:32:55 -04:00
}
2009-03-27 07:50:52 -04:00
/ * *
* Get / Set column width and check the actual values of the underlying XML beans
* /
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void columnWidth_lowlevel ( ) throws IOException {
2009-03-27 07:50:52 -04:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
XSSFSheet sheet = workbook . createSheet ( " Sheet 1 " ) ;
2009-03-29 12:10:40 -04:00
sheet . setColumnWidth ( 1 , 22 * 256 ) ;
assertEquals ( 22 * 256 , sheet . getColumnWidth ( 1 ) ) ;
2008-10-17 11:14:00 -04:00
2009-03-27 07:50:52 -04:00
// Now check the low level stuff, and check that's all
// been set correctly
XSSFSheet xs = sheet ;
CTWorksheet cts = xs . getCTWorksheet ( ) ;
2008-10-25 09:39:43 -04:00
2014-08-27 20:08:41 -04:00
assertEquals ( 1 , cts . sizeOfColsArray ( ) ) ;
CTCols cols = cts . getColsArray ( 0 ) ;
2009-03-27 07:50:52 -04:00
assertEquals ( 1 , cols . sizeOfColArray ( ) ) ;
CTCol col = cols . getColArray ( 0 ) ;
2008-10-17 11:14:00 -04:00
2009-03-27 07:50:52 -04:00
// XML is 1 based, POI is 0 based
assertEquals ( 2 , col . getMin ( ) ) ;
assertEquals ( 2 , col . getMax ( ) ) ;
2009-08-17 22:41:45 -04:00
assertEquals ( 22 . 0 , col . getWidth ( ) , 0 . 0 ) ;
2009-09-13 13:49:46 -04:00
assertTrue ( col . getCustomWidth ( ) ) ;
2008-10-17 11:14:00 -04:00
2009-03-27 07:50:52 -04:00
// Now set another
2009-03-29 12:10:40 -04:00
sheet . setColumnWidth ( 3 , 33 * 256 ) ;
2008-10-17 11:14:00 -04:00
2014-08-27 20:08:41 -04:00
assertEquals ( 1 , cts . sizeOfColsArray ( ) ) ;
cols = cts . getColsArray ( 0 ) ;
2009-03-27 07:50:52 -04:00
assertEquals ( 2 , cols . sizeOfColArray ( ) ) ;
2008-10-17 11:14:00 -04:00
2009-03-27 07:50:52 -04:00
col = cols . getColArray ( 0 ) ;
assertEquals ( 2 , col . getMin ( ) ) ; // POI 1
assertEquals ( 2 , col . getMax ( ) ) ;
2009-08-17 22:41:45 -04:00
assertEquals ( 22 . 0 , col . getWidth ( ) , 0 . 0 ) ;
2009-09-13 13:49:46 -04:00
assertTrue ( col . getCustomWidth ( ) ) ;
2009-02-24 03:38:16 -05:00
2009-03-27 07:50:52 -04:00
col = cols . getColArray ( 1 ) ;
assertEquals ( 4 , col . getMin ( ) ) ; // POI 3
assertEquals ( 4 , col . getMax ( ) ) ;
2009-08-17 22:41:45 -04:00
assertEquals ( 33 . 0 , col . getWidth ( ) , 0 . 0 ) ;
2009-09-13 13:49:46 -04:00
assertTrue ( col . getCustomWidth ( ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2009-02-24 03:38:16 -05:00
}
2009-10-04 06:08:47 -04:00
/ * *
* Setting width of a column included in a column span
* /
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void bug47862 ( ) throws IOException {
2009-10-04 06:08:47 -04:00
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
2009-12-25 18:43:55 -05:00
assertEquals ( swidth , col . getWidth ( ) , 0 . 0 ) ;
2009-10-04 06:08:47 -04:00
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 ) ) ;
2009-12-25 18:43:55 -05:00
assertEquals ( cw [ i ] , cols . getColArray ( i ) . getWidth ( ) , 0 . 0 ) ;
2009-10-04 06:08:47 -04:00
}
2009-12-25 18:43:55 -05:00
//serialize and check again
2009-12-25 21:17:34 -05:00
wb = XSSFTestDataSamples . writeOutAndReadBack ( wb ) ;
2009-10-04 06:08:47 -04:00
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 ) ) ;
2009-12-25 18:43:55 -05:00
assertEquals ( cw [ i ] , cols . getColArray ( i ) . getWidth ( ) , 0 . 0 ) ;
2009-10-04 06:08:47 -04:00
}
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2009-10-04 06:08:47 -04:00
}
/ * *
* Hiding a column included in a column span
* /
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void bug47804 ( ) throws IOException {
2009-10-04 06:08:47 -04:00
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
2009-12-25 21:17:34 -05:00
wb = XSSFTestDataSamples . writeOutAndReadBack ( wb ) ;
2009-10-04 06:08:47 -04:00
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 ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2009-10-04 06:08:47 -04:00
}
2009-11-27 12:39:17 -05:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void commentsTable ( ) throws IOException {
2009-11-27 12:39:17 -05:00
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 ( ) ) ;
2009-12-25 18:43:55 -05:00
//comment1 and comment2 are different objects
2009-11-27 12:39:17 -05:00
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 ) ) ;
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2009-11-27 12:39:17 -05:00
}
2010-05-29 06:28:04 -04:00
/ * *
* Rows and cells can be created in random order ,
2011-08-10 13:32:38 -04:00
* but CTRows are kept in ascending order
2010-05-29 06:28:04 -04:00
* /
2014-10-20 09:49:51 -04:00
@Override
2014-01-25 21:18:53 -05:00
@Test
2014-08-27 20:08:41 -04:00
@SuppressWarnings ( " deprecation " )
2015-10-04 20:28:54 -04:00
public void createRow ( ) throws IOException {
2009-11-30 09:09:03 -05:00
XSSFWorkbook workbook = new XSSFWorkbook ( ) ;
XSSFSheet sheet = workbook . createSheet ( ) ;
CTWorksheet wsh = sheet . getCTWorksheet ( ) ;
2010-05-29 06:28:04 -04:00
CTSheetData sheetData = wsh . getSheetData ( ) ;
assertEquals ( 0 , sheetData . sizeOfRowArray ( ) ) ;
XSSFRow row1 = sheet . createRow ( 2 ) ;
2009-11-30 09:09:03 -05:00
row1 . createCell ( 2 ) ;
2010-05-29 06:28:04 -04:00
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 ) ;
2014-08-27 20:08:41 -04:00
CTRow [ ] xrow = sheetData . getRowArray ( ) ;
assertEquals ( 3 , xrow . length ) ;
2010-05-29 06:28:04 -04:00
2011-08-10 13:32:38 -04:00
//rows are sorted: {0, 1, 2}
2014-08-27 20:08:41 -04:00
assertEquals ( 4 , xrow [ 0 ] . sizeOfCArray ( ) ) ;
assertEquals ( 1 , xrow [ 0 ] . getR ( ) ) ;
assertTrue ( xrow [ 0 ] . equals ( row3 . getCTRow ( ) ) ) ;
2010-05-29 06:28:04 -04:00
2014-08-27 20:08:41 -04:00
assertEquals ( 3 , xrow [ 1 ] . sizeOfCArray ( ) ) ;
assertEquals ( 2 , xrow [ 1 ] . getR ( ) ) ;
assertTrue ( xrow [ 1 ] . equals ( row2 . getCTRow ( ) ) ) ;
2010-05-29 06:28:04 -04:00
2014-08-27 20:08:41 -04:00
assertEquals ( 2 , xrow [ 2 ] . sizeOfCArray ( ) ) ;
assertEquals ( 3 , xrow [ 2 ] . getR ( ) ) ;
assertTrue ( xrow [ 2 ] . equals ( row1 . getCTRow ( ) ) ) ;
2010-05-29 06:28:04 -04:00
2014-08-27 20:08:41 -04:00
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 ( ) ) ;
2009-11-30 09:09:03 -05:00
2009-12-25 18:43:55 -05:00
//re-creating a row does NOT add extra data to the parent
2010-05-29 06:28:04 -04:00
row2 = sheet . createRow ( 1 ) ;
assertEquals ( 3 , sheetData . sizeOfRowArray ( ) ) ;
2009-11-30 09:09:03 -05:00
//existing cells are invalidated
2010-05-29 06:28:04 -04:00
assertEquals ( 0 , sheetData . getRowArray ( 1 ) . sizeOfCArray ( ) ) ;
assertEquals ( 0 , row2 . getPhysicalNumberOfCells ( ) ) ;
workbook = XSSFTestDataSamples . writeOutAndReadBack ( workbook ) ;
sheet = workbook . getSheetAt ( 0 ) ;
wsh = sheet . getCTWorksheet ( ) ;
2014-08-27 20:08:41 -04:00
xrow = sheetData . getRowArray ( ) ;
assertEquals ( 3 , xrow . length ) ;
2010-05-29 06:28:04 -04:00
//rows are sorted: {0, 1, 2}
2014-08-27 20:08:41 -04:00
assertEquals ( 4 , xrow [ 0 ] . sizeOfCArray ( ) ) ;
assertEquals ( 1 , xrow [ 0 ] . getR ( ) ) ;
2010-05-29 06:28:04 -04:00
//cells are now sorted
2014-08-27 20:08:41 -04:00
xcell = xrow [ 0 ] . getCArray ( ) ;
assertEquals ( " A1 " , xcell [ 0 ] . getR ( ) ) ;
assertEquals ( " C1 " , xcell [ 1 ] . getR ( ) ) ;
assertEquals ( " D1 " , xcell [ 2 ] . getR ( ) ) ;
assertEquals ( " F1 " , xcell [ 3 ] . getR ( ) ) ;
2010-05-29 06:28:04 -04:00
2014-08-27 20:08:41 -04:00
assertEquals ( 0 , xrow [ 1 ] . sizeOfCArray ( ) ) ;
assertEquals ( 2 , xrow [ 1 ] . getR ( ) ) ;
2010-05-29 06:28:04 -04:00
2014-08-27 20:08:41 -04:00
assertEquals ( 2 , xrow [ 2 ] . sizeOfCArray ( ) ) ;
assertEquals ( 3 , xrow [ 2 ] . getR ( ) ) ;
2010-05-29 06:28:04 -04:00
2015-10-04 20:28:54 -04:00
workbook . close ( ) ;
2009-11-30 09:09:03 -05:00
}
2015-09-20 16:16:17 -04:00
2015-10-04 20:28:54 -04:00
@Test ( expected = IllegalArgumentException . class )
public void createRowAfterLastRow ( ) throws IOException {
2015-09-20 16:16:17 -04:00
createRowAfterLastRow ( SpreadsheetVersion . EXCEL2007 ) ;
}
2010-08-08 07:11:38 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void setAutoFilter ( ) throws IOException {
2010-08-08 07:11:38 -04:00
XSSFWorkbook wb = new XSSFWorkbook ( ) ;
2010-12-02 10:23:35 -05:00
XSSFSheet sheet = wb . createSheet ( " new sheet " ) ;
2010-08-08 07:11:38 -04:00
sheet . setAutoFilter ( CellRangeAddress . valueOf ( " A1:D100 " ) ) ;
assertEquals ( " A1:D100 " , sheet . getCTWorksheet ( ) . getAutoFilter ( ) . getRef ( ) ) ;
2010-12-02 10:23:35 -05:00
// 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 ( ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2010-08-08 07:11:38 -04:00
}
2010-08-18 08:49:05 -04:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void protectSheet_lowlevel ( ) throws IOException {
2014-01-25 21:18:53 -05:00
XSSFWorkbook wb = new XSSFWorkbook ( ) ;
XSSFSheet sheet = wb . createSheet ( ) ;
2010-08-18 08:49:05 -04:00
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 ( ) ) ;
2014-09-04 18:50:28 -04:00
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 ) ;
2010-08-18 08:49:05 -04:00
sheet . protectSheet ( null ) ;
assertNull ( " protectSheet(null) should unset CTSheetProtection " , sheet . getCTWorksheet ( ) . getSheetProtection ( ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2010-08-18 08:49:05 -04:00
}
2014-09-04 18:50:28 -04:00
@Test
2015-10-04 20:28:54 -04:00
public void protectSheet_lowlevel_2013 ( ) throws IOException {
2014-09-04 18:50:28 -04:00
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 " ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2014-09-04 18:50:28 -04:00
}
2010-11-12 07:03:56 -05:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void bug49966 ( ) throws IOException {
XSSFWorkbook wb1 = XSSFTestDataSamples . openSampleWorkbook ( " 49966.xlsx " ) ;
CalculationChain calcChain = wb1 . getCalculationChain ( ) ;
assertNotNull ( wb1 . getCalculationChain ( ) ) ;
2010-11-12 07:03:56 -05:00
assertEquals ( 3 , calcChain . getCTCalcChain ( ) . sizeOfCArray ( ) ) ;
2015-10-04 20:28:54 -04:00
XSSFSheet sheet = wb1 . getSheetAt ( 0 ) ;
2010-11-12 07:03:56 -05:00
XSSFRow row = sheet . getRow ( 0 ) ;
sheet . removeRow ( row ) ;
assertEquals ( " XSSFSheet#removeRow did not clear calcChain entries " ,
0 , calcChain . getCTCalcChain ( ) . sizeOfCArray ( ) ) ;
2013-11-28 16:19:34 -05:00
//calcChain should be gone
2015-10-04 20:28:54 -04:00
XSSFWorkbook wb2 = XSSFTestDataSamples . writeOutAndReadBack ( wb1 ) ;
wb1 . close ( ) ;
assertNull ( wb2 . getCalculationChain ( ) ) ;
wb2 . close ( ) ;
2010-11-12 07:03:56 -05:00
}
2011-02-25 16:44:09 -05:00
/ * *
* See bug # 50829
* /
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void tables ( ) throws IOException {
2011-02-25 16:44:09 -05:00
XSSFWorkbook wb = XSSFTestDataSamples . openSampleWorkbook ( " WithTable.xlsx " ) ;
assertEquals ( 3 , wb . getNumberOfSheets ( ) ) ;
2013-11-28 16:19:34 -05:00
2011-02-25 16:44:09 -05:00
// Check the table sheet
XSSFSheet s1 = wb . getSheetAt ( 0 ) ;
assertEquals ( " a " , s1 . getRow ( 0 ) . getCell ( 0 ) . getRichStringCellValue ( ) . toString ( ) ) ;
2014-01-25 21:18:53 -05:00
assertEquals ( 1 . 0 , s1 . getRow ( 1 ) . getCell ( 0 ) . getNumericCellValue ( ) , 0 ) ;
2013-11-28 16:19:34 -05:00
2011-04-14 10:32:49 -04:00
List < XSSFTable > tables = s1 . getTables ( ) ;
2011-02-25 16:44:09 -05:00
assertNotNull ( tables ) ;
assertEquals ( 1 , tables . size ( ) ) ;
2013-11-28 16:19:34 -05:00
2011-04-14 10:32:49 -04:00
XSSFTable table = tables . get ( 0 ) ;
2011-02-25 16:44:09 -05:00
assertEquals ( " Tabella1 " , table . getName ( ) ) ;
assertEquals ( " Tabella1 " , table . getDisplayName ( ) ) ;
2013-11-28 16:19:34 -05:00
2011-02-25 16:44:09 -05:00
// And the others
XSSFSheet s2 = wb . getSheetAt ( 1 ) ;
assertEquals ( 0 , s2 . getTables ( ) . size ( ) ) ;
XSSFSheet s3 = wb . getSheetAt ( 2 ) ;
assertEquals ( 0 , s3 . getTables ( ) . size ( ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2011-02-25 16:44:09 -05:00
}
2013-11-28 16:19:34 -05:00
2011-09-09 11:11:20 -04:00
/ * *
* Test to trigger OOXML - LITE generating to include org . openxmlformats . schemas . spreadsheetml . x2006 . main . CTSheetCalcPr
* /
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void setForceFormulaRecalculation ( ) throws IOException {
XSSFWorkbook wb1 = new XSSFWorkbook ( ) ;
XSSFSheet sheet = wb1 . createSheet ( " Sheet 1 " ) ;
2013-11-28 16:19:34 -05:00
2015-01-04 05:23:01 -05:00
assertFalse ( sheet . getForceFormulaRecalculation ( ) ) ;
2013-07-13 01:37:41 -04:00
// Set
sheet . setForceFormulaRecalculation ( true ) ;
assertEquals ( true , sheet . getForceFormulaRecalculation ( ) ) ;
2013-11-28 16:19:34 -05:00
2012-10-04 09:26:44 -04:00
// calcMode="manual" is unset when forceFormulaRecalculation=true
2015-10-04 20:28:54 -04:00
CTCalcPr calcPr = wb1 . getCTWorkbook ( ) . addNewCalcPr ( ) ;
2012-10-04 09:26:44 -04:00
calcPr . setCalcMode ( STCalcMode . MANUAL ) ;
sheet . setForceFormulaRecalculation ( true ) ;
assertEquals ( STCalcMode . AUTO , calcPr . getCalcMode ( ) ) ;
2013-11-28 16:19:34 -05:00
2012-10-04 09:26:44 -04:00
// Check
2013-07-13 01:37:41 -04:00
sheet . setForceFormulaRecalculation ( false ) ;
assertEquals ( false , sheet . getForceFormulaRecalculation ( ) ) ;
2013-11-28 16:19:34 -05:00
2013-07-13 01:37:41 -04:00
// Save, re-load, and re-check
2015-10-04 20:28:54 -04:00
XSSFWorkbook wb2 = XSSFTestDataSamples . writeOutAndReadBack ( wb1 ) ;
wb1 . close ( ) ;
sheet = wb2 . getSheet ( " Sheet 1 " ) ;
2013-07-13 01:37:41 -04:00
assertEquals ( false , sheet . getForceFormulaRecalculation ( ) ) ;
2015-10-04 20:28:54 -04:00
wb2 . close ( ) ;
2013-06-17 05:06:39 -04:00
}
2014-01-25 21:18:53 -05:00
@Test
2014-12-28 04:16:57 -05:00
public void bug54607 ( ) throws IOException {
2014-01-25 21:18:53 -05:00
// 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 ) ;
}
2014-12-28 04:16:57 -05:00
private void runGetTopRow ( String file , boolean isXSSF , int . . . topRows ) throws IOException {
2014-01-25 21:18:53 -05:00
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 ) ;
2014-12-28 04:16:57 -05:00
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 ( ) ;
2014-01-25 21:18:53 -05:00
}
}
}
2014-12-28 04:16:57 -05:00
private void runGetLeftCol ( String file , boolean isXSSF , int . . . topRows ) throws IOException {
2014-01-25 21:18:53 -05:00
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 ( ) ) ;
}
2014-12-28 04:16:57 -05:00
swb . close ( ) ;
2014-01-25 21:18:53 -05:00
}
}
@Test
public void bug55745 ( ) throws Exception {
2013-11-28 16:19:34 -05:00
XSSFWorkbook wb = XSSFTestDataSamples . openSampleWorkbook ( " 55745.xlsx " ) ;
XSSFSheet sheet = wb . getSheetAt ( 0 ) ;
List < XSSFTable > tables = sheet . getTables ( ) ;
/ * System . out . println ( tables . size ( ) ) ;
2014-01-25 21:18:53 -05:00
2013-11-28 16:19:34 -05:00
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 ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2013-11-28 16:19:34 -05:00
}
2014-01-01 17:15:44 -05:00
2014-01-25 21:18:53 -05:00
@Test
2015-10-04 20:28:54 -04:00
public void bug55723b ( ) throws IOException {
2014-01-01 17:15:44 -05:00
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 ) ;
2014-01-25 21:18:53 -05:00
2014-01-01 17:15:44 -05:00
// stored with a special name
XSSFName name = wb . getBuiltInName ( XSSFName . BUILTIN_FILTER_DB , 0 ) ;
assertNotNull ( name ) ;
assertEquals ( " Sheet0!$A:$B " , name . getRefersToFormula ( ) ) ;
2014-01-25 21:18:53 -05:00
2014-01-01 17:15:44 -05:00
range = CellRangeAddress . valueOf ( " B:C " ) ;
filter = sheet . setAutoFilter ( range ) ;
assertNotNull ( filter ) ;
2014-01-25 21:18:53 -05:00
2014-01-01 17:15:44 -05:00
// stored with a special name
name = wb . getBuiltInName ( XSSFName . BUILTIN_FILTER_DB , 0 ) ;
assertNotNull ( name ) ;
assertEquals ( " Sheet0!$B:$C " , name . getRefersToFormula ( ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2014-01-01 17:15:44 -05:00
}
2014-01-25 21:18:53 -05:00
@Test ( timeout = 180000 )
2015-10-04 20:28:54 -04:00
public void bug51585 ( ) throws IOException {
XSSFTestDataSamples . openSampleWorkbook ( " 51585.xlsx " ) . close ( ) ; ;
2014-01-25 21:18:53 -05:00
}
2014-07-30 11:27:09 -04:00
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 ;
}
2014-10-20 09:49:51 -04:00
@Test
2015-10-04 20:28:54 -04:00
public void testCreateTwoPivotTablesInOneSheet ( ) throws IOException {
2014-07-30 11:27:09 -04:00
XSSFWorkbook wb = setupSheet ( ) ;
XSSFSheet sheet = wb . getSheetAt ( 0 ) ;
assertNotNull ( wb ) ;
assertNotNull ( sheet ) ;
2015-10-31 16:53:12 -04:00
XSSFPivotTable pivotTable = sheet . createPivotTable ( new AreaReference ( " A1:B2 " , SpreadsheetVersion . EXCEL2007 ) , new CellReference ( " H5 " ) ) ;
2014-07-30 11:27:09 -04:00
assertNotNull ( pivotTable ) ;
assertTrue ( wb . getPivotTables ( ) . size ( ) > 0 ) ;
2015-10-31 16:53:12 -04:00
XSSFPivotTable pivotTable2 = sheet . createPivotTable ( new AreaReference ( " A1:B2 " , SpreadsheetVersion . EXCEL2007 ) , new CellReference ( " L5 " ) , sheet ) ;
2014-07-30 11:27:09 -04:00
assertNotNull ( pivotTable2 ) ;
assertTrue ( wb . getPivotTables ( ) . size ( ) > 1 ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2014-07-30 11:27:09 -04:00
}
2014-10-20 09:49:51 -04:00
@Test
2015-10-04 20:28:54 -04:00
public void testCreateTwoPivotTablesInTwoSheets ( ) throws IOException {
2014-07-30 11:27:09 -04:00
XSSFWorkbook wb = setupSheet ( ) ;
XSSFSheet sheet = wb . getSheetAt ( 0 ) ;
assertNotNull ( wb ) ;
assertNotNull ( sheet ) ;
2015-10-31 16:53:12 -04:00
XSSFPivotTable pivotTable = sheet . createPivotTable ( new AreaReference ( " A1:B2 " , SpreadsheetVersion . EXCEL2007 ) , new CellReference ( " H5 " ) ) ;
2014-07-30 11:27:09 -04:00
assertNotNull ( pivotTable ) ;
assertTrue ( wb . getPivotTables ( ) . size ( ) > 0 ) ;
assertNotNull ( wb ) ;
XSSFSheet sheet2 = wb . createSheet ( ) ;
2015-10-31 16:53:12 -04:00
XSSFPivotTable pivotTable2 = sheet2 . createPivotTable ( new AreaReference ( " A1:B2 " , SpreadsheetVersion . EXCEL2007 ) , new CellReference ( " H5 " ) , sheet ) ;
2014-07-30 11:27:09 -04:00
assertNotNull ( pivotTable2 ) ;
assertTrue ( wb . getPivotTables ( ) . size ( ) > 1 ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2014-07-30 11:27:09 -04:00
}
2014-10-20 09:49:51 -04:00
@Test
2015-10-04 20:28:54 -04:00
public void testCreatePivotTable ( ) throws IOException {
2014-07-30 11:27:09 -04:00
XSSFWorkbook wb = setupSheet ( ) ;
XSSFSheet sheet = wb . getSheetAt ( 0 ) ;
assertNotNull ( wb ) ;
assertNotNull ( sheet ) ;
2015-10-31 16:53:12 -04:00
XSSFPivotTable pivotTable = sheet . createPivotTable ( new AreaReference ( " A1:B2 " , SpreadsheetVersion . EXCEL2007 ) , new CellReference ( " H5 " ) ) ;
2014-07-30 11:27:09 -04:00
assertNotNull ( pivotTable ) ;
assertTrue ( wb . getPivotTables ( ) . size ( ) > 0 ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2014-07-30 11:27:09 -04:00
}
2014-10-20 09:49:51 -04:00
@Test
2015-10-04 20:28:54 -04:00
public void testCreatePivotTableInOtherSheetThanDataSheet ( ) throws IOException {
2014-07-30 11:27:09 -04:00
XSSFWorkbook wb = setupSheet ( ) ;
XSSFSheet sheet1 = wb . getSheetAt ( 0 ) ;
XSSFSheet sheet2 = wb . createSheet ( ) ;
XSSFPivotTable pivotTable = sheet2 . createPivotTable
2015-10-31 16:53:12 -04:00
( new AreaReference ( " A1:B2 " , SpreadsheetVersion . EXCEL2007 ) , new CellReference ( " H5 " ) , sheet1 ) ;
2014-07-30 11:44:05 -04:00
assertEquals ( 0 , pivotTable . getRowLabelColumns ( ) . size ( ) ) ;
2014-07-30 11:27:09 -04:00
assertEquals ( 1 , wb . getPivotTables ( ) . size ( ) ) ;
2014-10-20 09:49:51 -04:00
assertEquals ( 0 , sheet1 . getPivotTables ( ) . size ( ) ) ;
2014-07-30 11:27:09 -04:00
assertEquals ( 1 , sheet2 . getPivotTables ( ) . size ( ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2014-07-30 11:27:09 -04:00
}
2014-10-20 09:49:51 -04:00
@Test
2015-10-04 20:28:54 -04:00
public void testCreatePivotTableInOtherSheetThanDataSheetUsingAreaReference ( ) throws IOException {
2014-07-30 11:27:09 -04:00
XSSFWorkbook wb = setupSheet ( ) ;
XSSFSheet sheet = wb . getSheetAt ( 0 ) ;
2015-10-31 16:53:12 -04:00
XSSFSheet sheet2 = wb . createSheet ( " TEST " ) ;
2014-07-30 11:27:09 -04:00
2015-10-31 16:53:12 -04:00
XSSFPivotTable pivotTable = sheet2 . createPivotTable (
new AreaReference ( sheet . getSheetName ( ) + " !A$1:B$2 " , SpreadsheetVersion . EXCEL2007 ) ,
new CellReference ( " H5 " ) ) ;
2014-07-30 11:44:05 -04:00
assertEquals ( 0 , pivotTable . getRowLabelColumns ( ) . size ( ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2014-07-30 11:27:09 -04:00
}
2015-10-04 20:28:54 -04:00
@Test ( expected = IllegalArgumentException . class )
public void testCreatePivotTableWithConflictingDataSheets ( ) throws IOException {
2014-07-30 11:27:09 -04:00
XSSFWorkbook wb = setupSheet ( ) ;
XSSFSheet sheet = wb . getSheetAt ( 0 ) ;
2015-10-31 16:53:12 -04:00
XSSFSheet sheet2 = wb . createSheet ( " TEST " ) ;
2014-07-30 11:27:09 -04:00
2015-10-31 16:53:12 -04:00
sheet2 . createPivotTable (
new AreaReference ( sheet . getSheetName ( ) + " !A$1:B$2 " , SpreadsheetVersion . EXCEL2007 ) ,
new CellReference ( " H5 " ) ,
sheet2 ) ;
2014-07-30 11:27:09 -04:00
}
2015-01-04 05:23:01 -05:00
2015-10-04 20:28:54 -04:00
@Test ( expected = POIXMLException . class )
public void testReadFails ( ) throws IOException {
2015-01-04 05:23:01 -05:00
XSSFWorkbook wb = new XSSFWorkbook ( ) ;
XSSFSheet sheet = wb . createSheet ( ) ;
2015-10-04 20:28:54 -04:00
// Throws exception because we cannot read here
sheet . onDocumentRead ( ) ;
2015-01-04 05:23:01 -05:00
}
@SuppressWarnings ( " deprecation " )
@Test
2015-10-04 20:28:54 -04:00
public void testCreateComment ( ) throws IOException {
2015-01-04 05:23:01 -05:00
XSSFWorkbook wb = new XSSFWorkbook ( ) ;
XSSFSheet sheet = wb . createSheet ( ) ;
assertNotNull ( sheet . createComment ( ) ) ;
2015-10-04 20:28:54 -04:00
wb . close ( ) ;
2015-01-04 05:23:01 -05:00
}
2015-11-01 21:50:33 -05:00
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 ( ) ) ;
2015-11-04 19:15:51 -05:00
final Date date = LocaleUtil . getLocaleCalendar ( 2000 , Calendar . JANUARY , 1 ) . getTime ( ) ;
2015-11-01 21:50:33 -05:00
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 ( ) ) ;
2015-11-04 19:15:51 -05:00
Date date = LocaleUtil . getLocaleCalendar ( 2000 , Calendar . JANUARY , 1 ) . getTime ( ) ;
2015-11-01 21:50:33 -05:00
assertEquals ( " [Date] E10 cell value " , date , cell . getDateCellValue ( ) ) ;
cell = CellUtil . getCell ( destRow2 , col ) ;
assertEquals ( " [Date] E11 cell type " , Cell . CELL_TYPE_NUMERIC , cell . getCellType ( ) ) ;
2015-11-04 19:15:51 -05:00
date = LocaleUtil . getLocaleCalendar ( 2000 , Calendar . JANUARY , 2 ) . getTime ( ) ;
2015-11-01 21:50:33 -05:00
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 " ) ;
}
2014-01-25 21:18:53 -05:00
}