2012-03-21 6 views
4

셀 값이 책갈피이고 프로그래밍 방식으로 책갈피가 업데이트 될 때 OpenOffice Writer (3.3) 셀 계산을 프로그래밍 방식으로 새로 고치는 방법을 찾지 못했습니다. Java에서 호출).OpenOffice writer - 프로그래밍 방식으로 셀 수식을 사용하여 테이블을 업데이트하는 중

사용자가 수동들은 다음 셀로 이동할 때, 값이 갱신되는 테이블을 편집 할 때이 잘 작동

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

예. 그러나 셀의 책갈피에 텍스트를 삽입하여 프로그래밍 방식으로 값을 업데이트하면 계산 된 셀이 업데이트되지 않습니다. 테이블을 클릭하면 업데이트되지만 자동으로 표시됩니다.

북마크는 다음과 같은 테이블에 있습니다.

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

나 자신을 알아 냈어요 :

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

예제 코드는 책갈피를 업데이트합니다.

  • 쿼리 텍스트에서 공급 업체를 필드 ... 그래서 전통적인 긴 역풍 (그러나 재미) UNO 메타 프로그래밍 스타일을 사용하여 - 열쇠는 XRefreshable를 사용하여 테이블에서 해당 셀 수식은 "텍스트 필드"로 계산 알고있다 텍스트에서 XTextDocument 인스턴스
  • 쿼리 새로 고침 예를 열거에게
  • 호출 새로 고침

업데이트 필드 : 식의 소스 셀 형식이 그들에 적용한 갱신되는 경우가 작동하지 않습니다, 대상의 형식을 세포는 중요하지 않습니다.

코드

XTextFieldsSupplier tfSupplier = (XTextFieldsSupplier) 
     UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); 
XRefreshable refreshable = (XRefreshable) 
     UnoRuntime.queryInterface(XRefreshable.class, tfSupplier.getTextFields()); 
refreshable.refresh();