Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Delphi и WordBasic

Delphi , Технологии , OLE Automation MSOffice

Delphi и WordBasic

- Помогите! У меня Word при печати вместо букв квадратики выводит! Help! Help! Что мне делать? Посоветуйте!
- А ты в квадратики нужные буквы вписывай...


unit oleword;
// Необходима форма и компоненты Memo и Edit на ней.
// Написано для MSWord 8.
// Также необходимо создать тестовый документ d:\test.doc
interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  OLEAuto, ShellAPI, StdCtrls;

type

  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    MSWord: Variant;
    // WordVersion: Byte;
  end;

var

  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  Test, Test1: Integer;

  AString: Variant;
begin

  MSWord := CreateOLEObject('Word.Application'); //Word 8
  MSWord.Documents.Open(FileName := 'd:\test.doc', ReadOnly := True);
  MSWord.Visible := 1; //Закомментарьте, если вы нехотите показывать файл;
  Test := MSWord.FontNames.Count;
  for Test1 := 1 to Test do
  begin
    AString := MSWord.FontNames.Item(Test1);
    Memo1.Lines.Add(AString);
  end;
  MSWord.ActiveDocument.Range(Start := 0,
end := 0);
MSWord.ActiveDocument.Range.InsertAfter(Text := 'Заголовок');
MSWord.ActiveDocument.Range.InsertParagraphAfter;
MSWord.ActiveDocument.Range.Font.Name := 'Arial';
MSWord.ActiveDocument.Range.Font.Size := 24;
AString := MSWord.ActiveDocument.Range.Font.Name;
Edit1.Text := AString;
end;

end.

Перевод контента на русский язык:

Похоже, вы пытаетесь создать приложение Delphi, которое взаимодействует с Microsoft Word (версия 8). Проблема в том, что символы заменены квадратами вместо фактического текста.

Чтобы помочь вам решить эту проблему, я предоставлю некоторые советы и инсайды вашего кода:

  1. Проверьте установку Word: Убедитесь, что MS Word 8 правильно установлен на вашем компьютере. Проверьте, не является ли это коррупцией или устаревшей версией.
  2. Проблемы с шрифтами: Переменная AString присваивается имя шрифта из Word, но может не быть правильно интерпретировано Delphi. Попробуйте использовать Edit1.Text := AString + #13 + ' ' (конкатенируйте с новой строкой и пробелом) для проверки.
  3. Создание OLEObject: Проверьте, создается ли OLEObject успешно с помощью CreateOLEObject('Word.Application'). Если это не удается, вам может потребоваться изменение кода или проверка установки Word.
  4. Имена шрифтов: Имя шрифта, присваиваемое MSWord.ActiveDocument.Range.Font.Name, может не быть распознано Delphi. Попробуйте установить известное имя шрифта, например, 'Arial' вместо динамического значения из Word.
  5. Кодировка текста: Возможно, текст кодируется неправильно. Вы можете попробовать добавить AString := MSWord.ActiveDocument.Range.Text; Memo1.Lines.Add(AString); для проверки.

В отношении самого кода, здесь есть некоторые минорные предложения:

  • Переменная Test не используется в коде, кроме счета имен шрифтов. Рассмотрите удаление ее или использование более описательного имени.
  • Вы можете объединить два заявления MSWord.ActiveDocument.Range в одно: MSWord.ActiveDocument.Range(Start := 0, End := 0).InsertAfter('Заголовок').ParagraphBreak.
  • Свойства Font.Name и Font.Size устанавливаются отдельно. Вы могли бы объединить их в одиночное заявление: MSWord.ActiveDocument.Range.Font.Name := 'Arial'; MSWord.ActiveDocument.Range.Font.Size := 24;

Вот обновленная версия вашего кода, которая включает эти предложения:

procedure TForm1.Button1Click(Sender: TObject);
var
  AString: Variant;
begin
  MSWord := CreateOLEObject('Word.Application'); // Word 8
  MSWord.Documents.Open(FileName := 'd:\test.doc', ReadOnly := True);
  MSWord.Visible := 1; // Комментируйте, если не хотите отображать файл;

  for i := 1 to MSWord.FontNames.Count do
  begin
    AString := MSWord.FontNames.Item(i);
    Memo1.Lines.Add(AString + #13 + ' ');
  end;

  MSWord.ActiveDocument.Range(Start := 0, End := 0).InsertAfter('Заголовок').ParagraphBreak;
  MSWord.ActiveDocument.Range.Font.Name := 'Arial';
  MSWord.ActiveDocument.Range.Font.Size := 24;
  AString := MSWord.ActiveDocument.Range.Text;
  Edit1.Text := AString;
end;

Если ни одна из этих предложений не поможет, пожалуйста, предоставьте более информации о вашей версии Delphi и точном сообщении об ошибке.

Артикул описывает решение проблемы вывода квадратов вместо букв в Word, используя язык программирования Delphi и компонент OLEAuto для взаимодействия с Microsoft Word.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE Automation MSOffice ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:01:54/0.0057401657104492/1