문제

이름과 숫자가 포함된 양식에 ListView가 있고 해당 데이터가 문서 테이블에 채워진 MSWord 문서 인쇄를 제공해야 합니다.모든 것이 영어 문자와 잘 작동하지만 동유럽이나 러시아 문자를 보내려고 할 때 문서에서 "?" 또는 "쓰레기".또한 문서에서 응용 프로그램으로 해당 문자를 읽을 수 없습니다.

내 질문은 다음과 같습니다

  1. 다음과 같은 문자를 보내는 방법 "ЉЊĐŠŽČ" Word 문서로?
  2. MSWord에서 이러한 문자를 다시 응용 프로그램으로 읽는 방법은 무엇입니까?

간단히 말해서 코드는 다음과 같습니다.

word := CreateOleObject('Word.Application');
word.Visible := true;
doc := word.documents.Open(ExtractFilePath(Application.ExeName) + '\tpl.doc');

table := word.ActiveDocument.Tables.Item(1);
table.Cell(1,2).Range.Text := 'MY TEXT';

word.ActiveDocument.Close;
word.Quit;
word := UnAssigned;
doc := UnAssigned;
table := UnAssigned;

글꼴을 변경할 수 있어요 name, size 그리고 color 속성을 사용하면 그렇게 할 수 없습니다 charset 재산.

아무도?


설치된 소프트웨어:

  • 윈도우 XP 프로페셔널
  • 마이크로소프트 워드 2003
  • 델파이 7 엔터프라이즈 에디션
도움이 되었습니까?

해결책

문제는 후기 바인딩을 사용하여 OLE 자동화를 통해 Word를 호출한다는 사실에서 발생합니다.

그래서 Range.Text Delphi 7에서는 WideString(유니코드) 콘텐츠를 기대하는 메서드가 아니라 일반 ASCII 텍스트를 기대하는 메서드로 알려져 있습니다.

첫 번째 해결책은 Delphi 2009 이상을 사용하는 것입니다.새로운 string 유형은 그러한 유니코드 할당을 투명하게 만들었습니다.

Delphi 7에서는 유형을 WideString으로 강제 변환하는 것은 어떻습니까?

 table.Cell(1,2).Range.Text := WideString('MY TEXT'); 

또는 다음과 같이 임시 변수를 사용합니다.

 var tmp: WideString; 

   tmp := 'ЉЊĐŠŽČ'
   table.Cell(1,2).Range.Text := tmp; 

또 다른 가능성은 후기 바인딩을 사용하지 않고 Office의 OLE 인터페이스를 직접 선언하여 "마이크로 소프트 워드 ???개체 라이브러리"를 IDE의 "프로젝트" 메뉴에서 선택하세요.

가져온 인터페이스에는 와이드스트링 유형이 있습니다. 예:

Range = interface(IDispatch)
  ['{0002095E-0000-0000-C000-000000000046}']
  function Get_Text: WideString; safecall;
  procedure Set_Text(const prop: WideString); safecall;
  (...)
  property Text: WideString read Get_Text write Set_Text;

따라서 더 이상 Ansi 문자 집합에 문제가 발생하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top