Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Запуск Excel-я из PowerScript-а / 19 сообщений из 19, страница 1 из 1
30.11.2010, 23:57
    #36987536
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Пытаюсь запустить файл Excel с помощью следующей строки:

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

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

Ребята, F1!!!
...
Рейтинг: 0 / 0
01.12.2010, 00:11
    #36987542
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
>Пытался писАть Excel.exe с большой буквы - не помогло.
Укажи полный путь к файлу Excel.exe.
...
Рейтинг: 0 / 0
01.12.2010, 07:58
    #36987753
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
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
01.12.2010, 16:51
    #36989470
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
IkarmaxATC...
Укажи полный путь к файлу Excel.exe.
На разных машинах разных пользователей путь может быть разным...Абсолютно верно! По идее, функция Run должна запускать всё, что запускается из виндовсовского меню Start -> Run... Так вот, из этого меню Excel прекрасно запускается без полного пути, а из функции - фигли.

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

Но всё равно спасибо за попытки помочь!
...
Рейтинг: 0 / 0
01.12.2010, 16:59
    #36989504
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
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
02.12.2010, 00:55
    #36990280
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Код: 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
07.12.2010, 22:05
    #37000703
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Спасибо, VanoR, это работает, но, во-первых, до экселевского файла мелькает чёрное окно виндовсовской консоли, а во-вторых, не получается открыть файл в максимизированном виде (передача функции Run второго аргумента, Maximized!, не помогает). В принципе, это сущие мелочи, но раз уж есть решение Ikarа без этих недостатков, то я его и оставлю, хоть в нём и "больше букаф".
...
Рейтинг: 0 / 0
08.12.2010, 23:44
    #37003387
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Maximized!, чёрное окно... везде есть минусы
зато данный способ позволяет открыть из билдера любой файл, который может открываться в винде
и... думаю, даже если не может, винда предложит выбрать софт, которым его открыть
...
Рейтинг: 0 / 0
09.12.2010, 09:55
    #37003686
maniac85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
VanoRMaximized!, чёрное окно... везде есть минусы
зато данный способ позволяет открыть из билдера любой файл, который может открываться в виндеа shellexecute кабутто не позволяет
...
Рейтинг: 0 / 0
13.12.2010, 22:59
    #37012392
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Этого никто не писАл - с кем споришь? А вот предложенный Икаром способ с OLEObject-ом открывает фахл в максимизированном виде, за что им обоим (Икару и OLEObject-у) спасибо!

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


UrsegoЭтого никто не писАл - с кем споришь? А вот предложенный Икаром способ с OLEObject-ом открывает фахл в максимизированном виде, за что им обоим (Икару и OLEObject-у) спасибо!
...
Не за что. Но есть одно НО: если на компутере пользователя нет Екселя, а есть опенофис, то OLEObject выдаст обшибку, а вот shellexecute откроет файл опенофисом и не крякнет.
...
Рейтинг: 0 / 0
14.12.2010, 22:31
    #37014569
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
ОК, буду иметь в виду. В данном случае это не проблема - файл будет открываться на компьютерах разработчиков нашей фирмы, а Excel установлен у нас всех (собсна, это часть шпиона DW, описанного несколькими постами ниже - в Excel-е показываются данные, содержащиеся в DDDW).
...
Рейтинг: 0 / 0
01.09.2011, 20:03
    #37421918
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
В последнем сообщении этой темы я написАл, что 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
01.09.2011, 22:22
    #37422025
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Код: plaintext
catch(Exception le_cought)
Может написать
Код: plaintext
catch(RuntimeError le_cought)
...
Рейтинг: 0 / 0
01.09.2011, 22:59
    #37422047
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Если Эксель не установлен, то не понятно, почему вызов
Код: plaintext
li_rc = lole_excel.ConnectToNewObject("Excel.Application")
вернул 0 - судя по тому, что обработка вышла за пределы проверки кода возврата и дошла до
Код: plaintext
lole_excel.Application.Workbooks.Open(as_full_path)
...
Рейтинг: 0 / 0
02.09.2011, 11:01
    #37422465
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
IkarЕсли Эксель не установлен, то не понятно, почему вызов
Код: plaintext
li_rc = lole_excel.ConnectToNewObject("Excel.Application")
вернул 0 - судя по тому, что обработка вышла за пределы проверки кода возврата и дошла до
Код: plaintext
lole_excel.Application.Workbooks.Open(as_full_path)

Если Эксель не установлен, то он вернул не 0, а Null.
...
Рейтинг: 0 / 0
04.09.2011, 11:40
    #37424443
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
AISЕсли Эксель не установлен, то он вернул не 0, а Null.
Тогда оработал бы переход
Код: plaintext
1.
2.
case else
		ls_err_msg = "ConnectToNewObject returned unprocessable value " + String(li_rc)
...
Рейтинг: 0 / 0
04.09.2011, 13:13
    #37424473
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
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
06.09.2011, 12:24
    #37426736
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск Excel-я из PowerScript-а
Да, так и есть, сорри, что пытался ввести в заблуждение ))
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Запуск Excel-я из PowerScript-а / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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