Makro um eine Tabelle anders zu formatieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

mel2503
Beiträge: 2
Registriert: Di, 15.01.2008 09:38

Makro um eine Tabelle anders zu formatieren

Beitrag von mel2503 »

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
Benutzeravatar
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

Beitrag von komma4 »

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....
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)
mel2503
Beiträge: 2
Registriert: Di, 15.01.2008 09:38

Re: Makro um eine Tabelle anders zu formatieren

Beitrag von mel2503 »

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
Benutzeravatar
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

Beitrag von komma4 »

Das Löschen ist einfach:

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
Das Speichern dann mit der Anweisung:

Code: Alles auswählen

neuURL = ConvertToURL( ThisComponent.URL & "_bearbeitet" )
ThisComponent.storeToURL( neuURL, Array() )
und anschliessendes Verwerfen der Änderungen an der Originaldatei

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)
Antworten