powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Запуск Excel-я из PowerScript-а
19 сообщений из 19, страница 1 из 1
Запуск Excel-я из PowerScript-а
    #36987536
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь запустить файл Excel с помощью следующей строки:

Код: plaintext
post Run("excel.exe C:\DDDW\test.xls", Maximized!)

Но файл не открывается, Excel не запускается - вообще ничего не происходит.
Файл существует стопроцентно.
Пытался писАть Excel.exe с большой буквы - не помогло.

Ребята, F1!!!
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #36987542
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Пытался писАть Excel.exe с большой буквы - не помогло.
Укажи полный путь к файлу Excel.exe.
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #36987753
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC...
Укажи полный путь к файлу Excel.exe.
На разных машинах разных пользователей путь может быть разным...

ИМХО, я бы попробовал так:
Вариант 1
Код: plaintext
post Run("C:\DDDW\test.xls", Maximized!)
Т.е. не указывать эксель, а просто запуск файла, пусть винда сама решает, чем и как его открывать
Вариант 2
ShellExecute WINAPI Function - аналогично - пусть винда сама решает
Вариант 3
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
OLEObject oExcel
String ls_Template = "C:\DDDW\test.xls"
TRY
	oExcel = CREATE OLEObject
	oExcel.ConnectToNewObject('Excel.Application')
	oExcel.Application.Workbooks.Open(ls_Template)
	oExcel.Application.Visible = TRUE
FINALLY
	oExcel.DisconnectObject()
	destroy oExcel
END TRY
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #36989470
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkarmaxATC...
Укажи полный путь к файлу Excel.exe.
На разных машинах разных пользователей путь может быть разным...Абсолютно верно! По идее, функция Run должна запускать всё, что запускается из виндовсовского меню Start -> Run... Так вот, из этого меню Excel прекрасно запускается без полного пути, а из функции - фигли.

IkarИМХО, я бы попробовал так:
Вариант 1
Код: plaintext
post Run("C:\DDDW\test.xls", Maximized!)
Т.е. не указывать эксель, а просто запуск файла, пусть винда сама решает, чем и как его открыватьНомер не проходит, а функция Run в этом случае возвращает -1.

Но всё равно спасибо за попытки помочь!
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #36989504
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkarВариант 2
ShellExecute WINAPI Function - аналогично - пусть винда сама решает
Вариант 3
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
OLEObject oExcel
String ls_Template = "C:\DDDW\test.xls"
TRY
	oExcel = CREATE OLEObject
	oExcel.ConnectToNewObject('Excel.Application')
	oExcel.Application.Workbooks.Open(ls_Template)
	oExcel.Application.Visible = TRUE
FINALLY
	oExcel.DisconnectObject()
	destroy oExcel
END TRY
А вот это помогло, огромное спасибище!!!
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #36990280
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
run('cmd /c start C:\DDDW\"test.xls"')
если название файла одинм словом, как в примере то заключать в двойные кавычки не обязательно

например вот так будет работать
Код: plaintext
1.
run('cmd /c start C:\DDDW\test.xls')
run('cmd /c start C:\DDDW\"test test.xls"')
а так нет
Код: plaintext
run('cmd /c start C:\DDDW\test test.xls')
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37000703
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, VanoR, это работает, но, во-первых, до экселевского файла мелькает чёрное окно виндовсовской консоли, а во-вторых, не получается открыть файл в максимизированном виде (передача функции Run второго аргумента, Maximized!, не помогает). В принципе, это сущие мелочи, но раз уж есть решение Ikarа без этих недостатков, то я его и оставлю, хоть в нём и "больше букаф".
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37003387
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maximized!, чёрное окно... везде есть минусы
зато данный способ позволяет открыть из билдера любой файл, который может открываться в винде
и... думаю, даже если не может, винда предложит выбрать софт, которым его открыть
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37003686
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRMaximized!, чёрное окно... везде есть минусы
зато данный способ позволяет открыть из билдера любой файл, который может открываться в виндеа shellexecute кабутто не позволяет
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37012392
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этого никто не писАл - с кем споришь? А вот предложенный Икаром способ с OLEObject-ом открывает фахл в максимизированном виде, за что им обоим (Икару и OLEObject-у) спасибо!

VanoRзато данный способ позволяет открыть из билдера любой файл, который может открываться в винде
и... думаю, даже если не может, винда предложит выбрать софт, которым его открытьЭтого в требованиях нет - надо открыть файл Excel, и всё. Хотя для общего развития пригодится - авось придётся ещё что-то открывать из PB.
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37012909
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoR...
и... думаю, даже если не может, винда предложит выбрать софт, которым его открыть
Неа, не предложит. Только из проводника когда пытаешься открыть - предлагает, а из под РВ программными средствами может и можно сделать, но именно, что делать надо, писать тоесть. Так, нахаляву, не предлагает.


UrsegoЭтого никто не писАл - с кем споришь? А вот предложенный Икаром способ с OLEObject-ом открывает фахл в максимизированном виде, за что им обоим (Икару и OLEObject-у) спасибо!
...
Не за что. Но есть одно НО: если на компутере пользователя нет Екселя, а есть опенофис, то OLEObject выдаст обшибку, а вот shellexecute откроет файл опенофисом и не крякнет.
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37014569
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК, буду иметь в виду. В данном случае это не проблема - файл будет открываться на компьютерах разработчиков нашей фирмы, а Excel установлен у нас всех (собсна, это часть шпиона DW, описанного несколькими постами ниже - в Excel-е показываются данные, содержащиеся в DDDW).
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37421918
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последнем сообщении этой темы я написАл, что Excel установлен всех наших разработчиков, но дело в том, что Шпион используется и девелоперами других фирм, и кое-где Excel-я нет - в этом случае PowerBuilder вылетает с ошибкой.

Вот функция, которая открывает файл Excel:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
int			li_rc
string		ls_err_msg = ""
OLEObject	lole_excel
Exception	le_error

try
	lole_excel = create OLEObject
	li_rc = lole_excel.ConnectToNewObject("Excel.Application")
	choose case li_rc
	case  0 
		// success - continue
	case - 1 
		ls_err_msg = "Invalid Call: the argument is the Object property of a control"
	case - 2 
		ls_err_msg = "Class name not found"
	case - 3 
		ls_err_msg = "Object could not be created"
	case - 4 
		ls_err_msg = "Could not connect to object"
	case - 9 
		ls_err_msg = "Other error"
	case - 15 
		ls_err_msg = "MTS is not loaded on this computer"
	case - 16 
		ls_err_msg = "Invalid Call: this function not applicable"
	case else
		ls_err_msg = "ConnectToNewObject returned unprocessable value " + String(li_rc)
	end choose
	
	if ls_err_msg <> "" then
		le_error = create Exception
		le_error.SetMessage(ls_err_msg)
		throw le_error
	end if
	
	lole_excel.Application.Workbooks.Open(as_full_path)
	lole_excel.Application.Visible = true
catch(Exception le_cought)
	ls_err_msg = "w_spy.wf_open_excel_file failed to open Excel file " + as_full_path + ".~n~r~n~rError message:~n~r" + le_cought.GetMessage()
	MessageBox("Debug error", ls_err_msg)
	return - 1 
finally
	lole_excel.DisconnectObject()
	destroy lole_excel
end try

return  1 

Строка "lole_excel.Application.Workbooks.Open(as_full_path)" (предпоследняя перед catch) выдаёт следующую ошибку:

Error calling external object function open at line 45 in function wf_open_excel_file of object w_spy.

А вопрос мой вот какой: почему управление программой не было передано скеции catch (ведь вызов - внутри try...catch!), где было бы обработано (собсна, ради этого весь этот try...catch и был создан), а вместо этого PowerBuilder вырубило с вышеуказанной ошибкой? Ну, и второй вопрос - как предотвратить эту аварию? Может, есть способ проверить установлен ли Excel на данном компе (и если не установлен, то сделать return в начале функции)?

Спасибо!

Работаю на PowerBuilder 8.
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37422025
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
catch(Exception le_cought)
Может написать
Код: plaintext
catch(RuntimeError le_cought)
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37422047
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Эксель не установлен, то не понятно, почему вызов
Код: plaintext
li_rc = lole_excel.ConnectToNewObject("Excel.Application")
вернул 0 - судя по тому, что обработка вышла за пределы проверки кода возврата и дошла до
Код: plaintext
lole_excel.Application.Workbooks.Open(as_full_path)
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37422465
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkarЕсли Эксель не установлен, то не понятно, почему вызов
Код: plaintext
li_rc = lole_excel.ConnectToNewObject("Excel.Application")
вернул 0 - судя по тому, что обработка вышла за пределы проверки кода возврата и дошла до
Код: plaintext
lole_excel.Application.Workbooks.Open(as_full_path)

Если Эксель не установлен, то он вернул не 0, а Null.
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37424443
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISЕсли Эксель не установлен, то он вернул не 0, а Null.
Тогда оработал бы переход
Код: plaintext
1.
2.
case else
		ls_err_msg = "ConnectToNewObject returned unprocessable value " + String(li_rc)
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37424473
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikar ,
да, отработает именно эта строка, но:
т.к. при li_rc=Null функция String(li_rc) тоже выдаст Null, то и результат для
Код: plaintext
1.
case else
	ls_err_msg = "ConnectToNewObject returned unprocessable value " + String(li_rc)
тоже будет Null, а далее проверка
Код: plaintext
if ls_err_msg <> "" then
даст False.

P.S. Поправьте меня если я ошибаюсь. ;)
...
Рейтинг: 0 / 0
Запуск Excel-я из PowerScript-а
    #37426736
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, так и есть, сорри, что пытался ввести в заблуждение ))
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Запуск Excel-я из PowerScript-а
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]