Speichern als xls

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

cruzylin
**
Beiträge: 21
Registriert: So, 30.01.2011 19:04

Speichern als xls

Beitrag von cruzylin »

Hallo,

ich habe von komma4 ein Makro auf meine Bedürfnisse angepasst. Dabei geht es, aus Zelleninhalten einen Dateinamen zu kreieren und zu speichern; als odf.

Nun versuche ich dieses Dokument auch im xls-format zu speichern, doh meine Versuche enden immer in einem Fehler, das eine Objektvariable nicht belegt ist.

Code: Alles auswählen

Sub AuftragAbschliessen_xls

CONST cVerzeichnis = "h:/Aufträge/A-Abgeschlossen"

CONST sBlattBehalten = "Auftragsannahme"
CONST sMakroName = "AuftragAbschliessen"
CONST sMakroVersion = " v1.0.0"
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------


' Zusammensetzen des Dateinamens
sBlattName = document.Controller.ActiveSheet.Name
Kunde = _
ThisComponent.Sheets().getByName( sBlattName ).getCellRangeByName( "B6" ).String 'Kunde
rem ----------------------------------------------------------------------
sBlattName1 = document.Controller.ActiveSheet.Name
AuftrNr = _
ThisComponent.Sheets().getByName( sBlattName1 ).getCellRangeByName( "Q8" ).String 'Auftr.Nr.
rem ----------------------------------------------------------------------
sBlattName2 = document.Controller.ActiveSheet.Name
Hersteller = _
ThisComponent.Sheets().getByName( sBlattName2 ).getCellRangeByName( "A22" ).String 'Hersteller
rem ----------------------------------------------------------------------
sBlattName3 = document.Controller.ActiveSheet.Name
Typ = _
ThisComponent.Sheets().getByName( sBlattName3 ).getCellRangeByName( "C22" ).String 'Typ
rem ----------------------------------------------------------------------
sBlattName4 = document.Controller.ActiveSheet.Name
FabrNr = _
ThisComponent.Sheets().getByName( sBlattName4 ).getCellRangeByName( "E22" ).String 'Fabr.Nr.
rem ----------------------------------------------------------------------
sBlattName5 = document.Controller.ActiveSheet.Name
ID = _
ThisComponent.Sheets().getByName( sBlattName5 ).getCellRangeByName( "H22" ).String 'ID



' SpeichernAls: 
sNeuDatei = _
"file:///" & cVerzeichnis & "/" & Kunde & "/" & Hersteller & "_" & Typ & "_" & FabrNr & "_" & "ID_" & ID & "_" & AuftrNr & ".xls" 

If FileExists( sNeuDatei ) Then
   If MsgBox( "Die Datei existiert bereits!" & CHR(10) & _
         sNeuDatei & CHR(10) & _
         "Überschreiben?" , 36, _
         sMakroName & sMakroVersion ) = 7 THEN
         Exit Sub
   End If
End If

dim Filter(0) As New com.sun.star.beans.PropertyValue
Filter(0).Name = "FilterName"
Filter(0).Value = "MS Excel 97"
Url = sNeuDatei
Url = ConvertToUrl(Url)

dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "URL"
' args3(0).Value = "MS Excel 97"
args3(0).Value = sNeuDatei

dispatcher.executeDispatch( document, ".uno:SaveAs", "", 0, Url, Filter(), args3())

' automatisches Speichern
' ThisComponent.store()

End Sub

Wo liegt mein Fehler und wie kann man es umsetzen ???
Zuletzt geändert von cruzylin am Di, 01.03.2011 21:39, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Speichern als xls

Beitrag von komma4 »

Bei welcher Zeile kommt die Fehlermeldung?

Alle Variablen der Zeile mal mit XRAY angesehen? Dann ist es ziemlich schnell klar, was nicht gesetzt ist 8)
Mit dem geposteten AUSSCHNITT aus dem Code kann ich das nicht erkennen...



Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
cruzylin
**
Beiträge: 21
Registriert: So, 30.01.2011 19:04

Re: Speichern als xls

Beitrag von cruzylin »

Hallo Winfried,

ich habe jetzt den Code im 1.Beitrag komplettiert.
Im Prinzip geht es um die Zeilen zwischen den "------"

und der Fehler liegt laut Meldung in der letzten Zeile:

Code: Alles auswählen

dispatcher.executeDispatch( document, ".uno:SaveAs", "", 0, Url, Filter(), args3())
Mit XRAY habe ich mich noch nicht beschäftigt, ich kenne das noch nicht; ich probier gleich mal mein Glück.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Speichern als xls

Beitrag von komma4 »

Ja... nun:

Deine dispatcher-Zeile ist falsch.

Richtig wäre

Code: Alles auswählen

dispatcher.executeDispatch( document, ".uno:SaveAs", "", 0, args3())
nach dem Füllen der Argumente:

Code: Alles auswählen

dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "URL"
args3(0).Value = URL
args3(1).Name = "FilterName"
args3(1).Value = "MS Excel 97"

Klappt das jetzt?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
cruzylin
**
Beiträge: 21
Registriert: So, 30.01.2011 19:04

Re: Speichern als xls

Beitrag von cruzylin »

Ah...jetzt ja, Super, ich danke Dir !!!
Antworten