Hallo liebe Leute,
ich möchte per Makro eine .ods-Datei öffnen ein paar Zellen kopieren und in einer anderen .ods-Datei einfügen.
ich habe die Makroaufnahme probiert und mit der Maus alles ausgeführt (Datei-öffnen, markieren, kopieren, Dafei öffnen, markieren, einfügen)
Leider ohne Erfolg eines sinvollen Makros.
Wie funktioniert Dateiarbeit bei .ods-Dateien ( Tabellenkalkulationsdateien ).
Wichtig wäre noch, dass ich einen Mac also OSX mit OpenOffice nutze.
Bin für jeden Tip sehr dankbar.
Bye urbanKS
odf-Datei öffnen und Zellen kopieren
Moderator: Moderatoren
Re: odf-Datei öffnen und Zellen kopieren
Dieses spezielle Szenario lässt sich nicht per Makrorekorder aufzeichnen. Der Makrorekorder in OpenOffice/LibreOffice funktioniert diesbezüglich anders als der in z.B. MS Office.ich möchte per Makro eine .ods-Datei öffnen ein paar Zellen kopieren und in einer anderen .ods-Datei einfügen.
ich habe die Makroaufnahme probiert und mit der Maus alles ausgeführt (Datei-öffnen, markieren, kopieren, Dafei öffnen, markieren, einfügen)
Leider ohne Erfolg eines sinvollen Makros.
Du musst das Ganze also händisch programmieren, allerdings wäre es dazu gut vorab zu wissen wozu Du das Kopieren durchführst, denn wenn Du nur die entsprechenden Zellwerte (und keine sonstigen Inhalte) übernehmen willst ist das leicht zu programmieren, das wirkliche formale Kopieren, unter den vorliegenden Umständen, jedoch recht aufwendig zu programmieren.
Einlesen kannst Du Dich in:
viewtopic.php?f=18&t=1553
Gruß
Stephan
Re: odf-Datei öffnen und Zellen kopieren
Danke Stephan für den Vergleich mit MS-Office-Makros.
Mich würde allerdings neben deinem Link interessieren, ob man
auch Bücher erwerben kann in denen die Makro-Beispiele in Openoffice
detailiert erklärt werden. Arbeit mit Dateien wäre ein anderes Thema.
Dabei wäre vielleicht nicht uninteressant wie genau die Programmiersprache heisst die man
in Openofficeprogrammierprogrammen verwendet. Um mit diesen Namen dann
eben nach Büchern suchen könnte.
Ich hoffe es ist nicht nur das einfache Basic...
Bin für jeden Tip dankbar.
Noch ne kurze Frage zu meinem eigentlichen Problem:
Hat schon mal jemand per Makro eine .ode-Datei
geöffnet und dann ausgelesen (bestimmte Zellen)?
Mit was für einer Funktion wird das genau gemacht ?
Mich würde allerdings neben deinem Link interessieren, ob man
auch Bücher erwerben kann in denen die Makro-Beispiele in Openoffice
detailiert erklärt werden. Arbeit mit Dateien wäre ein anderes Thema.
Dabei wäre vielleicht nicht uninteressant wie genau die Programmiersprache heisst die man
in Openofficeprogrammierprogrammen verwendet. Um mit diesen Namen dann
eben nach Büchern suchen könnte.
Ich hoffe es ist nicht nur das einfache Basic...
Bin für jeden Tip dankbar.
Noch ne kurze Frage zu meinem eigentlichen Problem:
Hat schon mal jemand per Makro eine .ode-Datei
geöffnet und dann ausgelesen (bestimmte Zellen)?
Mit was für einer Funktion wird das genau gemacht ?
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: odf-Datei öffnen und Zellen kopieren
Standardtipps zum Erlernen von StarBasic:
Andrews Makro-Dokument
und ein Objekt-Inspektions-Tool, wie
XRAY und/oder MRI
Andrews Makro-Dokument
und ein Objekt-Inspektions-Tool, wie
XRAY und/oder MRI
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)
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)
Re: odf-Datei öffnen und Zellen kopieren
Du kannst viele Sprachen verwenden: Java, Python, WSH, VB, ...Dabei wäre vielleicht nicht uninteressant wie genau die Programmiersprache heisst die man
in Openofficeprogrammierprogrammen verwendet.
Die Makro-Sprache die OPenOffice selbst 'an Bord' hat, quasi das OO-Äquivalent zu VBA, heißt StarBasic.
siehe:Bin für jeden Tip dankbar.
viewtopic.php?f=18&t=1553
öffnen siehe:Noch ne kurze Frage zu meinem eigentlichen Problem:
Hat schon mal jemand per Makro eine .ode-Datei
geöffnet und dann ausgelesen (bestimmte Zellen)?
http://www.dannenhoefer.de/faqstarbasic ... ffnen.html
Zellen Auslesen siehe:
http://www.dannenhoefer.de/faqstarbasic ... hreib.html
http://www.dannenhoefer.de/faqstarbasic ... Zelle.html
Gruß
Stephan
Re: odf-Datei öffnen und Zellen kopieren
Hallo urbanks,
habe einmal versucht deinen Wunsch rudimentär umzusetzen.
Hier auf meine XP-Kiste tut es ordentlich was es soll, was auf einem MAC passiert keine Ahnung!
Man öffnet per Filepicker eine .ods Datei im read only Modus, der Bereich Tabelle1.C3:H7 wird kopiert,
die Datei wird wieder geschlossen und der kopierte Bereich in der aktuellen Datei ab Tabelle1.C10 eingefügt.
und hier noch was zum "beiSpielen"
hoffe das hilft dir etwas weiter.
Viel Spaß damit.
habe einmal versucht deinen Wunsch rudimentär umzusetzen.
Hier auf meine XP-Kiste tut es ordentlich was es soll, was auf einem MAC passiert keine Ahnung!
Man öffnet per Filepicker eine .ods Datei im read only Modus, der Bereich Tabelle1.C3:H7 wird kopiert,
die Datei wird wieder geschlossen und der kopierte Bereich in der aktuellen Datei ab Tabelle1.C10 eingefügt.
Code: Alles auswählen
Sub OpenCopyCloseInsert
Dim Dialogtyp(0)
Dim myFileProp(0) as new com.sun.star.beans.PropertyValue
myFileProp(0).Name="ReadOnly"
myFileProp(0).Value = true
oDoc = thisComponent
mySheet = oDoc.sheets(0)
again:
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
myDialog.initialize(DialogTyp())
myDialog.displaydirectory=UserDictionary '"c:\Dokumente und Einstellungen\User\Eigene Dateien"
MyDialog.execute
if ubound(MyDialog.Files()) < 0 then exit sub
FileName=MyDialog.Files(0)
if right(FileName,4) = ".ods" then
oDocument = StarDesktop.loadComponentFromURL(filename, "_blank", 0, myFileProp() )
oRead = StarDesktop.CurrentComponent
if oRead.identifier <> "com.sun.star.sheet.SpreadsheetDocument" then goto newtry:
oReadSheet = oRead.sheets(0)
ReadView = oRead.CurrentController
ReadCells = oReadsheet.getCellRangeByName("C3:H7")
ReadView.Select(ReadCells)
CopyInClipboard
else
newtry:
print "es wurde keine Calcdatei gewählt"
goto again:
end if
oRead.close(false)
WriteView = oDoc.CurrentController
WriteCell = mySheet.GetCellRangeByName("C10")
WriteView.Select(WriteCell)
' InsertTxtFromClipboard
InsertAllFromClipboard
End sub
sub CopyInClipboard
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = StarDesktop.CurrentComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
end sub
sub InsertTxtFromClipboard 'Text,Zahlen,Datum
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 ----------------------------------------------------------------------
dim args1(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "SVDN"
args1(1).Name = "FormulaCommand"
args1(1).Value = 0
args1(2).Name = "SkipEmptyCells"
args1(2).Value = false
args1(3).Name = "Transpose"
args1(3).Value = false
args1(4).Name = "AsLink"
args1(4).Value = false
args1(5).Name = "MoveMode"
args1(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
end sub
sub InsertAllFromClipboard
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub
hoffe das hilft dir etwas weiter.
Viel Spaß damit.
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: odf-Datei öffnen und Zellen kopieren
Hallo urbanks,
-> Extras
-> Makros
---> Makros verwalten
nachschaust, dann siehst Du dort die Programmiersprachen die 'OpenOffice' (OOo, LO, AOO) unterstüzt.
Wie du eben festgestellt haben müsstest, kann man nebst StarBasic auch noch JavaScript, BeanShell und Python benutzen. Jedoch geht das nicht so einfach oder komfortabel wie mit StarBasic, da nur bei StarBasic ein Editor schon von Haus aus integriert ist.
Bei z.B. Python muss man einen externen Editor nehmen und sein Programm darin schreiben. Anschließend muss man das geschriebene Programm selber in der gewünschten Calc-Datei (als Beispiel) integrieren. Wie das genau geht, weiß ich jetzt so auf die schnelle nicht, wollte nur grob umschreiben das es etwas umständlicher ist.
Hier im Forum gibt es einige Calc-Dateien wo Python-Makros integriert sind, die zu diversen Problemen als Vorschlag präsentiert wurden. Kannst ja mal danach suchen.
Zu deinem eigentlichem Problem.
Du hast ja schon verschiedene Hinweise dazu bekommen, inklusive einer Beispieldatei von clag. Jedoch hast Du dich noch nicht dazu geäußert wie Du die gewünschten Zellen kopiert haben möchtest. Und damit meine ich, ob Zellformate und Notizen mitkopiert werden sollen (siehe Beispieldatei von clag), oder ob es dir nur um den eigentlichen Inhallt/Wert der Zellen geht?
Es gibt mit StarBasic verschiedene Wege um etwas aus einer Datei in eine andere Datei zu kopieren. Und nicht nur der Weg ist unterschiedlich, sondern auch wie etwas kopiert wird.
Das Beispiel von clag kopiert alles über die Zwischenablage aus einer Datei heraus.
Mein Beispiel kopiert nur die Werte aus der Datei heraus.
Wohl bemerkt! Es werden nur die Werte im Zellbereich A1:C3 und keine Formeln, Notizen und Zellformate mit diesem Beispiel kopiert.
Das Datei öffnen geht genau so wie im Beispiel von clag. Auf bestimmte Fehlerüberprüfungen habe ich jetzt einfach mal verzichtet.
Ach ja, hätte ich jetzt beinahe vergessen!
Willst Du die Daten (Werte/Texte oder was auch immer) aus der zu öfnenden Datei in die Datei schreiben von wo aus Du das Makro startest, oder sollen die Daten in eine andere Datei geschrieben werden?
Gruß
balu
Wenn Du mal unterDabei wäre vielleicht nicht uninteressant wie genau die Programmiersprache heisst die man
in Openofficeprogrammierprogrammen verwendet. Um mit diesen Namen dann
eben nach Büchern suchen könnte.
-> Extras
-> Makros
---> Makros verwalten
nachschaust, dann siehst Du dort die Programmiersprachen die 'OpenOffice' (OOo, LO, AOO) unterstüzt.
Selbst das "einfache" StarBasic ist für sehr viele Aufgaben bestens geeignet.Ich hoffe es ist nicht nur das einfache Basic...
Wie du eben festgestellt haben müsstest, kann man nebst StarBasic auch noch JavaScript, BeanShell und Python benutzen. Jedoch geht das nicht so einfach oder komfortabel wie mit StarBasic, da nur bei StarBasic ein Editor schon von Haus aus integriert ist.
Bei z.B. Python muss man einen externen Editor nehmen und sein Programm darin schreiben. Anschließend muss man das geschriebene Programm selber in der gewünschten Calc-Datei (als Beispiel) integrieren. Wie das genau geht, weiß ich jetzt so auf die schnelle nicht, wollte nur grob umschreiben das es etwas umständlicher ist.
Hier im Forum gibt es einige Calc-Dateien wo Python-Makros integriert sind, die zu diversen Problemen als Vorschlag präsentiert wurden. Kannst ja mal danach suchen.
Zu deinem eigentlichem Problem.
Du hast ja schon verschiedene Hinweise dazu bekommen, inklusive einer Beispieldatei von clag. Jedoch hast Du dich noch nicht dazu geäußert wie Du die gewünschten Zellen kopiert haben möchtest. Und damit meine ich, ob Zellformate und Notizen mitkopiert werden sollen (siehe Beispieldatei von clag), oder ob es dir nur um den eigentlichen Inhallt/Wert der Zellen geht?
Es gibt mit StarBasic verschiedene Wege um etwas aus einer Datei in eine andere Datei zu kopieren. Und nicht nur der Weg ist unterschiedlich, sondern auch wie etwas kopiert wird.
Das Beispiel von clag kopiert alles über die Zwischenablage aus einer Datei heraus.
Mein Beispiel kopiert nur die Werte aus der Datei heraus.
Code: Alles auswählen
Dim myFileProp1(0) as New com.sun.star.beans.PropertyValue
Sub Main
oDok = thisComponent
sStartdatei = FileOpenDialog ("Datei auswählen")
myFileProp1(0).name = "Hidden"
myFileProp1(0).Value = True ' false
oExterneDatei = starDesktop.loadComponentfromURL(sStartdatei, "_blank", 0, myFileProp1())
oHauptDateiBlatt1 = oDok.sheets.getByName("Tabelle1")
oExternesBlatt1 = oExterneDatei.sheets(0)
oHauptDateiBlatt1.getCellRangeByName("A1:C3").clearContents(255)
dim aDatArray()
aDatArray = oExternesBlatt1.getCellRangeByName("A1:C3").getDataArray
oHauptDateiBlatt1.getCellRangeByName("A1:C3").setDataArray(aDatArray)
oExterneDatei.close(True)
End Sub
'
'########################################################################################################
'
function FileOpenDialog(title as String) as String
filepicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
filepicker.Title = title
filepicker.execute()
files = filepicker.getFiles()
FileOpenDialog = files(0)
End function
'
'########################################################################################################
'
Das Datei öffnen geht genau so wie im Beispiel von clag. Auf bestimmte Fehlerüberprüfungen habe ich jetzt einfach mal verzichtet.
Ach ja, hätte ich jetzt beinahe vergessen!
Willst Du die Daten (Werte/Texte oder was auch immer) aus der zu öfnenden Datei in die Datei schreiben von wo aus Du das Makro startest, oder sollen die Daten in eine andere Datei geschrieben werden?
Gruß
balu
- Dateianhänge
-
- Werte_aus_einer_anderen_Datei_kopieren.ods
- (9.96 KiB) 118-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden