Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2016, 23:20   #1
Alex201
 
Регистрация: 08.06.2016
Сообщений: 7
По умолчанию Из Delphi в Word

Прошу помощи, уважаемые программисты. Программа ругается на имя файла. Как правильно прописать полное имя файла, чтобы при нажатии на кнопку открывался документ MS Word?

PHP код:
unit Unit8;

interface

uses
  Winapi
.WindowsWinapi.MessagesSystem.SysUtilsSystem.VariantsSystem.ClassesVcl.Graphics,
  
Vcl.ControlsVcl.FormsVcl.DialogsVcl.StdCtrls;

type
  TForm8 
= class(TForm)
    
OpenDialog1TOpenDialog;
    
Button1TButton;
    
Memo1TMemo;
    
procedure Button1Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form8TForm8;

implementation

{$R *.dfm}
  
uses
  ComObj
;
procedure TForm8.Button1Click(SenderTObject);
var
  
wdAppwdDocswdDoc Variant;
  
String;
  
Od TOpenDialog;
begin
  Od 
:= OpenDialog1;
  if 
Od.InitialDir '' then
    Od
.InitialDir := ExtractFilePathApplication.exeName);
  if 
not Od.Execute then Exit;
  if 
not FileExists(Od.FileNamethen 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);
    //Добавляем текст в конец документа.
    
:= Memo1.Text;
    
wdDoc.Range.InsertAfter(S);
       
//Сохранение документа.
    //wdDoc.Save;
    //Закрываем MS Word.
    //wdApp.Quit;
  
finally
    
wdApp := Unassigned;
    
wdDocs := Unassigned;
    
wdDoc := Unassigned;
  
end;
end;
end

Последний раз редактировалось Alex201; 09.06.2016 в 00:16.
Alex201 вне форума Ответить с цитированием
Старый 08.06.2016, 23:32   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Порылся в гугле нашел вот такой код.
пора уже гуглу научиться делать редирект при поиске "вот-такого-кода"!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.06.2016, 00:19   #3
Alex201
 
Регистрация: 08.06.2016
Сообщений: 7
По умолчанию

Код поправил. Программа работает, но файла не видит. пишет "Файл не найден". Все же как правильно задать имя файла?
Alex201 вне форума Ответить с цитированием
Старый 09.06.2016, 10:32   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код поправил.
покажите исправленный код.

Цитата:
но файла не видит. пишет "Файл не найден".
кто пишет - программа или Word?
если программа, тогда она должна писать:
'Файл с именем: xxxxxxx Не найден. Действие отменено.'
А она что пишет?
если не так, тогда покажите скриншот с ошибкой.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.06.2016, 12:55   #5
Alex201
 
Регистрация: 08.06.2016
Сообщений: 7
По умолчанию

На одном из форумов советовали в строке
wdDoc := wdDocs.Open(FileName:=Od.FileName) заменить FileName:=Od.FileName на Полное имя файла. Файл назван WWW.docx. Сохранил его в папку с проектом.
При замене wdDoc := wdDocs.Open('WWW.docx') программа открывает корневую папку, где храниться проект и предлагает вручную открыть документ. Открываю WWW.docx и выводится сообщение об ошибке "Файл не найден" скрин прилагаю.
Отсюда возникают два вопроса:
1. Как изменить программный код, чтобы сразу напрямую открывался вордовский файл.
2. Как правильно прописать полное имя файла?
Изображения
Тип файла: jpg Безымянный.jpg (11.2 Кб, 123 просмотров)
Alex201 вне форума Ответить с цитированием
Старый 09.06.2016, 13:46   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

у Вас что, файл реально лежит в папке C:\Windows\System32\ ??!
тогда два вопроса:
- как Вы умудрились его туда засунуть?!!!!
- программу запускаете от имени Администратора?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.06.2016, 13:52   #7
Alex201
 
Регистрация: 08.06.2016
Сообщений: 7
По умолчанию

Нет. Файл лежит в корневой папке данного проекта. Почему он ссылается на системную папку я не готов ответить.. весь код прописан в начале темы, внесено только одно изменение wdDoc := wdDocs.Open('WWW.docx')
Alex201 вне форума Ответить с цитированием
Старый 09.06.2016, 13:59   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
внесено только одно изменение wdDoc := wdDocs.Open('WWW.docx')
попробуйте вместо этого написать так:
Код:
wdDoc := wdDocs.Open( ExtractFilePath(Application.ExeName) + 'WWW.docx')
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.06.2016, 15:18   #9
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Код:
{$R *.dfm}
 uses  ShellAPI;
 
 procedure TForm1.Button2Click(Sender: TObject);
 var
   wdDoc : OleVariant;
begin
   wdDoc  :=  ShellExecute(Handle, 'open','C:\путь файлов\Имя_документов.docx',  nil, nil, SW_SHOWNORMAL);
end;

end.
xxbesoxx вне форума Ответить с цитированием
Старый 09.06.2016, 21:15   #10
Alex201
 
Регистрация: 08.06.2016
Сообщений: 7
По умолчанию

Теперь документ открывается, но осталась одна проблема:
Открывается окно с расположением файла и требуется нажатие кнопки "Открыть". Как сделать так, чтобы автомаически пропускать эту процедуру? Чтобы после нажатия Button1 Сразу открылся Word?
PHP код:
unit Unit8;
interface
uses
  Winapi
.WindowsWinapi.MessagesSystem.SysUtilsSystem.VariantsSystem.ClassesVcl.Graphics,
  
Vcl.ControlsVcl.FormsVcl.DialogsVcl.StdCtrls;
type
  TForm8 
= class(TForm)
    
OpenDialog1TOpenDialog;
    
Button1TButton;
    
Memo1TMemo;
    
procedure Button1Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;
var
  
Form8TForm8;
implementation
{$R *.dfm}
  
uses
  ComObj
;
procedure TForm8.Button1Click(SenderTObject);
var
  
wdAppwdDocswdDoc Variant;
  
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.FileNamethen 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);
    //Добавляем текст в конец документа.
    
:= Memo1.Text;
    
wdDoc.Range.InsertAfter(S);
       
//Сохранение документа.
    //wdDoc.Save;
    //Закрываем MS Word.
    //wdApp.Quit;
  
finally
    
wdApp := Unassigned;
    
wdDocs := Unassigned;
    
wdDoc := Unassigned;
  
end;
end;
end
Alex201 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi и Word Aces of Spades Общие вопросы Delphi 13 29.05.2013 20:18
Word+Delphi JamesQ Общие вопросы Delphi 2 22.09.2011 09:05
word из delphi ms-BULLET Компоненты Delphi 1 03.04.2010 15:36
Delphi и Word Siluet Общие вопросы Delphi 1 12.10.2009 20:20
delphi и word Doget Помощь студентам 0 03.04.2009 14:07