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

Wordbasic с параметрами из Delphi

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

Wordbasic с параметрами из Delphi

Имевшая место дискуссия двух начинающих программистов-школьников. Повод - спор, кто больше операторов Бейсика назовет. Перебрали почти все им известные, долго думают. Первый (радостно): LINE!
Второй (спокойно): LINE INPUT!
Первый (с досадой): ГНИДА!
Второй (спокойно): ГНИДА INPUT!

Привожу некоторый Delphi код для работы с Word 95. Я протестировал его под Word 97 и, как оказалось, потребовалось внести некоторые исправления - он не захотел работать под ним, но что самое неприятное - после исправлений ошибок выяснилось, что Word 97 работает значительно медленнее, чем Word 95. SendKeys был применен от отчаяния.


function TAutoMerge.ProcessMerge(FSource, FData, FOutput: string):
  boolean;
var
  MSWord: Variant;
  i, NumDocs: integer;
  Found: boolean;
  s, LastOLECommand: string;
begin
  ProcessMerge := False;
  try
    LastOLECommand := 'Creating OLE Object.';
    MSWord := CreateOLEObject('Word.Basic');
    LastOLECommand := 'Show MS Word.';
    MSWord.AppShow;
    Application.ProcessMessages;

    LastOLECommand := 'Open document file >' + FSource + '<.';
    MSWord.FileOpen(Name := FSource, ConfirmConversions := 0,
      ReadOnly := 1, AddToMru := 0, PasswordDoc := '',
      PasswordDot := '', Revert := 0,
      WritePasswordDoc := '',
      WritePasswordDot := '');
    LastOLECommand := 'Screen updating = false.';
    MSWord.ToolsOptionsSpelling(AutomaticSpellChecking := 0);
    LastOLECommand := 'Set background printing to off.';
    MSWord.ToolsOptionsPrint(Background := 0);

    Application.ProcessMessages;
    LastOLECommand := 'Open Data file >' + FData + '<.';
    MSWord.MailMergeOpenDataSource(Name := FData, ConfirmConversions := 0,
      ReadOnly := 1, LinkToSource := 1,
      AddToMru := 0,
      PasswordDoc := '', PasswordDot := '',
      WritePasswordDoc := '', WritePasswordDot := '',
      Connection := '', SQLStatement := '',
      SQLStatement1 := '',
      Revert := 1);

    LastOLECommand := 'Start the Mail Merge.';
    MSWord.MailMerge(CheckErrors := 2, Destination := 1,
      MergeRecords := 0,
      From := '', to := '', Suppression := 0,
      MailSubject := '',
      MailAsAttachment := 0, MailAddress := '');

    LastOLECommand := 'Set up for SendKeys to select printer.';
    Application.ProcessMessages;
    MSWord.AppShow;
    s := '{home}%l{enter}{home}%n' + FOutput + '{tab}{enter}{home}{enter}';
    // sdd 1.1
    MSWord.SendKeys(s, -1);
    MSWord.MailMergeToPrinter;
    Application.ProcessMessages;

    ProcessMerge := True;
    LastOLECommand := 'All done with merge.';
  except
    on EOleException do
    begin
      inc(TotalOLEErrors);
      lblStatus.caption := LastOLECommand;
      if (TotalOLEErrors >= TOTALOLEERRORS_MAX) then
      begin
        s := 'Имеется по крайней мере одна ошибка OLE (' +
          IntToStr(TotalOLEErrors) +

        '), последней ошибкой было >' + LastOLECommand + '<.';
        ShowMessage(s);
      end;
    end
  end;
end;

Функция ProcessMerge в Delphi автоматизирует процесс почтовой слияния в Microsoft Word с помощью технологии OLE (Object Linking and Embedding). Функция принимает три параметра типа string: FSource, FData и FOutput, которые представляют собой исходный документ, файл данных и файл вывода соответственно.

Вот шаг за шагом, что код делает:

  1. Создает экземпляр Word Basic с помощью CreateOLEObject('Word.Basic').
  2. Открывает источник документа с помощью MSWord.FileOpen с указанными параметрами.
  3. Отключает автоматическое проверку орфографии и фоновое печать с помощью ToolsOptionsSpelling и ToolsOptionsPrint соответственно.
  4. Открывает файл данных с помощью MailMergeOpenDataSource с указанными параметрами.
  5. Запускает процесс почтовой слияния с помощью MailMerge с указанными параметрами.
  6. Использует SendKeys для имитации ввода клавиш, который используется для выбора принтера и печати слияния документа.
  7. Закрывает приложение Word с помощью MSWord.AppShow.
  8. Обрабатывает любые исключения OLE, которые могут возникнуть во время процесса.

Функция также включает в себя обработку ошибок OLE. Если возникает исключение, функция увеличивает счетчик общего количества ошибок OLE и отображает сообщение об ошибке в окне сообщений при достижении максимального числа ошибок.

Некоторые наблюдения:

  • Код использует SendKeys для имитации ввода клавиш, что может быть медленным и неустойчивым.
  • Код предполагает, что Word 95 установлен на системе. Если вы запускаете этот код в Word 97 или более поздней версии, вам может потребоваться модификация создания OLE-объекта или параметров, передаваемых OLE-методам.
  • Код использует Application.ProcessMessages для обработки Windows-сообщений при взаимодействии с приложением Word. Это может помочь предотвратить заморозку и улучшить отзывчивость.

В целом, это сложный код, требующий хорошего понимания программирования на Delphi, технологии OLE и автоматизации Microsoft Word.

В статье представлен код на Delphi для работы с Word 95, который был протестирован под Word 97 и показал медленную работу после исправления ошибок.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-17 19:45:24/0.0037598609924316/0