Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Из Delphi в Word


Автор: Dobromen 9.6.2016, 00:12
Как правильно прописать имя файла, чтобы при нажатии на кнопку открывался документ Word.
Код

unit Unit8;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm8 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form8: TForm8;

implementation

{$R *.dfm}
  uses
  ComObj;
procedure TForm8.Button1Click(Sender: TObject);
var
  wdApp, wdDocs, wdDoc : Variant;
  S : String;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( Application.exeName);
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    ShowMessage(
      'Файл с именем:'#10
      + Od.FileName + #10
      + 'Не найден. Действие отменено.'
    );
    Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;

  try
    //Делаем видимым окно MS Word.
    wdApp.Visible := True;
    //Ссылка на коллекцию документов.
    wdDocs := wdApp.Documents;
    //Попытка открыть выбранный файл.
    wdDoc := wdDocs.Open(FileName:=Od.FileName);
    //Создание нового документа. Если параметр Template:='...' не задан,
    //то новый документ создаётся по шаблону Normal.Dot.
    //wdDoc := wdDocs.Add;
    //Добавляем пустую строку в конец документа.
    wdDoc.Range.InsertAfter(#10);
    //Добавляем текст в конец документа.
    S := Memo1.Text;
    wdDoc.Range.InsertAfter(S);
       //Сохранение документа.
    //wdDoc.Save;
    //Закрываем MS Word.
    //wdApp.Quit;
  finally
    wdApp := Unassigned;
    wdDocs := Unassigned;
    wdDoc := Unassigned;
  end;
end;
end.

Автор: Poseidon 9.6.2016, 16:29
Код

Uses ShellApi;
procedure TForm8.Button1Click(Sender: TObject);
begin
  OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
  if OpenDialog1.Execute then
    ShellExecute(Handle, nil, PAnsiChar(OpenDialog1.FileName), nil, nil, SW_SHOWNORMAL);
end;


Если расширение файла не связано с Word, то в 4 параметр ShellExecute надо передавать путь к WinWord.

Автор: Dobromen 9.6.2016, 21:18
Теперь документ открывается, но осталась одна проблема:
Открывается окно с расположением файла и требуется нажатие кнопки "Открыть". Как сделать так, чтобы автоматически пропускать эту процедуру? Чтобы после нажатия Button1 Сразу открылся Word?
Код

unit Unit8;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
  TForm8 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form8: TForm8;
implementation
{$R *.dfm}
  uses
  ComObj;
procedure TForm8.Button1Click(Sender: TObject);
var
  wdApp, wdDocs, wdDoc : Variant;
  S : String;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath('C:\Users\1\Desktop\WWW.docx');
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    ShowMessage(
      'Файл с именем:'#10
      + Od.FileName + #10
      + 'Не найден. Действие отменено.'
    );
    Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
  try
    //Делаем видимым окно MS Word.
    wdApp.Visible := True;
    //Ссылка на коллекцию документов.
    wdDocs := wdApp.Documents;
    //Попытка открыть выбранный файл.
    wdDoc := wdDocs.Open(FileName:=Od.FileName);
    //Создание нового документа. Если параметр Template:='...' не задан,
    //то новый документ создаётся по шаблону Normal.Dot.
    //wdDoc := wdDocs.Add;
    //Добавляем пустую строку в конец документа.
    wdDoc.Range.InsertAfter(#10);
    //Добавляем текст в конец документа.
    S := Memo1.Text;
    wdDoc.Range.InsertAfter(S);
       //Сохранение документа.
    //wdDoc.Save;
    //Закрываем MS Word.
    //wdApp.Quit;
  finally
    wdApp := Unassigned;
    wdDocs := Unassigned;
    wdDoc := Unassigned;
  end;
end;
end.

Автор: Dobromen 9.6.2016, 21:41
Большое спасибо. Все работает как я и хотел))) очень благодарен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)