2012-03-21 6 views
4

セル値がブックマークであり、ブックマークがプログラムで更新されたときに、OpenOffice Writer(3.3)セルの計算をプログラムでリフレッシュする方法を見つけようとしています。 Javaでの呼び出し)。OpenOffice writer - プログラムでセル式を使用してテーブルを更新する

| start | stop | duration | 
| 9:30 | 11:30 | = <A2>-<B2> | <= cell formula 

これは、ユーザーが手動でテーブルを編集しているとき、彼らは次のセルに移動すると、値が更新されて正常に動作します。しかし、セルのブックマークにテキストを挿入して値をプログラムで更新すると、計算されたセルは更新されません。あなたがテーブルをクリックすると更新されますが、私はこれを自動的にしたいと思います。

ブックマークは次のような表にあります。

| start  | stop | duration | 
| <start0> | <stop0> | = <A2>-<B2> | 

例コードブックマークを更新する:

XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(XBookmarksSupplier.class, document); 
XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks(); 

Object bookmark = xNamedBookmarks.getByName("stop0"); 
XTextContent xBookmarkContent = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, bookmark); 
xBookmarkContent.getAnchor().setString("11:30"); 

// code needed to force calculation of duration cell 

答えて

3

私は自分自身をそれを考え出しました。クエリテキストからサプライヤーをフィールド

  • ...限りったらしい(しかし楽しい)伝統的なUNOメタプログラミングスタイルを使用して - キーがXRefreshableを使用して、テーブル内のセルの数式は、「テキストフィールド」としてカウントすることを知ることです更新されている式で元の細胞がそれらにフォーマットを適用した場合、これは動作しません、先の形式:テキストからXTextDocumentインスタンス
  • クエリリフレッシュインスタンスを列挙
  • コールリフレッシュ

アップデートをフィールド細胞は重要ではない。

コード

XTextFieldsSupplier tfSupplier = (XTextFieldsSupplier) 
     UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); 
XRefreshable refreshable = (XRefreshable) 
     UnoRuntime.queryInterface(XRefreshable.class, tfSupplier.getTextFields()); 
refreshable.refresh(); 
関連する問題