2013-02-21 138 views
0

像標題所示:當我嘗試使用XSSFDataValidationHelper的方法createFormulaListConstraint(「...」)添加DataValidationConstraint時,根據彈出窗口顯示excel文件的內容不正確當我嘗試在MS Excel中打開它時。apache POI createFormulaListConstraint在打開Excel時導致「無法讀取的內容」

當我創建使用Excel這個公式按預期工作數據驗證:

=OFFSET(Sites!$A$2;0;0;COUNTA(Sites!$A:$A)- 1;1) 

現在我試圖做同樣的使用Apache POI 3.8:

XSSFDataValidationConstraint siteNamesConstraint = (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint("=OFFSET('Sites'!$A$2;0;0;COUNTA('Sites'!$A:$A)- 1;1)"); 

我得到的錯誤時,打開excel文件。

我曾嘗試其它式,以及:

  • = OFFSET( '站點' $ A $ 2; 0; 0; COUNTA( '站點' $ A:!$ A) - 1; 1) ('''''''''''''');('''''''''$ A:$ A) - 1; 1)(with '')
  • = OFFSET(Sites!$ A $ 2; 0; 0; COUNTA(Sites!$ A:$ A) - 1; 1)(名稱周圍沒有'''') ,'=')
  • OFFSET(網站!$ A $ 2; 0; 0; COUNTA(Sites!$ A:$ A) - 1; 1)(名稱周圍沒有'','=')

這些看起來都不正確。

我在此之前只有'網站'!$ A $ 2:$ A $ 100,這工作,但它包含結果中的空白值,這不是我所需要的。

我在這裏做錯了什麼,或者有另一種方式不包括列表中的空白值?

回答

3

感嘆,我在發佈這個問題後5分鐘才找到解決方案。

在Excel中輸入公式時「;」在POI中用作函數的分隔符,但分隔符是「,」。

嘗試下面的代碼時,我發現這一點:

Name namedRange = wb.createName(); 
namedRange.setNameName("sites"); 
namedRange.setRefersToFormula("OFFSET('Sites'!$A$2,0,0,COUNTA('Sites'!$A:$A)- 1,1)"); 

然後參照它:

(XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint("sites"); 

「名稱」類的setRefersToFormula提供更好的錯誤處理和顯示的內容我的公式錯誤(「,」預計但是「;」找到)。

相關問題