2012-12-04 38 views
0

感谢http://www.technipelago.se/content/technipelago/blog/44 可以通过行迭代器和列名访问excel单元格。但似乎无法通过名称包含空格的列名进行访问。请给我如何使它能够在ExcelBulider上下文访问由细胞甚至空白说出一些指针。 这里是例子来说明:如何使用POI/ExcelBuilder中的空白列名访问excel单元格

new ExcelBuilder("customers.xls").eachLine([labels:true]) { 
    print firsname // this already possible 
    print <a column name with space> // I wish to have 
} 

其中firstname是列名。我希望可以用空格访问另一列名字。

我可以使用一个字典来封装从列名到列inedx的映射,以实现ExcelBuilder外部列访问的逻辑,但是我希望它更多地封装在一个单独的位置/逻辑中ExcelBuilder。

也许,我还没有的POI和Groovy的建设者技术足够的知识。

请帮忙!

感谢,

+0

可惜ExcelBulider笔者的接触信息不能在上述网站上发现。否则,我可能会问他一些提示。 –

回答

2

这应该工作:

new ExcelBuilder("customers.xls").eachLine([labels:true]) { 
    print firsname 
    print delegate.'a column name with space' 
} 
+0

谢谢!它真的有效。令人惊叹的优雅。 –

+0

我在哪里可以找到委托的黑魔法?我读过“的Groovy在行动”,但不安静明白建设者和元编程的细节,我想魔术会从那里来的? –

+0

@YuShen你好!在[这个问题](http://stackoverflow.com/questions/8120949/what-does-delegate-mean-in-groovy)和[闭合文档](http://groovy.codehaus。组织/闭包)。正如你在'ExcelBuilder'中看到的[在第86行](http://www.technipelago.se/content/technipelago/blog/44),他们调用'closure.setDelegate(this)',所以对' delegate'了'eachLine'瓶盖内将得到建设者,这样的话你可以从它那里得到:-)事实上,'firstname'获取委托自动抬起头来 –

相关问题