From 1a60a46ed5e3ba521ce963d2547541c0a5b060da Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 10 Jul 2008 22:57:13 +0000 Subject: [PATCH] Merged revisions 638786-638802,638805-638811,638813-638814,638816-639230,639233-639241,639243-639253,639255-639486,639488-639601,639603-639835,639837-639917,639919-640056,640058-640710,640712-641156,641158-641184,641186-641795,641797-641798,641800-641933,641935-641963,641965-641966,641968-641995,641997-642230,642232-642562,642564-642565,642568-642570,642572-642573,642576-642736,642739-642877,642879,642881-642890,642892-642903,642905-642945,642947-643624,643626-643653,643655-643669,643671,643673-643830,643832-643833,643835-644342,644344-644472,644474-644508,644510-645347,645349-645351,645353-645559,645561-645565,645568-645951,645953-646193,646195-646311,646313-646404,646406-646665,646667-646853,646855-646869,646871-647151,647153-647185,647187-647277,647279-647566,647568-647573,647575,647578-647711,647714-647737,647739-647823,647825-648155,648157-648202,648204-648273,648275,648277-648302,648304-648333,648335-648588,648590-648622,648625-648673,648675-649141,649144,649146-649556,649558-649795,649799,649801-649910,649912-649913,649915-650128,650131-650132,650134-650137,650140-650914,650916-651991,651993-652284,652286-652287,652289,652291,652293-652297,652299-652328,652330-652425,652427-652445,652447-652560,652562-652933,652935,652937-652993,652995-653116,653118-653124,653126-653483,653487-653519,653522-653550,653552-653607,653609-653667,653669-653674,653676-653814,653817-653830,653832-653891,653893-653944,653946-654055,654057-654355,654357-654365,654367-654648,654651-655215,655217-655277,655279-655281,655283-655911,655913-656212,656214,656216-656251,656253-656698,656700-656756,656758-656892,656894-657135,657137-657165,657168-657179,657181-657354,657356-657357,657359-657701,657703-657874,657876-658032,658034-658284,658286,658288-658301,658303-658307,658309-658321,658323-658335,658337-658348,658351,658353-658832,658834-658983,658985,658987-659066,659068-659402,659404-659428,659430-659451,659453-659454,659456-659461,659463-659477,659479-659524,659526-659571,659574,659576-660255,660257-660262,660264-660279,660281-660343,660345-660473,660475-660827,660829-660833,660835-660888,660890-663321,663323-663435,663437-663764,663766-663854,663856-664219,664221-664489,664494-664514,664516-668013,668015-668142,668144-668152,668154,668156-668256,668258,668260-669139,669141-669455,669457-669657,669659-669808,669810-670189,670191-671321,671323-672229,672231-672549,672551-672552,672554-672561,672563-672566,672568,672571-673049,673051-673852,673854-673862,673864-673986,673988-673996,673998-674347,674349-674890,674892-674910,674912-674936,674938-674952,674954-675078,675080-675085,675087-675217,675219-675660,675662-675670,675672-675716,675718-675726,675728-675733,675735-675775,675777-675794 via svnmerge from https://svn.apache.org:443/repos/asf/poi/trunk ........ r675783 | nick | 2008-07-10 23:14:25 +0100 (Thu, 10 Jul 2008) | 1 line Add disabled test for bug #45376 ........ r675785 | nick | 2008-07-10 23:22:24 +0100 (Thu, 10 Jul 2008) | 1 line Tweak test to run forward and back ........ r675792 | nick | 2008-07-10 23:39:53 +0100 (Thu, 10 Jul 2008) | 1 line Improve javadocs relating to getLastRowNumber ........ r675793 | nick | 2008-07-10 23:43:01 +0100 (Thu, 10 Jul 2008) | 1 line Add a test to show that the behaviour around bug #30635 is exactly as you would expect, and the bug report is invalid ........ git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@675795 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hssf/usermodel/HSSFSheet.java | 17 +++-- .../org/apache/poi/hssf/data/45376.xls | Bin 0 -> 27648 bytes .../apache/poi/hssf/usermodel/TestBugs.java | 49 +++++++++++++ .../usermodel/TestFormulaEvaluatorBugs.java | 66 ++++++++++++++++++ 4 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 src/testcases/org/apache/poi/hssf/data/45376.xls diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index dc18e5599..2e93d4612 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -365,18 +365,25 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet } /** - * gets the first row on the sheet - * @return the number of the first logical row on the sheet + * Gets the first row on the sheet + * @return the number of the first logical row on the sheet, zero based */ - public int getFirstRowNum() { return firstrow; } /** - * gets the last row on the sheet - * @return last row contained n this sheet. + * Gets the number last row on the sheet. + * Owing to idiosyncrasies in the excel file + * format, if the result of calling this method + * is zero, you can't tell if that means there + * are zero rows on the sheet, or one at + * position zero. For that case, additionally + * call {@link #getPhysicalNumberOfRows()} to + * tell if there is a row at position zero + * or not. + * @return the number of the last row contained in this sheet, zero based. */ public int getLastRowNum() diff --git a/src/testcases/org/apache/poi/hssf/data/45376.xls b/src/testcases/org/apache/poi/hssf/data/45376.xls new file mode 100644 index 0000000000000000000000000000000000000000..74602fd0b7caf9e946da734e108494e566f914d8 GIT binary patch literal 27648 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 D(>WJg literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index bfd359318..45671484a 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -1273,4 +1273,53 @@ public final class TestBugs extends TestCase { assertEquals("{=sin(B1:B9){9,1)[1][0]", nc2.getCellFormula()); assertEquals("{=sin(B1:B9){9,1)[2][0]", nc3.getCellFormula()); } + + /** + * People are all getting confused about the last + * row and cell number + */ + public void test30635() throws Exception { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet s = wb.createSheet(); + + // No rows, everything is 0 + assertEquals(0, s.getFirstRowNum()); + assertEquals(0, s.getLastRowNum()); + assertEquals(0, s.getPhysicalNumberOfRows()); + + // One row, most things are 0, physical is 1 + s.createRow(0); + assertEquals(0, s.getFirstRowNum()); + assertEquals(0, s.getLastRowNum()); + assertEquals(1, s.getPhysicalNumberOfRows()); + + // And another, things change + s.createRow(4); + assertEquals(0, s.getFirstRowNum()); + assertEquals(4, s.getLastRowNum()); + assertEquals(2, s.getPhysicalNumberOfRows()); + + + // Now start on cells + HSSFRow r = s.getRow(0); + assertEquals(-1, r.getFirstCellNum()); + assertEquals(-1, r.getLastCellNum()); + assertEquals(0, r.getPhysicalNumberOfCells()); + + // Add a cell, things move off -1 + r.createCell((short)0); + assertEquals(0, r.getFirstCellNum()); + assertEquals(1, r.getLastCellNum()); // last cell # + 1 + assertEquals(1, r.getPhysicalNumberOfCells()); + + r.createCell((short)1); + assertEquals(0, r.getFirstCellNum()); + assertEquals(2, r.getLastCellNum()); // last cell # + 1 + assertEquals(2, r.getPhysicalNumberOfCells()); + + r.createCell((short)4); + assertEquals(0, r.getFirstCellNum()); + assertEquals(5, r.getLastCellNum()); // last cell # + 1 + assertEquals(3, r.getPhysicalNumberOfCells()); + } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java index 349cfa8a8..318fcd2bf 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java @@ -294,4 +294,70 @@ public final class TestFormulaEvaluatorBugs extends TestCase { throw e; } } + + /** + * Apparently, each subsequent call takes longer, which is very + * odd. + * We think it's because the formulas are recursive and crazy + */ + public void DISABLEDtestSlowEvaluate45376() throws Exception { + HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("45376.xls"); + + final String SHEET_NAME = "Eingabe"; + final int row = 6; + final HSSFSheet sheet = wb.getSheet(SHEET_NAME); + + int firstCol = 4; + int lastCol = 14; + long[] timings = new long[lastCol-firstCol+1]; + long[] rtimings = new long[lastCol-firstCol+1]; + + long then, now; + + final HSSFRow excelRow = sheet.getRow(row); + for(int i = firstCol; i <= lastCol; i++) { + final HSSFCell excelCell = excelRow.getCell(i); + final HSSFFormulaEvaluator evaluator = new + HSSFFormulaEvaluator(sheet, wb); + + evaluator.setCurrentRow(excelRow); + + now = System.currentTimeMillis(); + evaluator.evaluate(excelCell); + then = System.currentTimeMillis(); + timings[i-firstCol] = (then-now); + System.err.println("Col " + i + " took " + (then-now) + "ms"); + } + for(int i = lastCol; i >= firstCol; i--) { + final HSSFCell excelCell = excelRow.getCell(i); + final HSSFFormulaEvaluator evaluator = new + HSSFFormulaEvaluator(sheet, wb); + + evaluator.setCurrentRow(excelRow); + + now = System.currentTimeMillis(); + evaluator.evaluate(excelCell); + then = System.currentTimeMillis(); + rtimings[i-firstCol] = (then-now); + System.err.println("Col " + i + " took " + (then-now) + "ms"); + } + + // The timings for each should be about the same + long avg = 0; + for(int i=0; i 1.5*avg) { + System.err.println("Doing col " + (i+firstCol) + + " took " + timings[i] + "ms, vs avg " + + avg + "ms" + ); + } + } + } } \ No newline at end of file