jameskleeh / groovy-excel-builder

A Groovy DSL for Building Excel Files
Apache License 2.0
46 stars 14 forks source link

Exception when anchor in formula with 2-letter column #25

Closed kortov closed 5 years ago

kortov commented 5 years ago

When you use 2-letter column and anchor it, then the exception is thrown because in the code only self[0] is taken.

https://github.com/jameskleeh/groovy-excel-builder/blob/3f77031ca01365cfc36a22355024bc47d88448ee/src/main/groovy/com/jameskleeh/excel/extensions/StringExtension.groovy#L34

I created an mvce

Exception in thread "main" org.apache.poi.ss.formula.FormulaParseException: Parse error near char 0 '$' in specified formula '$A$F3'. Expected number, string, defined name, or data table
    at org.apache.poi.ss.formula.FormulaParser.expected(FormulaParser.java:269)
    at org.apache.poi.ss.formula.FormulaParser.parseAsName(FormulaParser.java:926)
    at org.apache.poi.ss.formula.FormulaParser.parseNonRange(FormulaParser.java:893)
    at org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:501)
    at org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:322)
    at org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1540)
    at org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1498)
    at org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1485)
    at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1858)
    at org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1986)
    at org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1970)
    at org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1927)
    at org.apache.poi.ss.formula.FormulaParser.intersectionExpression(FormulaParser.java:1900)
    at org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1880)
    at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:2028)
    at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:170)
    at org.apache.poi.xssf.usermodel.XSSFCell.setFormula(XSSFCell.java:566)
    at org.apache.poi.xssf.usermodel.XSSFCell.setCellFormula(XSSFCell.java:544)
    at com.jameskleeh.excel.internal.CreatesCells.formula(CreatesCells.groovy:159)
    at com.jameskleeh.excel.internal.CreatesCells.formula(CreatesCells.groovy:136)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at ExcelBookFormula$_write_closure1$_closure2$_closure4.doCall(ExcelBookFormula.groovy:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.lang.Closure.call(Closure.java:430)
    at com.jameskleeh.excel.Sheet.row(Sheet.groovy:196)
    at com.jameskleeh.excel.Sheet.row(Sheet.groovy:169)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at ExcelBookFormula$_write_closure1$_closure2.doCall(ExcelBookFormula.groovy:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.lang.Closure.call(Closure.java:430)
    at com.jameskleeh.excel.Workbook.handleSheet(Workbook.groovy:114)
    at com.jameskleeh.excel.Workbook.sheet(Workbook.groovy:55)
    at com.jameskleeh.excel.Workbook.sheet(Workbook.groovy:66)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:174)
    at ExcelBookFormula$_write_closure1.doCall(ExcelBookFormula.groovy:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.lang.Closure.call(Closure.java:430)
    at com.jameskleeh.excel.ExcelBuilder.build(ExcelBuilder.groovy:55)
    at com.jameskleeh.excel.ExcelBuilder$build.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at ExcelBookFormula.write(ExcelBookFormula.groovy:27)
    at FormulaBugCheck.main(FormulaBugCheck.java:4)
kortov commented 5 years ago

Thanks!