2014-11-13 89 views
0

我有這種類型的變量:XSSFSheet sheet(我使用apache-poi從Excel中讀取)。Groovy可以在簡單控制檯中的XSSFSheet上使用下標,但在IntelliJ中它不能使用

在簡單的groovy控制檯中,我可以按sheet[4][5]通過座標訪問某個單元格。當我嘗試的IntelliJ同樣的事,它給了我,

No signature of method: org.apache.poi.xssf.usermodel.XSSFSheet.getAt() is applicable for argument types: (java.lang.Integer) values: [0] 
Possible solutions: getAt(java.lang.String), getRow(int), putAt(java.lang.String, java.lang.Object), wait(), last(), first() 

我看着在基準而事實上,XSSFSheet不能由一個整數索引除外。但爲什麼然後在它隨附的簡單常規控制檯中可能呢?我可以在IntelliJ中執行相同的操作嗎?

+4

和intellij你是什麼意思?你在classpath中有一個groovy-all.jar項目?這個版本的groovy與你用於shell的版本完全不同嗎?你試過'sheet ['4'] [5]'? – cfrick

+0

sheet ['4'] [5]也不起作用。 當我添加groovy-all.jar後,它說:'java.lang.LinkageError:接口中的加載器約束違規itable初始化:解析方法時「org.apache.xmlbeans.impl.store.Xobj $ NodeXobj.getChildNodes()Lorg/W3C/DOM /節點列表;」當前類的類加載器(org/codehaus/groovy/tools/RootLoader的實例),org/apache/xmlbeans/impl/store/Xobj $ NodeXobj和類加載器(實例),用於接口org/w3c/DOM /節點有不同的Class對象,用於簽名中使用的org/w3c/dom/NodeList類型 –

+0

我在IntelliJ中有一個Gradle項目,groovy已經安裝和配置,所以我讀了我不需要groovy-all jar 。 –

回答

1

這是舊的,我只是回答,因爲我想知道你在上次評論中提出的問題,並找到答案試圖理解。

,正如你在最後的評論提到,在常規下標操作轉換到getAt()方法,和你說了,XSSFSheet類沒有這樣的方法在java中

由於它確實可以從常規中調用,它確實存在於某處。通過一些元編程,我們得到以下內容:

def getAt = org.apache.poi.xssf.usermodel.XSSFRow.metaClass.getMetaMethod("getAt", [java.lang.Integer] as Class[]) 
println getAt 

[email protected][name: getAt params: [int] returns: class java.lang.Object owner: interface java.lang.Iterable] 

這意味着它來自於Iterable接口。而且,這不是真的in java。但groovy爲標準java類增加了許多方法,實際上我們可以看到here它將getAt()方法添加到Iterable

這並不回答你原來的問題(爲什麼它不能在你的IntelliJ中工作?它應該在這裏),但它在評論中回答了一個問題。我會在那裏發佈它,但我缺乏聲譽。

相關問題