Seite 1 von 3
Csv Makro Parameter
Verfasst: Mi, 25.12.2013 14:54
von abuayyoub
Hallo nochmal,
Nur zum verständnis, ich habe hier eine csv datei von einem lieferanten die ich mit einem downloadmanager runterlade, dann eine spalte mit formel ergänze, speichere (mittlerweile mit einem makro) und fertig. Es ist immer die selbe csv datei mit dem selben dateinamen, nun möchte ich mit einem parameter das ganze automatisieren, vom autom. Öffnen der datei bis hin zum speichern und schliessen, wie kann ich es realisieren. Ich bin soweit gekommen das der parameter mir die datei bis zur abfrage der öffnungsart ( also wo er fragt mit welcher codierung usw.) Gekommen.
Hoffe das mir hier jemand helfen kann
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 15:16
von F3K Total
Hi,
das Makro muss die Parameter in Kurzform beinhalten.
Um sie herauszubekommen, kannst Du die geöffnete Datei einmal als .csv mit den gleichen Parametern, wie du sie beim Öffnen setzt, speichern, und diesen Vorgang mit dem Makro-Recorder aufzeichnen.
In dem entstehenden Makro sollten einige Zeilen vorkommen, die die notwendigen Parameter enthalten, etwa so:
Code: Alles auswählen
Dim Args(1) as New com.sun.star.beans.PropertyValue
Args(0).Name = "FilterName"
Args(0).Value ="Text - txt - csv (StarCalc)"
Args(1).Name = "FilterOptions "
Args(1).Value = "44,34,21,1,,0,false,false" ' <------ hängt von der Art der .csv-Datei ab
Die letzte Zeile ist die wichtigste.
Wenn du das hast, melde dich wieder.
Gruß R
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 16:35
von abuayyoub
Hallo,
Danke für die Antwort, habe das Makro aufgezeichnet, nun hier der Inhalt der Makro:
Code: Alles auswählen
REM ***** BASIC *****
sub mein makro
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(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$U$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "EK"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$U$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "StringName"
args4(0).Value = "=h2+i2"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$U$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "U2:U12000"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
end sub
noch was, was muss ich einstellen das er mir bei dieser datei nicht jedesmal das auswahl fensten einblendet, wenn ich die csv öffne, weil es immer die selbe ist.
Danke
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 17:26
von F3K Total
Hallo,
ich denke, du hast entweder das falsche Makro geposted oder nicht den Export einer CSV Datei aufgenommen.
Wo ist die wichtige Zeile? In deinem Makro finde ich sie auf jeden Fall nicht.
Gruß R
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 19:40
von abuayyoub
Hallo,
Ich verstehe nicht was du meinst, das ist alles was ich kann. Ich habe ein makro aufgezeichnet, es gespeichert und fertig. Ich möchte nun das makro mit einer batch ausführen lassen, vom öffnen bis hin zum schliessen. mir fehlt jetzt das die csv ohne auswahl fenster geöffnet wird und nachdem makro wieder schliesst. Bin jetzt seit einer woche dran und komme nicht voran
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 19:52
von F3K Total
Hi,
abuayyoub hat geschrieben:... mir fehlt jetzt das die csv ohne auswahl fenster geöffnet wird und nachdem makro wieder schliesst
Ja, das habe ich schon verstanden, ab das ist eben nicht ganz so einfach. Damit dass Auswahlfenster geschlossen bleibt, kann man dem Makro sagen, mit welchen .csv-Parametern, das sind nämlich die, die du in dem Auswahlfenster jedes Mal wählen musst, es arbeiten soll. Sonst geht es nicht, dann wird die Datei falsch geladen.
So, und diese Parameter findest Du heraus, indem du deine geöffnete Datei einmal mit genau den Parametern (beim Speichern-> Filtereinstellungen bearbeiten) als .csv speicherst und dabei den Makrorecorder mitlaufen läßt.
Erst wenn du sie kennst, kann das Makro weiter erstellt werden.
Wenn Dir das zu kompliziert ist, kannst Du auch eine Beispiel.csv Datei hier hochladen, dann hab ich die Parameter in Nullkommanix herausgefunden.
Gruß R
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 20:05
von abuayyoub
Hallo,
OK, jetzt habe ich es erst verstanden, hier die paramater:
Code: Alles auswählen
dim args11(2) as new com.sun.star.beans.PropertyValue
args11(0).Name = "URL"
args11(0).Value = "file:///"
args11(1).Name = "FilterName"
args11(1).Value = "Text - txt - csv (StarCalc)"
args11(2).Name = "FilterOptions"
args11(2).Value = "59,34,76,1,,0,false,true,true"
Danke
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 20:07
von F3K Total
In welchem Format möchtest du speichern?
.ods?
Gruß R
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 20:09
von abuayyoub
Hallo,
in csv
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 20:50
von F3K Total
So,
das sollte funzen:
Code: Alles auswählen
S_Load_CSV_INSERT_EK_Store_CSV
Dim Args(1) as New com.sun.star.beans.PropertyValue
sURL = converttourl("C:\Users\<USERNAME>\Desktop\Test.csv") ' <------ Dateipfad der zu ladenden Datei
Args(0).Name = "FilterName"
Args(0).Value ="Text - txt - csv (StarCalc)"
Args(1).Name = "FilterOptions "
Args(1).Value = "59,34,76,1,,0,false,true,true"
odoc = StarDesktop.loadComponentFromURL(sURL,"_blank", 0, Args())
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = odoc.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$U$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "EK"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$U$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "StringName"
args4(0).Value = "=h2+i2"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$U$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "U3:U12000"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem ----------------------------------------------------------------------
sURLnew = converttourl("C:\Users\<USERNAME>\Desktop\TestNew.csv") ' <------ Dateipfad der zu speichernden Datei
odoc.storeToURL(sURLnew,Args())
odoc.close -1
msgbox "OK"
end sub
die zwei Pfade müssen natürlich angepasst werden:
Code: Alles auswählen
...
sURL = converttourl("C:\Users\<USERNAME>\Desktop\Test.csv") ' <------ Dateipfad der zu ladenden Datei
...
sURLnew = converttourl("C:\Users\<USERNAME>\Desktop\TestNew.csv") ' <------ Dateipfad der zu speichernden Datei
...
Gruß R
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 20:55
von abuayyoub
Hallo,
Danke erstmal
Wie lade ich die datei jetzt mit batch ohne auswahlfenster mit dem makro
Re: Csv Makro Parameter
Verfasst: Mi, 25.12.2013 22:43
von F3K Total
Hi,
wenn ich dich richtig verstehe, möchtest Du AOO per batch-Datei im Hintergrund laden, dann die .csv laden -> bearbeiten -> speichern und AOO wieder beenden?
Tut mir leid, da bin ich überfragt, vielleicht weiß jemand anderes weiter.
Gruß R
Re: Csv Makro Parameter
Verfasst: Do, 26.12.2013 01:36
von F3K Total
So,
ich habe geforscht, es gibt vielleicht einen eleganteren Weg aber dies funktioniert unter Windows 7.
- ein .vb-Script Start_batch.vbs
Code: Alles auswählen
Set WShShell = WScript.CreateObject("WScript.Shell")
WShShell.Run "ModifyCSV.bat", 0
- startet die Batchdatei ModifyCSV.bat die sich im gleichen Ordner wie Start_batch.vbs befindet.
Code: Alles auswählen
@echo off
set sOfficepath=C:\Program Files\OpenOffice 4\program\soffice.exe
set sMacropath=macro:///Standard.Modify_csv.S_load_csv_insert_EK_store_csv
"%sOfficepath%" -norestore -nologo "%sMacropath%"
exit
- Die Batch Datei öffnet AOO 4, welches sich im Ordner C:\Program Files\OpenOffice 4\program\soffice.exe befindet.
- Unter meine Makros hat diese Installation
- in der Basic-Bibliothek Standard
- ein Modul Modify_csv und
- in diesem Modul befindet sich das Makro S_load_csv_insert_EK_store_csv
Code: Alles auswählen
Sub S_load_csv_insert_EK_store_csv
Dim Args(2) as New com.sun.star.beans.PropertyValue
sURL = converttourl("C:\Users\<USERNAME>\Desktop\Test.csv") ' <------ Dateipfad der zu ladenden Datei
Args(0).Name = "FilterName"
Args(0).Value ="Text - txt - csv (StarCalc)"
Args(1).Name = "FilterOptions "
Args(1).Value = "59,34,76,1,,0,false,true,true"
Args(2).Name = "Hidden"
Args(2).Value = true
odoc = StarDesktop.loadComponentFromURL(sURL,"_blank", 0, Args)
osheet = odoc.sheets(0)
oHeaderCell = osheet.getcellrangebyname("U1")
oHeaderCell.string ="EK"
oFormulaRange = osheet.getcellrangebyname("U2:U12000")
aFormulaArray = oFormulaRange.FormulaArray
for i = 0 to ubound(aFormulaArray)
aFormulaArray(i)(0) = "=H" &(i+2)&"+I"&(i+2)
next i
oFormulaRange.setFormulaArray(aFormulaArray)
sURLnew = converttourl("C:\Users\<USERNAME>\Desktop\TestNew.csv") ' <------ Dateipfad der zu speichernden Datei
odoc.storeToURL(sURLnew,Args)
odoc.close -1
end sub
- Dieses Makro liest die .csv Datei im Hintergrund ein und
- schreibt die geänderte Datei zurück.
- Alles nicht sichtbar.
Du wirst feststellen, das von Deinem aufgenommenen Makro nix mehr da ist.
Ich habe es komplett umgeschrieben, da das aufgenommene im Hintergrund nicht funktioniert.
Viel Erfolg Gruß R
Re: Csv Makro Parameter
Verfasst: Do, 26.12.2013 12:27
von abuayyoub
Hallo,
sorry das ist mir zu kompiziert, es kann doch nicht so schwer sein die csv ohne parameter anfrage (auswahlfenster) zu öffnen und wieder zu schliessen.
hier meine batch datei:
start soffice macro:///standard.module1.mein makro -o "file.csv"
wenn ich diesen befehl in cmd.exe eingebe erscheint das auswahlfenster danch wird das Makro ausgeführt, es braucht dann nur zu schliessen dann habe ich was ich will, das dürfte doch möglich sein diese zwei hindernisse zu lösen.
Danke
Re: Csv Makro Parameter
Verfasst: Do, 26.12.2013 12:49
von Stephan
sorry das ist mir zu kompiziert
dann dürfte hier Ende der Diskussion sein, denn OpenOffice kann es nicht nicht anders
es kann doch nicht so schwer sein die csv ohne parameter anfrage (auswahlfenster) zu öffnen und wieder zu schliessen.
nö, das ist simpel und ist Dir im Thread ja nun bereits mehrfach anhand von Code-Beispielen erläutert worden
Ich weiß nicht was dazu noch zu sagen wäre, denn ohne Angabe von Öffnungsparametern kann es nicht gehen und die Art und Weise deren Übergabe, also z.B.:
ist nun einmal eine Randbedingung die OpenOffice setzt weil es im Programm so erwartet wird (z.B. siehe:
http://www.starbasicfaq.de/filteroptionen.html oderauch erläutert, in englisch, in Kapitel4.2.1 von
http://www.openoffice.org/api/basic/man ... torial.pdf).
Gruß
Stephan