Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Glombi am 08.04.04 - 15:47:29

Titel: Frage zu CreateObject( "Excel.Application")
Beitrag von: Glombi am 08.04.04 - 15:47:29
Ich habe mir aus dem Sandkasten ein kleines Programm gesaugt und modifiziert, mit dem ich Daten aus einer Excel Datei lesen kann.

Zu der Stelle CreateObject( "Excel.Application") habe ich eine Frage:
Im Original stand
Set Excel = CreateObject( "Excel.Application.9" ) ' for windows2000
Set Excel = CreateObject( "Excel.Application.8" ) ' for windows95

Ich habe Win XP, da geht es nur mit CreateObject( "Excel.Application").
Läuft das auch unter Win 2000? Oder muss ich da .9 verwenden?

Wenn das BS-abhängig ist: Kann ich per Script auslesen, ob Win 2000 oder XP verwendet wird. Wahrscheinlich gibt es irgendeine DLL, die ich aufrufen muss. Aber welche???
session.Platform liefert ja nur Windows 32.


Hier der komplette Agent:

Sub Initialize
   
   On Error Goto ErrorHandling
   
   Dim Excel As Variant
   Dim xlWorkbook As Variant
   Dim xlSheet As Variant
   
   Dim xlFilename As String   
   Dim col_val As String   
   Dim row As Integer
   Dim written As Integer
   
   xlFilename = "e:\kst1.xls"
   
   col_val = "dummy"
   
   ' Row number to import
   records = 10
   
   'Erstelle Excel-Objekt
   Set Excel = CreateObject( "Excel.Application")
%REM   
      Set Excel = CreateObject( "Excel.Application.9" ) ' for windows2000
      Set Excel = CreateObject( "Excel.Application.8" ) ' for windows95
%ENDREM   
   
   'Excel.Visible = False ' Don't display the Excel window
   Excel.Workbooks.Open xlFilename ' Open the Excel file
   Set xlWorkbook = Excel.ActiveWorkbook
   Set xlSheet = xlWorkbook.ActiveSheet
   
     ' Cycle through the rows of the Excel file, pulling the data over to Notes   
   row = 0
   written = 0
   
   Do While col_val <> ""
      With xlSheet
         row = row + 1               
         If row  > 1 Then
            col_val = .Cells( row, 4 ).Value
            Print col_val
         End If
         written = written + 1         
      End With
   Loop
   
   'Excel schliessen
   xlWorkbook.Close
   Excel.Quit
   
   Set Excel = Nothing ' Free the memory that we'd used
   
   Exit Sub
   
   '########### ERROR HANDLING ############   
ErrorHandling:
   Messagebox "Check Excel file location or SW Version or View Name or Form Name" ,MB_OK+MB_ICONINFORMATION,"Warning ! "
   Print " " ' Clear the status line   
   Exit Sub   
   
End Sub


Danke für jede Antwort!

Andreas
Titel: Re:Frage zu CreateObject( "Excel.Application")
Beitrag von: Glombi am 08.04.04 - 16:50:49
CreateObject( "Excel.Application") funktioniert auch unter Windows 2000.
Damit wäre das Problem gelöst.
Titel: Re:Frage zu CreateObject( "Excel.Application")
Beitrag von: MartinG am 08.04.04 - 16:59:38
Ich glaube die Erklärung ist falsch - das ganze bezieht sich vermutlich eher auf die Excel Version

Excel 11 = Excel 2003
10 = Excel XP
9 = Excel 2000
8 = Excel 97
7 = Excel 95
....

Gruss
Martin
Titel: Re:Frage zu CreateObject( "Excel.Application")
Beitrag von: Semeaphoros am 08.04.04 - 17:04:34
Richtig, nur ist die Angabe im Sandkasten bogus. Die Zahl nach Application bezieht sich nicht auf die Windows-Version, sondern auf die Excel-Version, so wie das Martin eben auch aufgeführt hat.

Verwendet man "Excel.Application", so wird die zuletzt installierte Excel-Version verwendet, welche auch immer das ist.

Lässt sich bei MS-Support an verschiedenen Stellen nachlesen
Titel: Re:Frage zu CreateObject( "Excel.Application")
Beitrag von: Glombi am 08.04.04 - 17:11:19
Falls also die Excel-Datei mit der Version X erstellt wird und ein anderer User, der den Scriptagent ausführt, auch die Version X hat, sollte also CreateObject( "Excel.Application") funktionieren.
Titel: Re:Frage zu CreateObject( "Excel.Application")
Beitrag von: Semeaphoros am 08.04.04 - 17:13:04
Jo, für den zweiten User gilt X + Y, wobei Y >= 0   ;D
Titel: Re:Frage zu CreateObject( "Excel.Application")
Beitrag von: Glombi am 08.04.04 - 17:31:23
Jens sei Dank für diese Info:

http://support.microsoft.com/default.aspx?scid=kb;de;d40000

da steht:

Wenn Sie beispielsweise die folgende Visual Basic für
Anwendungen-Subroutine in Microsoft Word 97 ausführen,
   Sub AutomationTest()
       Dim xlApp As Object
       Set xlApp = CreateObject("Excel.Application")
       MsgBox xlApp.Version
       xlApp.Quit
       Set xlApp = Nothing
   End Sub
erstellt die Subroutine immer eine Automatisierungssitzung in der letzten
installierten Version von Microsoft Excel. Wenn Sie also Microsoft Excel 97
und Microsoft Excel 2000 auf demselben Computer installieren, zeigt das
Meldungsfeld in dem Beispiel "9.0", die Versionsnummer von Microsoft Excel
2000, an.

Wenn Sie eine bestimmte Version von Microsoft Excel mittels Automatisierung
steuern wollen, verwenden Sie die in der folgenden Tabelle aufgeführten
Klassennamen.
   Microsoft Excel-Version     Klassenname
   2000                        Excel.Application.9
   97                          Excel.Application.8
   7.0                         Excel.Application.5
   5.0                         Excel.Application.5
HINWEIS: Da Microsoft Excel 5.0 und 7.0 den gleichen Klassennamen
verwenden, bezieht sich, wenn beide Versionen auf demselben Computer
installiert sind, Excel.Application.5 immer auf Microsoft Excel 7.0. Dieses
Verhalten kann nicht verhindert werden. Microsoft Excel 5.0 und 7.0
verwenden jedoch das gleiche Dateiformat und verfügen über weitgehend
gleiche Funktionen, so daß Sie Microsoft Excel 7.0 anstelle von Microsoft
Excel 5.0 verwenden können, ohne daß mit Beeinträchtigungen gerechnet
werden muß.