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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2013, 11:01   #1
Mr. Джон
 
Регистрация: 22.05.2013
Сообщений: 6
Сообщение Открытие Excel и Word

Нужно произвести открытие файла, в папке у меня и Word файлы, и Excel.
написал такой код:

procedure TForm2.sBitBtn1Click(Sender: TObject);
var
MSWord:OLEvariant;
Excel:OLEvariant;
begin
MsWord := CreateOleObject('Word.Application') ;
Excel:= CreateOleObject('Excel.Application' );
if not MSWord.Documents.Open('C:\proc\File s\'+sDBEdit1.Text+'.doc')
then Excel.Documents.Open('C:\proc\Files \'+sDBEdit1.Text+'.xls');
MsWord.Visible := True;
Excel.Visible := True;
end;

посылает меня, но если я к примеру пишу :

MsWord := CreateOleObject('Word.Application') ;
MSWord.Documents.Open('C:\proc\File s\'+sDBEdit1.Text+'.doc')
MsWord.Visible := True;
то открытие производится только Worda.
Подскажите или наведите на цель если к примеру нет Word файла то ищется Excel с таким же именем...
Надеюсь понятно разъяснил.
Mr. Джон вне форума Ответить с цитированием
Старый 22.05.2013, 11:42   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Для чего Вам их нужно открыть? Если не для работы в нём через Delphi, то просто используйте ShellExecute
FaTaL вне форума Ответить с цитированием
Старый 22.05.2013, 12:40   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
посылает меня,
Вы бы хоть написали, какими словами и куда посылает, а то телепаты в отпуска разъехались.

Цитата:
if not MSWord.Documents.Open('C:\proc\File s\'+sDBEdit1.Text+'.doc')
then Excel.Documents.Open('C:\proc\Files \'+sDBEdit1.Text+'.xls');
А скорее всего Open не возвращает никаких значений логического типа, вот и посылает. Я бы предложил делать проверку существования файла, а уже потом открывать. Как-то так:

Код:
fname:='C:\proc\File s\'+sDBEdit1.Text;
if  FileExists(fname+'.*') then MSWord.Documents.Open(fname+'.doc')
else Excel.Documents.Open(fname+'.xls');
Функцию FileExists смотрите в хелпе, я ее тут для примера привел, но точного ее синтаксиса и параметров не помню.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.05.2013, 13:29   #4
Mr. Джон
 
Регистрация: 22.05.2013
Сообщений: 6
По умолчанию

if not
ShellExecute(Form2.Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Tex t+'.doc'),nil, nil, SW_SHOWNORMAL))
then
ShellExecute(Form2.Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Tex t+'.xls'),nil, nil, SW_SHOWNORMAL);

не могу довести до совершенства, ошибка с операндом
[Error] Unit22.pas(122): Type of expression must be BOOLEAN
Mr. Джон вне форума Ответить с цитированием
Старый 22.05.2013, 13:59   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Цитата:
Сообщение от Mr. Джон Посмотреть сообщение
не могу довести до совершенства, ошибка с операндом
[Error] Unit22.pas(122): Type of expression must be BOOLEAN
Потому что ShellExecute не возвращает значение типа BOOL. Подробнее читай тут http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
FaTaL вне форума Ответить с цитированием
Старый 22.05.2013, 13:59   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Цитата:
Return value

Type: HINSTANCE

If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an int and compared to either 32 or the following error codes below.
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 22.05.2013, 19:54   #7
Mr. Джон
 
Регистрация: 22.05.2013
Сообщений: 6
По умолчанию

что то я всё равно разобраться не могу
Mr. Джон вне форума Ответить с цитированием
Старый 23.05.2013, 08:37   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Цитата:
Сообщение от Mr. Джон Посмотреть сообщение
что то я всё равно разобраться не могу
Ну сделай тогда что-то типа этого, раз сам думать не хочешь.
Код:
if ShellExecute(Form2.Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Text+'.doc'),nil, nil, SW_SHOWNORMAL)) <= 32
then
ShellExecute(Form2.Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Text+'.xls'),nil, nil, SW_SHOWNORMAL);
FaTaL вне форума Ответить с цитированием
Старый 23.05.2013, 11:08   #9
Mr. Джон
 
Регистрация: 22.05.2013
Сообщений: 6
По умолчанию

Цитата:
Код:
if ShellExecute(Form2.Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Text+'.doc'),nil, nil, SW_SHOWNORMAL)) <= 32
then
ShellExecute(Form2.Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Text+'.xls'),nil, nil, SW_SHOWNORMAL);
спасибо большое, тут есть ещё такой фокус если в глупую написать:
ShellExecute(Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Tex t+'.doc'),nil, nil, SW_SHOWNORMAL);
ShellExecute(Handle, 'open', PChar('C:\proc\Files\'+sDBEdit1.Tex t+'.xls'),nil, nil, SW_SHOWNORMAL);

тоже без ошибочно работает...
Mr. Джон вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие Excel и Word Mr. Джон БД в Delphi 1 22.05.2013 10:58
Открытие документа Word из Excel ольгаг Microsoft Office Excel 3 19.09.2011 19:01
открытие шаблона Word из Excel ольгаг Microsoft Office Excel 2 18.09.2011 21:16
ОТКРЫТИЕ WORD пОЛЯрная Помощь студентам 2 22.11.2010 11:38
открытие Word Влажимир Общие вопросы Delphi 7 14.04.2008 16:38