Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: rar am 28.02.06 - 10:28:33

Titel: Werte in bereits vorhandenes Excel exportieren
Beitrag von: rar am 28.02.06 - 10:28:33
Hi ihr,

ich bin gerad via script mehrere Dokumente ins Excel zu kopieren. Das war bis jetzt eigentlich nicht so das Problem. Ich habe einfach folgenden Code verwendet:
Code
Set exlApp= CreateObject("Excel.application")
Set exlSheet = exlApp.Workbooks(1).Worksheets(1)
Dann hab ich mit z.B.
Code
exlSheet.Cells(10,1).Value = "Werte"
und so weiter die Zeilen befüllt, formatiert. So wie ich es halt möchte.

Jetzt steh ich aber vor folgendem Problem.....
Die Werte sollten in eine bereits fertige Excel Vorlage geschrieben und danach geöffnet werden. (Abspeichern ist nicht nötig). Ich habe dazu in einem Profildokument ein RTF erstellt, in das die Vorlage eingehängt wird. Mit
Code
Set rtitem = doc.GetFirstItem( "Vorlage" )
If ( rtitem.Type = RICHTEXT ) Then
   Forall o In rtitem.EmbeddedObjects
      If ( o.Type = EMBED_ATTACHMENT ) Then
hab ich dann das Excelobject in der Variable o.
Um jetzt meine Werte in das excel schreiben zu können, muss ich jetzt die variablen exlApp und exlSheet befüllen. Die Variable o entspricht aber nicht dem Ergebnis, das man mit
Set exlApp= CreateObject("Excel.application")
bekommt.
Kann mir vieleicht jemand sagen, wie ich von dem o zu dem exlApp komme?

Vielen Dank und Lei Lei  :-P

-daniel
Titel: Re: Werte in bereits vorhandenes Excel exportieren
Beitrag von: Axel am 28.02.06 - 10:42:55
Du muss die Vorlage aus dem Profildokument erstmal ins Filesytem lösen. Dann kannst du sie in Excel öffnen und füllen.


Axel
Titel: Re: Werte in bereits vorhandenes Excel exportieren
Beitrag von: rar am 28.02.06 - 11:07:17
Danke für den Tipp Axel.  Klingt einleuchtend. Leider klappt es noch nicht ganz.

Ich extracte das file erst mit Call o.ExtractFile( "C:\Test.xls" ) dann hol ich es mir mit Set exlApp =GetObject ( "C:\Test.xls" ). In der Vorlage sind Makros drin. Dadurch sieht man, dass das GetObject eigentlich funktioniert. Denn bei der Zeile kommt sofort die Meldung ob man die Macros aktivieren bzw deaktivieren möchte.
Wenn ich dann aber irgendwas mit der Object machen möchte, (z.B. Set exlSheet = exlApp.Workbooks(1).Worksheets(1), oder exlApp.Visible = True) kommt die Fehlermeldung Instance Member VISIBLE does not exist. Wenn das Object aber mit Set exlApp = CreateObject("Excel.application") erzeugt gehts...

Komisch
lG
-daniel
Titel: Re: Werte in bereits vorhandenes Excel exportieren
Beitrag von: Tode am 28.02.06 - 11:34:47
tja, durch Dein "GetObject" erhälst Du Dummerweise kein "Excel.application" sondern eher ein Workbook- Objekt...

Und ein Workbook- Objekt hat nun mal keine "Workbooks"- Eigenschaft.

Du musst Dir Deine exlApp schon nochmal extra erstellen, wenn Du über "visible" etc. bestimmen willst... (Application- Eigenschaft der Workbook- Klasse....

und an die Arbeitblätter kommst Du ganz einfach über .Worksheets( 1 )

HTH
Tode
Titel: Re: Werte in bereits vorhandenes Excel exportieren
Beitrag von: Axel am 28.02.06 - 11:53:36
Ich mach' das immer so:

Code

Dim objExcel As Variant
Dim objSheet As Variant    

On Error Resume Next
		
Set objExcel = GetObject("", "Excel.Application")
  If Err = 208 Then  '  Fehler 208 tritt auf wenn Excel noch nicht läuft
     Err = 0
     Set objExcel = CreateObject("Excel.Application")   'Excel "unsichtbar" starten
  End If  'If Err = 208 Then

On Error Goto ErrorHandler

Call objExcel.Workbooks.Open ("Laufwerk:\Verzeichnis\Dateiname.xls")
Set objSheet = objExcel.Workbooks(1).Worksheets(1)
...
'Füllen der Zellen
...

'Excel sichtbar machen
objExcel.Visible = True

...
ErrorHandler:
' Hier erfolgt die Fehlerbehandlung
...


Axel
Titel: Re: Werte in bereits vorhandenes Excel exportieren
Beitrag von: rar am 28.02.06 - 12:51:47
@Tode:
Wenn ich meine Variable mit GetObject befülle und dann mit variable.Worksheets( 1 ) auf die Arbeitsblätter zugreifen möchte, kommt die Fehermeldung "Automation object member not found". Wahrscheinlich bringt GetObject doch ein anderes Object zurück. Ist aber nicht weiter schlimm, denn.....

@Axel:
Deine Methode ist der Hammer. Sie macht genau das, was ich möchte und funktioniert einwandfrei.

Vielen, vielen Dank. Tag gerettet. ;D

lG
-daniel