von wega » Fr, 24.07.2009 22:45
Hallo zusammen,
also nach langem hin und her habe ich für mich folgende Lösung erarbeitet.
Code: Alles auswählen
REM ***** BASIC *****
' automatisches Ausfüllen
' der Kommentarspalten bei
' ausgefülltem Merkmal
' Werner Gatzweiler, Juli 2009
Private oDocument as Object
Private oTable as Object
Private oCell as Object
Private oViewCursor as Object
Private oAutoTextContainer as Object
Private oAutoGroup as Object
Private sATKategorie as Object
Private sBaustein as Object
Private oAutoGroupIndex as Integer
Private i, m, n as Integer
Private oAntwort as String
Private oName as String
sub tabelle_anspringen
oDocument = ThisComponent
oTable = oDocument.getTextTables().getByName( "Tabelle2" )
oAntwort = "Textbausteine zur Kompetenzbeurteilung liegen noch nicht vor!!"
'Prüfen, ob die Textbausteine vorhanden sind
oAutoTextContainer = CreateUnoService("com.sun.star.text.AutoTextContainer")
for i= 0 to oAutoTextContainer.count-1
If oAutoTextContainer.GetByIndex(i).Title ="Kompetenz-Beurteilung" then
oAntwort = ""
oAutoGroupIndex = i
end if
next i
'Wenn die oben gestzte Programmantwort nicht gelöscht worden ist,
'dann liegt die <Textbausteindatei.bau> nicht vor und das Programm wird
'beendet.
if oAntwort <> "" then
msgbox oAntwort
exit sub
end if
'Bausteingruppe definieren und nachschauen, wieviele Bausteine es in der Gruppe gibt
oAutoGroup = oAutoTextContainer.GetByIndex(oAutoGroupIndex)
'msgbox oAutoGroup.count
for i = 0 to oAutoGroup.count-1
'Textbausteinname auslesen
oName = oAutoGroup.Titles(i)
'Der Textbausteinname ist bewußt nach der Tabellenzelle benannt, in der das Merkmal
'gesucht wird. Z.B. B3 oder C11 usw.
oCell = oTable.getCellByName(oName)
'Nachschauen, ob Merkmal gestzt ist
if uCase(oCell.String) = "X" then
'Der Kommentar, also der Textbaustein selber, soll immer in der Spalte "F" stehen.
'Die Zeile wird aus der Zellenbeschreibung ermittelt.
oTable.getCellByName("F" & right(trim(oName),len(oName)-1)).String = oAutoGroup.GetByIndex(i).String
end if
next i
end sub
Freuen würde ich mich, wenn irgendwer seinen Kommentar dazu abgeben würde in Bezug auf:
a) Vereinfachung
b) besserer Programmierung
c) und was sonst noch so an Kritik möglich ist.
mit Gruß
Werner
Hallo zusammen,
also nach langem hin und her habe ich für mich folgende Lösung erarbeitet.
[code]
REM ***** BASIC *****
' automatisches Ausfüllen
' der Kommentarspalten bei
' ausgefülltem Merkmal
' Werner Gatzweiler, Juli 2009
Private oDocument as Object
Private oTable as Object
Private oCell as Object
Private oViewCursor as Object
Private oAutoTextContainer as Object
Private oAutoGroup as Object
Private sATKategorie as Object
Private sBaustein as Object
Private oAutoGroupIndex as Integer
Private i, m, n as Integer
Private oAntwort as String
Private oName as String
sub tabelle_anspringen
oDocument = ThisComponent
oTable = oDocument.getTextTables().getByName( "Tabelle2" )
oAntwort = "Textbausteine zur Kompetenzbeurteilung liegen noch nicht vor!!"
'Prüfen, ob die Textbausteine vorhanden sind
oAutoTextContainer = CreateUnoService("com.sun.star.text.AutoTextContainer")
for i= 0 to oAutoTextContainer.count-1
If oAutoTextContainer.GetByIndex(i).Title ="Kompetenz-Beurteilung" then
oAntwort = ""
oAutoGroupIndex = i
end if
next i
'Wenn die oben gestzte Programmantwort nicht gelöscht worden ist,
'dann liegt die <Textbausteindatei.bau> nicht vor und das Programm wird
'beendet.
if oAntwort <> "" then
msgbox oAntwort
exit sub
end if
'Bausteingruppe definieren und nachschauen, wieviele Bausteine es in der Gruppe gibt
oAutoGroup = oAutoTextContainer.GetByIndex(oAutoGroupIndex)
'msgbox oAutoGroup.count
for i = 0 to oAutoGroup.count-1
'Textbausteinname auslesen
oName = oAutoGroup.Titles(i)
'Der Textbausteinname ist bewußt nach der Tabellenzelle benannt, in der das Merkmal
'gesucht wird. Z.B. B3 oder C11 usw.
oCell = oTable.getCellByName(oName)
'Nachschauen, ob Merkmal gestzt ist
if uCase(oCell.String) = "X" then
'Der Kommentar, also der Textbaustein selber, soll immer in der Spalte "F" stehen.
'Die Zeile wird aus der Zellenbeschreibung ermittelt.
oTable.getCellByName("F" & right(trim(oName),len(oName)-1)).String = oAutoGroup.GetByIndex(i).String
end if
next i
end sub
[/code]
Freuen würde ich mich, wenn irgendwer seinen Kommentar dazu abgeben würde in Bezug auf:
a) Vereinfachung
b) besserer Programmierung
c) und was sonst noch so an Kritik möglich ist.
mit Gruß
Werner