2014-07-09 6 views
1

MS Word 문서 내에서 기존 테이블에 새 행을 추가하려고합니다. POI 3.10, hwpf 라이브러리를 사용합니다. 그러나이 프로그램을 실행하면 파일이 손상되고 MS Word가 경고 메시지를 표시합니다. 모든 콘텐츠가 이상하게 보입니다. 서식이 지정되지 않았습니다.Java Apache 기존 테이블에 새 행을 추가하는 POI입니다. Word 문서

샘플은 다음과 같습니다 :

InputStream fin = new FileInputStream(args[0]); 
    POIFSFileSystem fs = new POIFSFileSystem(fin); 

    HWPFDocument doc = new HWPFDocument(fs); 
    Range range = doc.getRange(); 

    range.getParagraph(269).insertAfter("TEST"); 
    doc.write(new FileOutputStream("SOME PATH")); 

새로운 CharacterRun가 추가되기 때문에 아마 추가 뭔가 (예에 대한 SI, DSI.) 업데이트해야?

+0

발생한 경고 메시지는 무엇입니까? – Jacinda

+0

안녕하세요, 메시지는 다음과 같이 들립니다. "이 문서의 표가 손상되었습니다." – Oljko

답변

1

Word97/2000 형식 DOC 파일은 HWPF에 의한 단순한 변형에서만 지원됩니다. 테이블은 이미 중요합니다. Word가 라이브러리를 사용하여 작성/수정 한 파일을 거부하면 운이 좋지 않게됩니다.

나는 얼마 전 고객을 위해 아파치의 HWPF 코드베이스를 기반으로 맞춤 라이브러리를 개발했다. 이 사용자 지정 라이브러리는 많은 기능에 대한 지원을 추가했으며 Word 파일을 안정적으로 작성할 수있었습니다. 이 모든 일을 올바르게하는 것은 많은 일이었습니다. 따라서 작은 것들만 고치는 것은 불가능합니다. 몇 달을 보내야합니다.

Word에서 빈 행을 만들고이를 HWPF로 채울 수있는 옵션이 있습니까?

편집 : 주위 가능성 기능 일 :

사전 채우기 마커 테이블 :

+--------+-------------+------------------------------------+ 
| Rev 1 | 2014-01-01 | Created document     | 
+--------+-------------+------------------------------------+ 
| Rev 2 | 2014-01-02 | Corrected flow chart    | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 

는 마커가 충분히 긴 있는지 확인합니다. (단락의 주소가 문제를 일으킬 수 있습니다 테이블에 변경할 수 있도록 HWPF에 텍스트를 추가.)

은 행이 이렇게 채우려면 :

  1. 한 행
  2. 각 마커 마커 세트를 발견해야한다 텍스트를 준비
  3. 모든 후속 #의 -characters는
  4. 이 텍스트는 ASCII 문자 (아래 참조)
  5. 당신의 텍스트를보다 더 있는지 확인 사용 확인 각 마커에 채워질 포함 개정
  6. 소프트웨어가 새 행을 찾을 수없는 경우, 누군가가 Word에서 새 행 템플릿을 추가해야합니다 공간

와 나머지 #의 -characters을 새로운 내용으로 수정 표식을 입력하고 입력 마커. 몇 가지 제한 사항에 대한

이유 :

없이 삽입 : 많은 것들이이 텍스트 스트림에 주소 (텍스트 내용에 주소 참조를 포함하는 내부 별도의 테이블 많이)에 저장됩니다. 이는 단락 테두리, 문자 서식, 표 표시, 책갈피, 그래픽 참조 등에 적용됩니다. 일부 사항은 HWPF에서 다루어지기 때문에 많은 부분이 없습니다. 텍스트를 삽입하면 주소가 바뀌고 Word 파일이 손상 될 수 있습니다.

ASCII 범위 : 텍스트 시퀀스는 문자 당 1 바이트 또는 문자 당 2 바이트로 저장됩니다.올바르게 수행 할 때 비 ASCII 문자를 1 바이트 범위에 삽입하려면 해당 범위를 2 바이트 범위로 변환해야합니다. 이것은 HWPF에서 항상 잘 작동하는 것은 아니며 주소 이동으로 연결됩니다 (위의 "삽입 안 함"참조).

문서가 "더 간단하다"는 경우 약간의 제약이있을 수 있습니다. 예 : 텍스트 상자가 더 좋지 않습니다. 임베디드 드로잉이 더 좋습니다. 중첩 테이블이 더 좋습니다. 그러나 일반적으로 제한이 너무 엄격하므로 일반 텍스트 문서를 사용하고 .doc 확장명을 지정할 수 있습니다.

자세한 내용이 필요하면 알려주세요.

+0

감사합니다 Rainer 정보. 이 프로그램의 목적은 기존 문서 내의 개정 내역을 업데이트하는 것입니다. 개정 내역 장은 테이블입니다.이 테이블을 어떻게 든 새 정보로 업데이트해야합니다. 내가 어떻게 할 수 있는지 몇 가지 제안있어? – Oljko

+0

@Oljko : 답변을 제안으로 업데이트하겠습니다. –

+0

안녕하세요 @ 좋은, 좋은 생각, 나는 그를 위해 괜찮은 고객과 협상을해야합니다. 한 가지 더 궁금한 점은 이런 식으로 생각하는 것이 가능하다는 것입니다. – Oljko