Hallo zusammen,
schon wieder hab ich ein Problem. Ich versuche gerade via makro odt Dateien in docs umzuspeichern. Problem ist: Das sieht Bescheiden aus ^^
Ich hab in meiner odt mehrere versteckte Felder die beim umspeichern sichtbar werden und buttons die natürlich ihre funktion in der doc verlieren. Also möchte ich diese Elemente vor dem speichern aus der odt entfernen.
Es ist für mich kein problem mit Makro die Namen abzufragen und hab daraufhin versucht mit der deleteByName() Methode den Kram zu entfernen. Die Methode sagt mir aber das es unter dem Namen nichts zu löschen gäbe. Es ist anzunehmen das das auch die falsche methode ist, da ich die einfach blind mit Xray aus "ThisComponent" rausgesucht habe.
Aber wie lösch ich jetzt die Felder und buttons wenn ich nur den Namen habe?
Gruß Steppenwolf
Wie löscht man Button/Felder?
Moderator: Moderatoren
- Steppenwolf
- *
- Beiträge: 19
- Registriert: Mi, 03.03.2010 23:15
Wie löscht man Button/Felder?
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
Doch der Quellcode ist mir zu absurd! ^^
Re: Wie löscht man Button/Felder?
Hallo Steppenwolf,
diesen Code
habe ich mal aufgeschnappt und dann erfolgreich angewendet um Button zu löschen 
diesen Code
Code: Alles auswählen
sub ButtonEntfernen
oDoc = thisComponent
REM entfernt die Zuordnung zur Drawpage
odoc.drawpage.forms.getByIndex(0).removeByName("Schaltfläche 1")
REM entfernt den Button (die Zeichnung) aus dem Dokument
' for i = 0 to oDoc.drawpage.getCount -1
' if odoc.Drawpage.getByIndex(i).control.name = "Schaltfläche 1" then
' odoc.Drawpage.remove(odoc.Drawpage.getByIndex(i))
' end if
' next
end sub

LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
- Steppenwolf
- *
- Beiträge: 19
- Registriert: Mi, 03.03.2010 23:15
Re: Wie löscht man Button/Felder?
Danke für die antwort,
die removebyName methode kannte ich ja schon, allerdings ist mir jetzt aufgefallen das diese tatsächlich das tut, was ich gerne möchte. Nur werden die docs die anschliessend immer noch mit den Buttons und feldern gespeichert. Führt man das Maykro dann noch einmal aus erkenne ich an den gespeicherten odts das die Buttons und Felder tatsächlich weg sind.
Das bedeutet dann wohl, das nach dem Löschen so ne Art "Artefakte" von den Feldern übrig sind die immer noch in den docs mitgespeichert werden aber bei der odt speicherung tatsächlich gelöscht werden.
Ich glaub ich hab schon eine Lösung dafür mal gucken,
Falls jemand das Problem kennt oder eine Lösung weiß würde ich mich natürlich trotzdem freuen ^^
Edit :
Also zur meiner Idee. Ich dachte mir ich speicher das Dokument ohne Felder und buttons, öffne es danach und speichere von diesem Dokument aus die Docs.
Leider bekomme ich das nicht hin weil OpenOffice ständig abstürzt
ach ich was Falsch? Sollte ich mit dem "Temporären" Dokument anders umgehen?
die removebyName methode kannte ich ja schon, allerdings ist mir jetzt aufgefallen das diese tatsächlich das tut, was ich gerne möchte. Nur werden die docs die anschliessend immer noch mit den Buttons und feldern gespeichert. Führt man das Maykro dann noch einmal aus erkenne ich an den gespeicherten odts das die Buttons und Felder tatsächlich weg sind.
Das bedeutet dann wohl, das nach dem Löschen so ne Art "Artefakte" von den Feldern übrig sind die immer noch in den docs mitgespeichert werden aber bei der odt speicherung tatsächlich gelöscht werden.
Ich glaub ich hab schon eine Lösung dafür mal gucken,
Falls jemand das Problem kennt oder eine Lösung weiß würde ich mich natürlich trotzdem freuen ^^
Edit :
Also zur meiner Idee. Ich dachte mir ich speicher das Dokument ohne Felder und buttons, öffne es danach und speichere von diesem Dokument aus die Docs.
Leider bekomme ich das nicht hin weil OpenOffice ständig abstürzt
Code: Alles auswählen
rem Hier war der Code für die odt speicherung - Das funktioniert
Rem deletefunktion
deleteButtons()
Dim Dummy2()
sURL = sourcePath & "temp.odt"
thisDoc.StoreToURL(sUrl, Dummy2())
dim myFileProp2() as new com.sun.star.beans.PropertyValue
thisDoc2 = StarDesktop.loadComponentFromURL(sURL,"_blank",0,myFileProp2)
REM Init next step "Doc-Speicherung"
counter = 0
testOfStop = oDataArray(counter)(0)
Dim oMediaDescriptor(0) As new com.sun.star.beans.PropertyValue
oMediaDescriptor(0).Name = "FilterName"
oMediaDescriptor(0).Value = "MS Word 97"
Form = thisDoc2.Drawpage.Forms.GetByindex(0)
While (testOfStop <> "Stop")
oFeld = Form.getbyName("IT-Investnr")
oFeld.text = testOfStop
sDateiName = testOfStop & "_" & sErhebung & ".doc"
sURL = sourcePath & testOfStop & "/" & sDateiName
sURL = ConvertToURL(sURL)
thisDoc2.StoreToURL( sURL , oMediaDescriptor() ) 'weiter brauch ich den Code nicht kopieren da dort OpenOffice abstürzt
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
Doch der Quellcode ist mir zu absurd! ^^
Re: Wie löscht man Button/Felder?
Aloha
Das hört sich fast haargenau an, wie das Problem, das Clag in diesem Thread schonmal geschildert hatte.
Die Code zum "wirklichen" Löschen der Schaltflächen findet sich dort.
Das hört sich fast haargenau an, wie das Problem, das Clag in diesem Thread schonmal geschildert hatte.
Die Code zum "wirklichen" Löschen der Schaltflächen findet sich dort.
- Steppenwolf
- *
- Beiträge: 19
- Registriert: Mi, 03.03.2010 23:15
Re: Wie löscht man Button/Felder?
Hi, also ich hab mir das mal angesehen mit dem "wirklichen Löschen".
Allerdings muss ich sagen, das ich das schon auspropbiert habe. Habs zwar nochmal mit diesem Code versucht:
Leider bekomm ich immer wieder gesagt:
Was mach ich jetzt? Wäre cool, wenn mir jemand einen funktionierenden Code für eine Button-lösch-Methode , schicken könnte. (Am besten mit einem String Parameter, der der Name des Buttons sein sollte) Damit könnte ich dann mal überprüfen, ob es nicht vll am Dokument selbst liegt
Allerdings muss ich sagen, das ich das schon auspropbiert habe. Habs zwar nochmal mit diesem Code versucht:
Code: Alles auswählen
Function deleteButtons rem thisDoc As Object)
Dim I As Integer
drawp = ThisComponent.Drawpage
Form = drawp.Forms.GetByIndex(0)
I = Form.Count-1
While (I <> -1)
Temp = Form.getbyIndex(I)
sname = Temp.getName
If (hier steht meine elendig lange bedingung für die Namen der Felder)Then
Form.RemoveByName(sname)
For n = drawp.Count-1 To 0 Step -1
oThisShape = drawp.getByIndex(n)
If NOT isNull(oThisShape.Control) Then <---- HIER kommt es zum Fehelr mit der Message
sControlName = oThisShape.Control.Name
if (sControlName = sname) Then
drawp.remove(oThisShape)
End If
End If
Next n
'for x = 0 to drawp.getCount -1
' if drawp.getByIndex(x).control.name = sname then
' drawp.remove(drawp.getByIndex(i))
' end if
'next
End If
I = I -1
WEND
End Function
Deswegen habe ich es ja versucht die datei OHNE Buttons zu speichern und neu zuu laden. Um dann "schöne docs daraus zu speichern. Jetzt bin ich ganz verwirrt. Iwie funktioniert alles nicht so wie ich es gerne hätte. Vor allem macht der Fehler überhaupt keinen Sinn. Schliesslich prüft die If Bedingung, ob da ein Control existiert, aber es meint ja lieber abzubrechen und zu schreien das es das Control nicht gibt -.- Seltsam Seltsam.BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Control.
Was mach ich jetzt? Wäre cool, wenn mir jemand einen funktionierenden Code für eine Button-lösch-Methode , schicken könnte. (Am besten mit einem String Parameter, der der Name des Buttons sein sollte) Damit könnte ich dann mal überprüfen, ob es nicht vll am Dokument selbst liegt
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
Doch der Quellcode ist mir zu absurd! ^^
Re: Wie löscht man Button/Felder?
Aloha
Code: Alles auswählen
Sub RemoveControl(sControlName as String)
If Len(sControlName) = 0 Then Exit Sub
bRemoved = False
oDoc = thisComponent
oDoc.lockControllers
oDrawPage = oDoc.Drawpage
oForm = oDrawPage.Forms.getByIndex(0)
If oForm.hasByName(sControlName) Then
oForm.removeByName(sControlName)
bRemoved = True
End If
If NOT bRemoved Then oDoc.unlockControllers : Exit Sub
For n = oDrawpage.Count-1 To 0 Step -1
oThisShape = oDrawpage.getByIndex(n)
If oThisShape.supportsService("com.sun.star.drawing.ControlShape") Then
If oThisShape.Control.Name = sControlName Then
oDrawpage.remove(oThisShape)
Exit For
End If
End If
Next n
Do While oDoc.hasControllersLocked
oDoc.unlockControllers
Loop
End Sub