Checkboxen ohne Bezüge auf die Ursprungsfelder kopieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Benutzeravatar
wampirus
Beiträge: 1
Registriert: Do, 11.02.2010 00:14
Wohnort: Wuppertal
Kontaktdaten:

Checkboxen ohne Bezüge auf die Ursprungsfelder kopieren

Beitrag von wampirus »

Hallo,

ich hab mit Excel ein umfangreicheres Projekt ungesetzt. Es handelt sich dabei um ein Hilfsmittel für Diabetiker, ein so genantes Blutzuckertagebuch. Es soll zum einen der Erfassung der Tageswerte für ein Kalenderjahr dienen, den Nutzer (über Formeln) die Berechnung der benötigten Insulindosen abnehmen und seine Daten über Diagramme und in separate Tabellen statistisch auswerten. Das klappt auch alles ganz gut. Nun erhielt ich eine Anfrage mit der Bitte dieses Projekt auch mit OpenOffice Calc umzusetzen.

Die Idee fand ich gut, nicht jeder mag oder hat Excel und der Open Source Gedanke und freie Software sind sowieso mir sympathisch. (biete mein Projekt auch als Freeware an) Zudem erschließt man es so einen größeren Nutzerkreis.
Ich habe die Datei daher im Excel 97 Format exportiert (im Excel 2007 Format ließ es sich mit Calc leider nicht laden) und dann in Calc geladen. Auf den ersten Blick sah es auch sehr gut aus. Auf dem zweiten Blick sah es nicht mehr ganz so gut aus. Die Formeln waren korrekt übernommen aber die Zellenhintergründe vieler Felder (die Hintergrundfarben der Felder) waren verschoben ebenso viele Feldrahmen, das heißt die Linienstärken waren auf falsche Felder verschoben, aber gravierender war das die enthaltenen Formularelemente (Checkboxen) auf allen Seiten verschoben waren. Die enthaltenen Hyperlinks sahen zwar auch merkwürdig aus, das ließ sich jedoch leicht über HYPERLINK() lösen.

Währe an sich kein Problem, das alles zu korrigieren, wenn es nur eine Tabelle währe. Aber das Projekt umfasst 53 Wochenseite mit je 7 Tagestabellen dazu die Seiten für Statistik, Navigation und Einstellungen. Alleine bei den Checkboxen währen 10 pro Tag mal 7 Tage mal 53 Kalenderwochen zu richten, wobei bei Calc auch keine Mehrfachselektion oder Gruppierung von Checkboxen möglich zu sein scheint. Die Korrektur der Rahmen erschwert mir Calc zudem mit der Meldung „Rahmen nicht auf Mehrfachselektion“.

Die riesen Menge an Checkboxen liegt daran das ich für eine Formel pro Blutzuckermessung (10 am Tag möglich) ein Feld mit einem Boolean-Wert benötige dem der Nutzer bei Bedarf umschalten kann, dazu fand ich mit diesen Feldern verknüpfte Checkboxen perfekt.

Diese Sisyphos-Arbeit wollte ich mir daher nicht antun und wollte die Arbeitsmappe lieber komplett neu aufbauen, indem ich ein Wochenblatt neu erstelle und dann, wie ich es in Excel gemacht habe, dieses entsprechend oft dupliziere. Dabei stellte ich dann aber fest, dass ich dadurch nicht viel gewinne. Die Korrektur der Feldrahmen und Hintergrundfarben spar ich mir zwar so, aber die Checkboxen behalten nach der Duplizierung einer Seite immer dem Bezug zur ursprünglichen Seite und ich müsste so wieder den Feldbezug jeder einzelnen Checkbox anpassen.

Nun hoffe ich meine Probleme liegen an meiner Unkenntnis von Calc und ihr habt einen Tipp oder eine Lösung für mein Problem. So das die Feldbezüge der Checkboxen nach der Duplizierung einer Seite auf die Felder der neuen Seite weisen und nicht auf die Ursprungsseite. Hab es alternativ auch mit Suchen/Ersetzen versucht, aber da werden Formularelemente nicht berücksichtigt. Die OpenOffice Hilfe, half mir nicht weiter, zwar fand ich in der Hilfe etwas zum Thema Suchen/Ersetzen in Formularelementen (unter Kontrollelemente/Datensatz suchen) aber das scheint sich auf externen SQL Quellen zu beziehen und funktioniert mit meinen Tabellen nicht.

Währe für Tipps und Hilfe dankbar.
Frank

Ps.: hatte natürlich zuvor im Forum recherchiert und auch einen interessanten Beitrag gefunden, aber da ging es darum über das Menü > Daten > Gültigkeit ein Listenfeld zu erstellen. Aber das ist nicht das was ich suche. Möchte gerne bei meinen Checkboxen bleiben. :-)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Checkboxen ohne Bezüge auf die Ursprungsfelder kopieren

Beitrag von balu »

Hallo,

tja, das ist echt ein Problem. Bis jetzt habe ich auch keine direkte Möglichkeit gefunden dies hinzubekommen. Und ich habe es mit verschiedenen Versionen von OOo und sogar mit Go-OO versucht, ich bekomme es auch nicht hin :? .

Es gibt nur drei Möglichkeiten die man anwenden kann.

1.
Alle betroffenen Elemente von Hand nachträglich korrigieren (das is abba bäh :cry: )

2.
Im OOo Basic und Java Unterforum nachzufragen, wie man diese Grafischen Elemente Tabellenweise nachträglich ändern kann.

3.
Holzhammermethode.
Die wäre dann aber noch aufwändiger als Punkt 1, und außerdem gefährlich! :evil:
Denn dazu muss man die Datei entpacken, und anschließend in der content.xml die Einträge linked-cell von Hand korrigieren. Und je nach Anzahl der Elemente kann das dann auch recht lange dauern.
Gefährlich deshalb; weil man schnell den Überblick verlieren kann und sich keinen Tippfehler erlauben darf.


Mein persönlicher Favorit ist demzufolge Punkt 2, versuchen das mit einem Makro zu erledigen. Vielleicht gibt es ja eine Extension die das erledigt?


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: Checkboxen ohne Bezüge auf die Ursprungsfelder kopieren

Beitrag von bst »

Abend,

ich habe mich mal daran versucht. Mein erster Ansatz funktioniert nicht und ich habe keine Ahnung warum??

Der Wert wird korrekt zugewiesen, wie man auch beim print sehen kann, ändern tut sich nichts.

Code: Alles auswählen

Sub GehtNicht
	dim oSheet as Object
	dim oShape as Object
	dim oBoundCell as Object
	
	on error goto ErrHandler
	for i = 1 to ThisComponent.sheets.count -1
		oSheet = ThisComponent.sheets(i)
		if oSheet.drawpage.hasElements Then
			for j = 0 to oSheet.drawpage.count - 1
				oShape = oSheet.drawpage.getByIndex(j)	
				if oShape.Control.Name = "CheckBox" Then
					if not IsNull(oShape.Control.ValueBinding) Then
						oBoundCell = oShape.Control.ValueBinding.BoundCell
						oBoundCell.sheet = i
						print oBoundCell.sheet
					endif
				endif
		   	next
		endif
	next
	exit sub
ErrHandler:
   print erl & ":" & err & ", " & error
   resume next	
End Sub
Mit der Hilfe von http://www.oooforum.de/viewtopic.php?f=2&t=25280 bin ich dann auf dieses gekommen, hier mit OO 3.1 scheint das zu funktionieren.

Wobei mir nicht klar ist ob man wirklich so einen Aufwand benötigt?

Code: Alles auswählen

Sub Geht
	dim oDoc as Object
	dim oSheet as Object
	dim oShape as Object
	dim oBoundCell as Object
	Dim oLinkedCell as new com.sun.star.table.CellAddress
	Dim oNamedValue as new com.sun.star.beans.NamedValue
	
	on error goto ErrHandler
	oDoc = ThisComponent
	for i = 1 to oDoc.sheets.count -1
		oSheet = ThisComponent.sheets(i)
		if oSheet.drawpage.hasElements Then
			for j = 0 to oSheet.drawpage.count - 1
				oShape = oSheet.drawpage.getByIndex(j)	
				if oShape.Control.Name = "CheckBox" Then
					if not IsNull(oShape.Control.ValueBinding) Then
						oBoundCell = oShape.Control.ValueBinding.BoundCell
						oLinkedCell.Sheet = i
						oLinkedCell.Column = oBoundCell.Column
						oLinkedCell.Row = oBoundCell.Row
						oNamedValue.Name  = "BoundCell"
						oNamedValue.Value = oLinkedCell
						oCVB = oDoc.createInstance("com.sun.star.table.CellValueBinding")
						oCVB.Initialize(Array(oNamedValue))
						oShape.Control.setValueBinding(oCVB) 					
					endif
				endif
		   	next
		endif
	next
	exit sub
ErrHandler:
   print erl & ":" & err & ", " & error
   resume next	
End Sub
HTH, Bernd
Gesperrt