0

タイトルのように: XSSFDataValidationHelper のメソッド createFormulaListConstraint("...") を使用して DataValidationConstraint を追加しようとすると、MS Excel で開こうとすると、ポップアップに従って 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('Sites'!$A$2;0;0;COUNTA('Sites'!$A:$A)- 1;1) (シート名を '' で囲み、'=' で囲む)
  • OFFSET('Sites'!$A$2;0;0;COUNTA('Sites'!$A:$A)- 1;1) (シート名の前後に '' を使用、'=' を使用しない)
  • =OFFSET(Sites!$A$2;0;0;COUNTA(Sites!$A:$A)- 1;1) (名前の前後に '' なし、'=' あり)
  • OFFSET(Sites!$A$2;0;0;COUNTA(Sites!$A:$A)- 1;1) (名前の前後に '' なし、'=' なし)

これらのどれも正しくないようです。

これより前に私が持っていたのはただの 'Sites'!$A$2:$A$100 で、これは機能しましたが、結果に空白の値が含まれていました。これは私が必要としているものではありません。

ここで何か間違ったことをしていますか、またはリストに空白の値を含めない別の方法はありますか?

4

1 に答える 1

4

ため息、この質問を投稿してから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");

'Name' クラスの setRefersToFormula は、はるかに優れたエラー処理を提供し、数式の問題点を表示しました ("," が期待されていましたが、";" が見つかりました)。

于 2013-02-21T12:08:02.400 に答える