[gelöst] Writer-Tabelle abfragen und mit Textbaustein bes.

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

Moderator: Moderatoren

wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

[gelöst] Writer-Tabelle abfragen und mit Textbaustein bes.

Beitrag von wega »

Hallo zusamen,

in einem Wirterdokument habe ich eine Tabelle und je nach Inhalt der Tabellenzelle soll in der Nachbarzelle ein Textbaustein eingefügt werden, den ich aus einer Autotextvorlage einlesen möchte.
Ich habe schon mal im Forum gesucht, aber nichts dergleichen gefunden.
Kann mir da jemand weiterhelfen?

Diese gleiche Frage hatte ich auch schon ins Writer-Forum gestellt. Vielleicht war das der falsche Ort.

mit freundlichem Gruß
Werner
Zuletzt geändert von wega am Fr, 24.07.2009 22:46, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Writer-Tabelle abfragen und mit Textbaustein besetzen?

Beitrag von komma4 »

Hallo Werner,

Code zum Zugriff auf Autotext-Einträge findest Du in meiner Extension OOoATL2 - AutoTextListe2 - eine Erweiterung des mitgelieferten Standard-Makros AutoText aus der Bibliothek Gimmicks.

Hilft Dir das weiter?
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)
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Writer-Tabelle abfragen und mit Textbaustein besetzen?

Beitrag von wega »

Hallo Winfried,

recht vielen Dank für Deine Antwort.

Damit ich das ganze verstehe frage ich einmal zuerst so:

In meinem Textdokument habe ich 3 Tabellen. Im Navigator werden diese auch mit Tabelle1 bis Tabelle3 angezeigt.
Mit Klick des Cursors auf eine der drei Tabellen wird auch die entsprechende Tabelle angesprungen, d.h., der Cursor steht dann in der entsprechenden Tabelle in der ersten Zelle.

Wie spreche ich eine der Tabellen inklusive Sprung zu einer beliebiegen Zelle mit Basic her?

mit freundlichem Gruß
Werner
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Writer-Tabelle abfragen und mit Textbaustein besetzen?

Beitrag von komma4 »

Alles im Beispiel drinne...

Code: Alles auswählen

' Tabelle 
oTT = ThisComponent.getTextTables().getByName( "Tabelle1" )
'  Zelle ( Spalte, Zeile )
oTT_Zelle = oTT.getCellByPosition( 1 , 2 )
Du hast -natürlich- auch X-Ray im Einsatz?


Hilft Dir das weiter?
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)
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Writer-Tabelle abfragen und mit Textbaustein besetzen?

Beitrag von wega »

Hallo Winfried,

Danke für Deine schneller Reaktion.

Diese Zeilen bringen mich ein gutes Stück weiter, DANKE.

Nein, X-Ray habe ich nicht im Einsatz, da ich bei einem vorherigen Installationsversuch enorme Schwiergkeiten hatte.

Nochmals Dank und freundlichen Gruß
Werner
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Writer-Tabelle abfragen und mit Textbaustein besetzen?

Beitrag von wega »

Ich noch mal,

Ja gut, die Tabelle wird erkannt, da ich von da jetzt keine Fehlermeldung mehr bekomme.
Auch die Spalte und Zeile wir wohl richtig sein, auch von dort keine Fehlermeldung.

Aber wieso steht der Cursor denn nicht in der angegebenen Zelle?
Und wie lese ich den Inhalt einer solchen Zelle aus?
Und wie schreibe ich in diese Zelle einen neuen Ihalt rein?

Ich weiß, eine Reihe dummer Fragen, aber irgendwie scheine ich ein Brett vor dem Kopf zu haben.

Bedanke mich schon jetzt für eure Hilfe
mit Gruß
Werner
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Writer-Tabelle abfragen und mit Textbaustein besetzen?

Beitrag von wega »

Hallo zusammen,

mit einem Codeschnipsel von Turtle47 aus dem englischen Forum

Code: Alles auswählen

Sub Rotate_Text1
   odoc=thiscomponent
   oTables = oDoc.getTextTables
   oTable = oTables.getByIndex(0)
   oCell=oTable.getCellByPosition(0,0)
   myViewCursor=oDoc.GetCurrentController.ViewCursor
   myViewCursor.gotoRange(oCell,false)
   myViewCursor.CharRotation = 900
End Sub
bin ich nun schon mal auf die Zelle der Tabelle gekommen.
Jetzt geht geht es noch darum, Je nach Inhalt der Zelle einen dazugehörigen Textbaustein auszulesen.

mit Gruß
Werner
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Writer-Tabelle abfragen und mit Textbaustein besetzen?

Beitrag von wega »

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
Antworten