mojaSymfonia FORUM
https://forum.mix-soft.pl/

wywoływanie zewnętrznych aplikacji
https://forum.mix-soft.pl/viewtopic.php?f=15&t=461
Strona 1 z 1

Autor:  madziarekp [ 2008-12-14, 21:54 ]
Tytuł:  wywoływanie zewnętrznych aplikacji

Witam,

mam pytanie czy ktoś mógłby mi podpowiedzieć jak wywołać zewnętrzny program np Excel w AmBasic?

Dziękuję i pozdrawiam

Autor:  wrob [ 2008-12-14, 22:22 ]
Tytuł: 

dispatch d
d.Create("Excel.Application")
d.Workbooks.Add()
d.Workbooks.Open("c:\\aaa\\imp.xls")
d.visible = 1
d.Range("A2").Select

etc

Autor:  barnie [ 2008-12-14, 22:30 ]
Tytuł: 

aby TYLKO uruchomić inny program z poziomu ambasica należy użyć funkcji Execute.

przykładowo:
Kod:
Execute("C:\\Program Files\\Microsoft Office\\Office12\\excel.exe")

Autor:  klesta [ 2009-01-22, 13:33 ]
Tytuł: 

a gdzie znależć jakąś pomoc (przykłady) dotyczącą metod Excela, które można wywołać z poziomu symfonii?
tzn. w tym momencie próbuję na chybił trafił. Czytam helpa od VBA, rejestruje proste macra w execelu i próbuje je później odwzorować w symfonii (na podstawie tych klku linii napisanych przez wrob'a).

Bo np. chciałbym wiedzieć jak (najchętniej z jakimś przykładem):

- zapisać stworzony (lub otwarty) plik (save, saveas..)


- zamknąć plik z zapisaniem zmian, lub z pominięciem zapisywania zmian

jeśli napisałem tak:

d.workbooks.close("SaveChanges:= False")

to otrzymuję komunikat:
"Wykonanie 'PropertyGet' lub 'Method' nie powiodło się"

a jak piszę:

d.workbooks.close()

to otwiera mi sie okienko z pytaniem czy chce zapisac zmiany... - a chciałbym to trochę zautomatyzować

Please help :)

Autor:  wrob [ 2009-01-22, 14:18 ]
Tytuł: 

Przyklady sa w raportach - najlepiej pogrzeb w raportach typu lista plac w KDB - tam jest sporo rzeczy wysylanych do excela :)

Autor:  rafal [ 2009-01-22, 22:15 ]
Tytuł: 

poza tym możesz używać wszystkich obiektów i metod jak w VBA Excela.

Autor:  klesta [ 2013-10-21, 14:12 ]
Tytuł:  Re: wywoływanie zewnętrznych aplikacji

Witam,

chciałem powrócić do tematu.

Nurtuje mnie czy ktoś próbował (z sukcesami) otworzyć aplikację OpenOffice'a (Writer lub Calc)?

Udało mi się wygooglować przykład opisujący sposób otwarcia OpenOffice'a Calc'a z poziomu Excela:

Kod:
Sub ControlOOo()
  Rem The service manager is always the first thing to create.
  Rem If OOo is not running, it is started.
  Set oManager = CreateObject("com.sun.star.ServiceManager")

  Rem Create the desktop.
  Set oDesktop = oManager.createInstance("com.sun.star.frame.Desktop")

  Rem Open a new empty Calc document.
  Dim args()
  Dim s As String
  Set s = "private:factory/scalc"
  Set oDoc = oDesktop.loadComponentFromURL(s, "_blank", 0, args())

  Dim oSheet As Object
  Dim oSheets As Object
  Dim oCell As Object

  Set oSheets = oDoc.sheets.CreateEnumeration
  Set oSheet = oSheets.nextElement
  Set oCell = oSheet.getCellByPosition(0, 0)
  oCell.setFormula ("Hello From Excel") 'Cell A1
  oCell.CellBackColor = RGB(127, 127, 127)
End Sub


i próbuję przełożyć to samo do Symfonii Handel Premium:

Kod:
dispatch objServiceManager
dispatch objDesktop
dispatch calc
int args(1)

objServiceManager.Create("com.sun.star.ServiceManager")
objDesktop= objServiceManager.createInstance("com.sun.star.frame.Desktop")
calc=objDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, args())


i oczywiście dostaje błąd składni języka (Oczekiwane wyrażenie) - chodzi o args...

Czy ktoś pracuje z OpenOffice'm z poziomu Symfonii? Czy ktoś mógłby mi z tym pomóc (bardzo raczkuje jeśli chodzi o Basic'a w OO, więc byłbym wdzięczny za jakiś przykład :)

Autor:  rafal [ 2013-10-21, 14:36 ]
Tytuł:  Re: wywoływanie zewnętrznych aplikacji

Zobacz czy
zamiast
Kod:
int args

zadziała
Kod:
dispatch args

Autor:  klesta [ 2013-10-22, 13:43 ]
Tytuł:  Re: wywoływanie zewnętrznych aplikacji

Zadziałało, ale nie do końca... :( tzn wyświetla innego rodzaju błąd:

Obrazek

Kod wygląda teraz tak:

Kod:
dispatch objServiceManager
dispatch objDesktop
dispatch calc
dispatch args

objServiceManager.Create("com.sun.star.ServiceManager")
objDesktop= objServiceManager.createInstance("com.sun.star.frame.Desktop")
calc=objDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, args)


Sprawa rozbija się (raczej na pewno) o args.
Poszperałem w necie za przykładami gdzie args nie jest pusta tablica. Znalazłem np:

Kod:
Sub getStock_new
   Dim cvs_quotes
   Dim Properties(1) As New com.sun.star.beans.PropertyValue
   Dim Dane As String
   
   Properties(0).Name = "Hidden"
   Properties(0).Value = True
   Properties(1).Name = "FilterName"
   Properties(1).Value = "Text - CSV"

   cvs_quotes = StarDesktop.LoadComponentFromUrl("http://finance.yahoo.com/d/quotes.csv?s=GOOG&f=nl1&e=.csv", "_blank", 0, Properties())
   Dane = cvs_quotes.Text.String
   cvs_quotes.close(true)
   'wstawienie pobranych danych po usunięciu znaku nowej lini
   ThisComponent.Sheets.getByName("Arkusz1").getCellRangeByName("A1").String =  Left(Dane, len(Dane) - 1)
End Sub


I tu zdefiniowane są elementy tablicy Properties, ale każdy element ma name i value, dodatkowo wcześniej Properties jest zdefiniowany jako:
Kod:
Dim Properties(1) As New com.sun.star.beans.PropertyValue


jak to poskładać do kupy i zmusić Symf do współpracy :D ??

Plis help :roll:

Załączniki:
blad_OLE.png
blad_OLE.png [ 15.96 KiB | Przeglądany 4719 razy ]

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/