Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из Delphi в Word, Программа ругается на имя файла 
V
    Опции темы
Dobromen
Дата 9.6.2016, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.6.2016

Репутация: нет
Всего: нет



Как правильно прописать имя файла, чтобы при нажатии на кнопку открывался документ 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.

PM MAIL   Вверх
Poseidon
Дата 9.6.2016, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Код

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.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Dobromen
Дата 9.6.2016, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.6.2016

Репутация: нет
Всего: нет



Теперь документ открывается, но осталась одна проблема:
Открывается окно с расположением файла и требуется нажатие кнопки "Открыть". Как сделать так, чтобы автоматически пропускать эту процедуру? Чтобы после нажатия 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.

PM MAIL   Вверх
Dobromen
Дата 9.6.2016, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.6.2016

Репутация: нет
Всего: нет



Большое спасибо. Все работает как я и хотел))) очень благодарен
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.