[gelöst] Altes Problem Neues Problem

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

Moderator: Moderatoren

Ibanez
**
Beiträge: 40
Registriert: Fr, 25.07.2008 09:50

[gelöst] Altes Problem Neues Problem

Beitrag von Ibanez »

Mmmhh da denkt man man hat ein Problem gelöst und schon tritt das nächste auf, nur in einem anderen Gewand

Ich habe unter anderem hier viewtopic.php?f=18&t=18843 ein Problem gepostet. Dank Jürgens hilfe habe ich es gelöst bekommen.

Nun möchte ich meine Dialogfelder an bestimmte stellen in eine Tabelle einbinden. Also z.B. Name Person: XY (schreibe in $A$2), Alter Person: 16 (schreibe in $B$2). Wenn ich den Dialog das nächste mal öffne sollen dann die Werte im Dialog erscheinen.

Frage wie kann ich meinen Code dahingehend ändern.

Code: Alles auswählen

 
Sub Auslesen
	oDoc = thisComponent
	strUserfield_A2 = "Name"
	On Error Resume Next
	oTextFieldMasters = oDoc.TextFieldMasters
	TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_A2
	String_Name = getCellRangeByName("$A$2")
End Sub

Code: Alles auswählen

Sub Schreiben
	oDoc = thisComponent
	strUserfield_A2 = "Name"    
	Ctl_A2 = myDialog.GetControl("TextField_Name")
	String_Name = Ctl_A2.Model.Text		
	getCellRangeByName("$A$2") = String_Name
			
	On Error Resume Next
	oTextFieldMasters = oDoc.TextFieldMasters
	
	TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_A2
	oTextFieldMasters.getByName(TxtUserfield_Name).content = getCellRangeByName("$A$2")
	
	oDoc.getTextFields().refresh()
	myDialog.endexecute()
End Sub
Ich galube irgdnewo ist hier ein Denkfehler drin. Sehe ihn aber schon nicht mehr, wenns denn nur einer und nicht gar mehrere sind... 8)

Ibanez
Zuletzt geändert von Ibanez am Fr, 24.10.2008 10:46, insgesamt 3-mal geändert.
KDO
Beiträge: 6
Registriert: Do, 02.10.2008 16:08
Wohnort: Balingen

Re: Altes Problem Neues Problem

Beitrag von KDO »

Hallo Ibanez

mit folgendem Code bekommst den Cellinhalt von Tabelle1.B2. Dieser Code muß im Dokument gespeichert sein.

Code: Alles auswählen

	oDoc = ThisComponent
	oCellRange = oDoc.Sheets(0).GetCellRangeByName("B2")
	Print oCellRange.String
In der Variable 'oCellRange.String' steht der Text der Zelle. Diesen Kannst Du nun der Striungvariabelen deines Eingabefeldes zuweisen.

Code: Alles auswählen

   oDoc = thisComponent
   Ctl_B2 = myDialog.GetControl("TextField_Name")
   Ctl_B2.Model.Text = oDoc.Sheets(0).GetCellRangeByName("B2").String
Den ersten Teil habe ich kurz getestet, das funktioniert. Der zweite Teil funktioniert so Theoretisch, da mußt Du eventuell noch etwas dran drehen!

Ich hoffe das hilft dir erstmal weiter

Klaus Osigus
Ibanez
**
Beiträge: 40
Registriert: Fr, 25.07.2008 09:50

Re: Altes Problem Neues Problem

Beitrag von Ibanez »

Also der erste Teil funktioniert. Danke für die Mühe und Hilfe.
Der Code sieht allerdings bei mir so aus, da ich ein Dialogfenster habe, das im Prinzip als Eingabemaske fungiert.

Code: Alles auswählen

Sub Auslesen
oDoc = thisComponent
strUserfield_B3 = "Name"
On Error Resume Next
oCellRange = oDoc.Sheets(0).GetCellRangeByName("B3")
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_B3
String_Name = oCellRange.String 
End sub
Beim zweiten Teil bin ich so ein bischen am verzweifeln. Um es genauer zu erläutern. Mein Code zum Schreiben ist dieser hier:

Code: Alles auswählen

Sub Schreiben
oDoc = thisComponent
strUserfield_B3 = "Name" 
oCellRange = oDoc.Sheets(0).GetCellRangeByName("B3")   
Ctl_B3 = myDialog.GetControl("TextField_Name")
Ctl_B3.Model.Text = oDoc.Sheets(0).GetCellRangeByName("B3").String
String_Name = Ctl_B3.Model.Text		
strContent_Name = String_Name
			
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
	
TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_B3
oTextFieldMasters.getByName(TxtUserfield_Name).content = StrContent_Name
	
oDoc.getTextFields().refresh()
myDialog.endexecute()
End Sub
Öffne ich die Dialogansicht, so erscheint im entsprechenenden Textfeld ("Name") mein erwünschter Name aus der Zelle B3. Ändere ich diesen und bestätige durch eine Schaltfläche ("Ok") schliest sich zwar das Dialogfenster, der Name ist aber unverändert. Jemand eine Idee wie ich den Text im Dialog nach dem Auslesen und Andern in die Zelle B3 übertragen kann?
KDO
Beiträge: 6
Registriert: Do, 02.10.2008 16:08
Wohnort: Balingen

Re: Altes Problem Neues Problem

Beitrag von KDO »

Hallo,

Du denkst viel zu kompliziert. :wink:
Ich habe mir mal einen kleine Dialog gestrickt, der 2 Textfelder enthält, die Ihren Inhalt aus den Tabellenfelder B2 und C2 beziehen.
Das Makro habe ich im Dokument gespeichert. Hier der Quelltext:

Code: Alles auswählen

REM  *****  BASIC  *****

Dim DLG as Object, oTB1 as Object, oTB2 as Object  'Definition der Dialogvariablen (Gilt im ganzen Modul!)
Dim oDoc as Object  'Definition der Dokumentvariablen (Gilt im ganzen Modul!)

Sub Init_Dialog
	oDoc = thisComponent
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	DLG = LoadDialog("Standard", "Test_Dialog", oDoc.DialogLibraries)
	oTB1 = DLG.GetControl("TextField1")
	oTB2 = DLG.GetControl("TextField2")
	
   	oTB1.Model.Text = oDoc.Sheets(0).GetCellRangeByName("B2").String 'Holt den Inhalt der Zelle B2 und schreibt den Text in TextField1
   	oTB2.Model.Text = oDoc.Sheets(0).GetCellRangeByName("C2").String 'Holt den Inhalt der Zelle C2 und schreibt den Text in TextField2
   	DLG.execute() ' Dialog anzeigen
End Sub

sub TB1_Change
	oDoc.Sheets(0).GetCellRangeByName("B2").String = oTB1.Model.Text 'Schreibt den Textinhalt von TextField1 direkt in Celle B2
end sub

sub TB2_Change
	oDoc.Sheets(0).GetCellRangeByName("C2").String = oTB2.Model.Text 'Schreibt den Textinhalt von TextField2 direkt in Celle C2
end sub

Die Sub "TB1_Change" verbindest Du mit der Aktion "Text modifiziert" von TextField1 und "TB2_Change" mit TextField2.

Die Änderung in dem jeweiligen Textfeld wird direkt in die Zelle geschrieben. :D

Ich hoffe das hilft dir weiter

Klaus Osigus

P.S. Wenn Du möchtest, kann ich dir auch das Beispieldokument als Anhang zusenden.
Ibanez
**
Beiträge: 40
Registriert: Fr, 25.07.2008 09:50

Re: [Gelöst] Altes Problem Neues Problem

Beitrag von Ibanez »

Danke KDO, der Code funktioniert. Problem gelöst

Merci
Ibanez :D
Antworten