Hallo,
also ich habe folgendes Problem:
ich möchte eine txt.datei einlesen, in der Tabelle ein paar Spalten und Zeilen löschen und zwei "wenn, dann, sonst" -Befehle anwenden. Die geänderte Datei dann wieder als txt.datei mit einem anderen Namen abspeichern! In Excel 2007 ist es mir gelungen, konnte das makro aufzeichnen und noch einen Befehl reinkopieren! ABER ich habe auf der Arbeit nur OpenOffice.org 2.3 und muss es dort jetzt realisieren!
Ich habe erst mal probiert die Tabelle nur automatisch formatieren zu lassen! Also habe ich habe die Formatierung mit dam Recorder aufgenommen und wenn ich dann das Makro auf die selbe Ursprungstabelle wieder ablaufen lasse, löscht er andere Zeilen und Spalten zusätzlich!
Leider habe ich von Basicprogrammierung nicht viel Ahnung!
Wäre euch sehr Dankbar für dir Hilfe!
LG
Makro um eine Tabelle anders zu formatieren
Moderator: Moderatoren
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Makro um eine Tabelle anders zu formatieren
wir helfen Dir schon gerne - nur wie?
Du hast eine Calc-Datei, die Du bearbeiten willst?
Welche WENN-DANN Befehle sollen ausgeführt werden?
Welche Formatierung(en) soll angewendet werden?
Unter welchem Dateinamen soll gespeichert werden?
Makro-Aufzeichnungen sind i.d.R. nicht vollständig und/oder zuverlässig....
Du hast eine Calc-Datei, die Du bearbeiten willst?
Welche WENN-DANN Befehle sollen ausgeführt werden?
Welche Formatierung(en) soll angewendet werden?
Unter welchem Dateinamen soll gespeichert werden?
Makro-Aufzeichnungen sind i.d.R. nicht vollständig und/oder zuverlässig....
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: Makro um eine Tabelle anders zu formatieren
genau ich habe eine calc.datei die ich bearbeiten will! In der vorhandenen Tabelle sollen die Zeilen 1-26 und die Spalte B gelöscht werden! In der Spalte A soll abgefragt werden ob die Zahl kleiner 100 ist und wenn ja mit 1000 multipliziert werden und ansonsten soll die Zahl stehen bleiben! Bei allen anderen Zellen Soll geprüft werden, ob die Zelle leer ist, wenn ja soll eine "0" eingetragen werden und ansonsten die Zahl die in der Zelle steht! Diese neue Tabelle sollte dann unter einem zum Beispiel daten.txt abgespeichert werden!
Ich habe das wie gesagt mit dem Recorder versucht:
(Aber erst mal nur das löschen der Spalten/Zeilen)
sub lll
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 = "$A$3"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$B$3"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$B$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
end sub
Sub HelloWorld
msgbox "Hello World!"
End Sub
sub datenfor
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 = "Flags"
args1(0).Value = "SVDFN"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())
end sub
Kann ich dort wo die Spalten/Zeilen gelöscht werden, auch fixe Spalten/Zeilen angeben?
LG
Ich habe das wie gesagt mit dem Recorder versucht:
(Aber erst mal nur das löschen der Spalten/Zeilen)
sub lll
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 = "$A$3"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$B$3"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$B$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
end sub
Sub HelloWorld
msgbox "Hello World!"
End Sub
sub datenfor
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 = "Flags"
args1(0).Value = "SVDFN"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())
end sub
Kann ich dort wo die Spalten/Zeilen gelöscht werden, auch fixe Spalten/Zeilen angeben?
LG
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Makro um eine Tabelle anders zu formatieren
Das Löschen ist einfach:
Der Werte-Vergleich (<100 oder leer) geht dann nur durch Bearbeiten aller Zellen,
Anweisungen hierzu (Positionsangabe variabilisieren und iterieren):
Das Speichern dann mit der Anweisung:
und anschliessendes Verwerfen der Änderungen an der Originaldatei
Alles ungetestet -aus der Hüfte-.
Hier [8°52'55"N 98°16'1" E] ist es immer noch zu warm [31°C] zum Testen (arbeiten)
Hilft das?
Code: Alles auswählen
oBlatt = ThisComponent.Sheets.getByName( "Tabelle1" )
oZeilen = oBlatt.Rows
' start-Index und Anzahl
oZeilen.removeByIndex( 0, 26)
oSpalten = oBlatt.Columns
oSpalten.removeByIndex( 1 , 1)
Der Werte-Vergleich (<100 oder leer) geht dann nur durch Bearbeiten aller Zellen,
Anweisungen hierzu (Positionsangabe variabilisieren und iterieren):
Code: Alles auswählen
oBlatt.getCellByPosition( 0,3 ).getValue() ' Wert aus A4
Code: Alles auswählen
neuURL = ConvertToURL( ThisComponent.URL & "_bearbeitet" )
ThisComponent.storeToURL( neuURL, Array() )
Code: Alles auswählen
ThisComponent.dispose()
Alles ungetestet -aus der Hüfte-.
Hier [8°52'55"N 98°16'1" E] ist es immer noch zu warm [31°C] zum Testen (arbeiten)
Hilft das?
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)