2012-12-04 40 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'獲取委託自動擡起頭來 –

相關問題