von dcssd » Mo, 26.07.2010 10:40
Guten Morgen, bzw Mahlzeit
//Hatte bisher noch nicht deinen Wohnort gesehen, war erst etwas überrascht warum du Mittags, zum Abendessen gehst, aber hatte es mir mit einer langen Anfahrt erkärt. Aber Ok, nun schaut das anders aus.
Es funktioniert alles sehr gut. Genauso hab ich mir das Vorgestellt, Vielen Vielen Dank!!!
Ich hab noch 2 Änderungen rein gemacht, die will ich natürlich noch schnell mit her schreiben
Code: Alles auswählen
Sub Fixieren_und_Speichern
' Sub de39625
' 2010-07-23
' Kopieren eines definierten Bereich aus dem aktuellen Tabellenblatt
' in eine neue Datei einfügen (Werte, nicht Formeln)
' speichern unter einem Dateinamen, der aus Zelle N4 kommt
'
' 2010-07-25
' NEUER ABLAUF:
' Speichern unter neuem Dateinamen (aus N4)
' Abfrage beim Überschreiben
' Einfügen der Werte
' Löschen der nicht benötigten Tabellenblätter
'
' Linux: vom root-Verzeichnis aus (ohne root-slash!), bspw. zentrale/daten
' Windows: bspw. d:/daten/2010/
CONST cVerzeichnis = "C:/asdf/"
' Name des Blattes, das ERHALTEN bleiben soll
CONST sBlattBehalten = "Prod"
CONST sMakroName = "Fixieren und Speichern"
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
sZellwertN4 = _
ThisComponent.Sheets().getByName( sBlattName ).getCellRangeByName( "N4" ).String
rem ----------------------------------------------------------------------
' SpeichernAls:
sNeuDatei = "file:///" & cVerzeichnis & sZellwertN4 & ".ods"
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 args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "URL"
args3(0).Value = sNeuDatei
dispatcher.executeDispatch( document, ".uno:SaveAs", "", 0, args3())
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$G$63"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
' Kopieren des Bereichs
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
' Einfügen der kopierten Daten
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVDNT"
args2(1).Name = "FormulaCommand"
args2(1).Value = 0
args2(2).Name = "SkipEmptyCells"
args2(2).Value = false
args2(3).Name = "Transpose"
args2(3).Value = false
args2(4).Name = "AsLink"
args2(4).Value = false
args2(5).Name = "MoveMode"
args2(5).Value = 4
dispatcher.executeDispatch( document, ".uno:InsertContents", "", 0, args2())
>>>rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$I$1:$AC$468"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "A"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args5())<<<
rem ----------------------------------------------------------------------
' Löschen anderer Blätter
aBlaetter = ThisComponent.Sheets().ElementNames
For i = LBound( aBlaetter ) To UBound( aBlaetter )
If NOT ( aBlaetter( i ) = sBlattBehalten ) Then
ThisComponent.Sheets().removeByName( aBlaetter( i ) )
End If
Next i
rem ----------------------------------------------------------------------
' automatisches Speichern
' ThisComponent.store()
>>>rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())<<<
>>> davor und <<< hinter Änderung
Das Anfangsspeichern darf auf keine Fall passieren, hab ich gelöscht. dann löscht er noch nen paar Zeilen, die zum Ausfüllen dienten und speicherts zum schluss nochmal.
So werden jetzt aus 386 kb je Datei, 25 kb - was bei knapp 1200 Datein im Jahr doch eine gewissen Unterschied macht.
Ist gelöst. DANKE!
Guten Morgen, bzw Mahlzeit
//Hatte bisher noch nicht deinen Wohnort gesehen, war erst etwas überrascht warum du Mittags, zum Abendessen gehst, aber hatte es mir mit einer langen Anfahrt erkärt. Aber Ok, nun schaut das anders aus.
Es funktioniert alles sehr gut. Genauso hab ich mir das Vorgestellt, Vielen Vielen Dank!!!
Ich hab noch 2 Änderungen rein gemacht, die will ich natürlich noch schnell mit her schreiben
[code] Sub Fixieren_und_Speichern
' Sub de39625
' 2010-07-23
' Kopieren eines definierten Bereich aus dem aktuellen Tabellenblatt
' in eine neue Datei einfügen (Werte, nicht Formeln)
' speichern unter einem Dateinamen, der aus Zelle N4 kommt
'
' 2010-07-25
' NEUER ABLAUF:
' Speichern unter neuem Dateinamen (aus N4)
' Abfrage beim Überschreiben
' Einfügen der Werte
' Löschen der nicht benötigten Tabellenblätter
'
' Linux: vom root-Verzeichnis aus (ohne root-slash!), bspw. zentrale/daten
' Windows: bspw. d:/daten/2010/
CONST cVerzeichnis = "C:/asdf/"
' Name des Blattes, das ERHALTEN bleiben soll
CONST sBlattBehalten = "Prod"
CONST sMakroName = "Fixieren und Speichern"
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
sZellwertN4 = _
ThisComponent.Sheets().getByName( sBlattName ).getCellRangeByName( "N4" ).String
rem ----------------------------------------------------------------------
' SpeichernAls:
sNeuDatei = "file:///" & cVerzeichnis & sZellwertN4 & ".ods"
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 args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "URL"
args3(0).Value = sNeuDatei
dispatcher.executeDispatch( document, ".uno:SaveAs", "", 0, args3())
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$G$63"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
' Kopieren des Bereichs
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
' Einfügen der kopierten Daten
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVDNT"
args2(1).Name = "FormulaCommand"
args2(1).Value = 0
args2(2).Name = "SkipEmptyCells"
args2(2).Value = false
args2(3).Name = "Transpose"
args2(3).Value = false
args2(4).Name = "AsLink"
args2(4).Value = false
args2(5).Name = "MoveMode"
args2(5).Value = 4
dispatcher.executeDispatch( document, ".uno:InsertContents", "", 0, args2())
>>>rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$I$1:$AC$468"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "A"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args5())<<<
rem ----------------------------------------------------------------------
' Löschen anderer Blätter
aBlaetter = ThisComponent.Sheets().ElementNames
For i = LBound( aBlaetter ) To UBound( aBlaetter )
If NOT ( aBlaetter( i ) = sBlattBehalten ) Then
ThisComponent.Sheets().removeByName( aBlaetter( i ) )
End If
Next i
rem ----------------------------------------------------------------------
' automatisches Speichern
' ThisComponent.store()
>>>rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())<<<[/code]
>>> davor und <<< hinter Änderung
Das Anfangsspeichern darf auf keine Fall passieren, hab ich gelöscht. dann löscht er noch nen paar Zeilen, die zum Ausfüllen dienten und speicherts zum schluss nochmal.
So werden jetzt aus 386 kb je Datei, 25 kb - was bei knapp 1200 Datein im Jahr doch eine gewissen Unterschied macht.
Ist gelöst. DANKE!