aufgezeichnetes Makro fehlerhaft

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

migges
*
Beiträge: 19
Registriert: Mi, 30.11.2005 07:14

aufgezeichnetes Makro fehlerhaft

Beitrag von migges »

Hallo,

ich hoffe jemand kann mir helfen. Ich kenne mich nicht mit StarBasic aus und habe es auch nicht vor zu lernen. Nur leider muss ich ein Makro schreiben, ich dachte mir das ich dies durch "Makro aufzeichen" bewerkstelligen kann.
Das Makro soll alle Leerzeichen entfernen, den automatischen Zeilenumbruch rausnehmen und die Spalten in optimaler Breite darstellen.

Der Quelltext den mir das aufgezeichnete Makro lieft ist folgender.

Code: Alles auswählen

sub Test
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(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 65536
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = " "
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = ""
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "WrapText"
args2(0).Value = false

dispatcher.executeDispatch(document, ".uno:WrapText", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "aExtraWidth"
args3(0).Value = 0

dispatcher.executeDispatch(document, ".uno:SetOptimalColumnWidth", "", 0, args3())


end sub
Kann mir jemand helfen bzw sagen was falsch ist? Das Makro nimmt den automatischen Zeilenumbruch nicht raus.

mfg
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo
Das Makro nimmt den automatischen Zeilenumbruch nicht raus
um welches dokument handelt es sich (writer oder starcalc)?.

grüße

klaus
migges
*
Beiträge: 19
Registriert: Mi, 30.11.2005 07:14

Beitrag von migges »

Das Dokument ist mit OpenOffice Calc erstellt.

mfg
Zuletzt geändert von migges am Mi, 17.05.2006 11:09, insgesamt 1-mal geändert.
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hier das makro,

Code: Alles auswählen

Sub ZeilenumbruchRaus
	Dim oDoc, aktivesBlatt, oSpalte as Object
	oDoc = ThisComponent
	aktivesBlatt=oDoc.CurrentController.getActiveSheet
	oSpalte = aktivesBlatt.Columns(0)' 0 für Spalte A, 1 für B usw.
	oSpalte.isTextWrapped=false 'true bricht um
End Sub
grüße

klaus
migges
*
Beiträge: 19
Registriert: Mi, 30.11.2005 07:14

Beitrag von migges »

Hallo,

ersteinmal vielen Dank für die Hilfe.

Leider funktioniert das Makro bei mir nicht. Den Kommentar
oSpalte = aktivesBlatt.Columns(0)' 0 für Spalte A, 1 für B usw.
habe ich doch richtig verstanden, das 0 für alle Spalten steht, oder?

Evtl sollte ich hinzufügen das die Option grau hinterlegt ist.

Bild

Die Daten kommen aus einer Excel-Tabelle, da man leider unter Access 2.0 seine Daten nur in eine solche exportieren kann.
Ich habe die einen Bruchteil der Datei mal hochgeladen. Es wäre wirklich super wenn sich das jemand mal anschauen könnte.
http://migges.mi.funpic.de/WG33_S.ods

mfg
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo migges,

ich habe das ganze an deiner datei getestet und es funktioniert. das makro habe ich erweitert. nun wirst du nach des 1. und letzten spalte gefragt. im anschluss daran wird allen spalten, die dazwischen liegen, der zeilenumbruch entfernt und die spaltenbreite auf optimale größe eingestellt.

wenn du mir deine email nennst, kann ich dir die datei mit dem makro mailen.

Code: Alles auswählen

Sub ZeilenumbruchRausBreiteSpalteOptimal 
   Dim oDoc, aktivesBlatt, oSpalte as Object 
   Dim intSpalteVon as Integer 
   Dim intSpalteBis as Integer
   Dim i as Integer

   oDoc = ThisComponent 
   aktivesBlatt=oDoc.CurrentController.getActiveSheet 

   intSpalteVon=InputBox ("Zahl der 1. Spalte eingeben.","1.Spalte festlegen",2)
   intSpalteBis=InputBox("Zahl der letzten Spalte eingeben.","letzte Spalte festlegen",4)

'	msgbox(intSpalteVon)
'	msgbox(intSpalteBis)
	
	For i=intSpalteVon-1 to intSpalteBis-1
	   oSpalte = aktivesBlatt.Columns(i)' 0 für Spalte A, 1 für B usw. 
'	   oSpalte.isTextWrapped=true	   
	   oSpalte.isTextWrapped=false 'true bricht um 
'	   oSpalte.OptimalWidth=false
	   oSpalte.OptimalWidth=True

   next i 
End Sub 
grüße

klaus
migges
*
Beiträge: 19
Registriert: Mi, 30.11.2005 07:14

Beitrag von migges »

Vielen vielen Dank,

super Arbeit, funktioniert wunderbar!

Jetzt hätte ich noch ein Anliegen :D

Und zwar müssen alle Leerzeichen gelöscht werden. Ich habe es mal selber versucht mit "rtrim" aber das war ein Schuss in den Ofen. Ich kenne mich nur mit VB aus deswegen bereitet mir das echt Probleme. Ich meine das Makro was ich mir aufgezeichnet habe funktioniert.

Code: Alles auswählen

im args1(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 65536
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = " "
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = ""
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1()) 
Aber ich denke die Lösung ist ein wenig, naja ich sag mal, dürftig :)

Wenn du mir dabei noch helfen könntest gibs ne Bienchen :)
Ne ganz großes :wink:
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo migges,

also her mit dem bienchen.

Code: Alles auswählen

Sub ZeilenumbruchRausBreiteOptimalLeerzeichenRaus 
   Dim oDoc, aktivesBlatt, oSpalte, oBereich, oSuche as Object 
   Dim intSpalteVon as Integer 
   Dim intSpalteBis as Integer
   Dim int1 as Integer 
   Dim int2 as Integer
   Dim i as Integer

   oDoc = ThisComponent 
   aktivesBlatt=oDoc.CurrentController.getActiveSheet 

   intSpalteVon=InputBox ("Zahl der 1. Spalte eingeben.","1.Spalte festlegen",2)
   intSpalteBis=InputBox("Zahl der letzten Spalte eingeben.","letzte Spalte festlegen",4)

'	msgbox(intSpalteVon)
'	msgbox(intSpalteBis)
	
	For i=intSpalteVon-1 to intSpalteBis-1
	   oSpalte = aktivesBlatt.Columns(i)' 0 für Spalte A, 1 für B usw. 
'	   oSpalte.isTextWrapped=true	   
	   oSpalte.isTextWrapped=false 'true bricht um 
'	   oSpalte.OptimalWidth=false
	   oSpalte.OptimalWidth=True
		   
	   '--Leerzeichen suchen und ersetzen
	   oBereich = oSpalte
		oSuche = oBereich.createReplaceDescriptor()
		   with oSuche
		      .setSearchString(" ") 
		      .setReplaceString("") 
		    end with
		     oBereich.replaceAll(oSuche)		
		  next i 
End Sub
grüße

klaus
migges
*
Beiträge: 19
Registriert: Mi, 30.11.2005 07:14

Beitrag von migges »

Dankööööööööö :)

Echt klasse von dir! Hier dein versprochenes Bienchen :D

Bild

Einen schönen Tag wünsch ich!
migges
*
Beiträge: 19
Registriert: Mi, 30.11.2005 07:14

Beitrag von migges »

Ach eine Sache hab ich noch :)

Das mit den Leerzeichen ist für das aktuelle Dokument ok! Aber es kann auch passieren das Leerzeichen gewollt sind, ergo wäre eine Funktion die nur die Leerzeichen am Ende eines Eintrags wegnimmt besser. Wenn du mir dabei noch helfen könntest wäre das super! Aber das hat ein wenig mehr Zeit!

mfg
Antworten