[Gelöst] Kommentar in Calc per Makrobefehl einfügen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [Gelöst] Kommentar in Calc per Makrobefehl einfügen

Re: [Gelöst] Kommentar in Calc per Makrobefehl einfügen

von Reginald » Mi, 15.02.2012 00:57

Hallo zusammen,

ich habe jetzt mal testweise das realisiert, was ich ja eigentlich vorhatte, nämlich Felder aus einer Datenbank auszulesen und in das Kommentarfeld in Calc zu schreiben, und zwar dort, wo die ID eben mit Base / mySQL identisch ist, um so zu einem Datensatz in Calc eben noch massig Detailinformationen zum Ansehen zu hinterlegen, ohne immer nach Base wechseln zu müssen (und nicht jeder Anwender hier hat Zugriff auf die Datenbank oder kennt sich damit aus ...)

Ich habe hier einfach mal Vorname und Nachname aus Base ausgelesen und ins Kommentarfeld geschrieben. Jetzt möchte ich aber auch Beispielsweise Details einer 1:n verknüpften Tabelle mit einbinden. Jeder Mitarbeiter, den ich mir anzeigen lasse, hat Kurse besucht, die in einer Detailtabelle stehen.

So in der Art:
SELECT Datum, Thema FROM Kurse WHERE KURSID = ID

Das ergibt mir dann irgendwas zwischen 0 und 10 Datensätzen, die ich an meinen Kommentarstring ("CommentS", siehe unten) anfügen möchte, aber ganz so einfach kann das nicht sein, ist ja schließlich, anders als ein Vorname, nicht nur ein Feld sondern keines bis viele ...

Und da verließen sie ihn ...

Ideen?

Gruß
Reginald


Code: Alles auswählen

	Dim CommentS, Org as String
	Dim CommentColumn, StartRow, EndRow, IDColumn, OrgColumn, Row as Integer

	oDatabaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	oDataSource = oDatabaseContext.getByName("testdatenbank")  'Da muß der DB Name rein
	oConnection = oDataSource.GetConnection("","")  'bleibt leer

	oSheet = thisComponent.sheets(0)

	CommentColumn = 2
	StartRow = 1
	EndRow = 10
	IDColumn = 1   'In welcher Spalte steht die ID, welche Calc mit Base vernüpft?

	For Row = StartRow to EndRow
		oCell = oSheet.getCellByPosition(IDColumn,Row)
		ID = oCell.Value
		oCell = oSheet.getCellByPosition(OrgColumn,Row)
		
		If ID > 0 Then	'Nur wenn auch wirklich eine ID da ist
				
		oCell = oSheet.getCellByPosition(CommentColumn,Row)
		myCellAddress=oCell.CellAddress
		oSheet.getAnnotations.insertNew(myCellAddress, "")  'Delete the comment - nur zur Sicherheit.
		
		'Hier jetzt die Verbindung zur Datenbank
		oStatement = oConnection.createStatement
		sSQL = "SELECT `FirstName` From `Staff` WHERE `ID` = " & ID
		oResult = oStatement.executeQuery(sSQL)
		If oResult.Next Then
			FirstName=oResult.getString(1)
		End If
		
		oStatement = oConnection.createStatement
		sSQL = "SELECT `LastName` From `Staff` WHERE `ID` = " & ID
		oResult = oStatement.executeQuery(sSQL)
		If oResult.Next Then
			LastName=oResult.getString(1)
		End If
		
		CommentS = "ID: " & ID & Chr(13) & "Name: " & FirstName & " " & LastName
		
		oSheet.getAnnotations.insertNew(myCellAddress, CommentS)
		End If
	Next Row

Re: [Gelöst] Kommentar in Calc per Makrobefehl einfügen

von Karolus » Di, 14.02.2012 10:34

Hallo
@Balu
Ok, ich hatte mir aktuell Michaels Seite nicht nochmal angeschaut, und nehme die Behauptung "Michael hätte das anders geschrieben" zurück.
Bei einem aktuellen LO3.4.2 ist es jedoch so wie ich beschrieben habe, ein Version 2.xx hab ich gerade nicht mehr zum Testen.
Wenn es bei einer 2.xx auf beide Arten funktioniert hat Michael (damals) auch nichts falsches geschrieben, nur bei OOo/LO hat sich inzwischen etwas geändert .

Gruß Karo

Re: [Gelöst] Kommentar in Calc per Makrobefehl einfügen

von balu » Di, 14.02.2012 02:24

Hallo Leute!

@Karo
Er schlägt nicht zwei Ansätze vor, sondern schreibt, daß der obere Code zur 'ersten Initialisierung' einer Notiz gebraucht wird, und der untere dann zum Überschreiben einer vorhandenen Notiz genutzt werden kann.
Sorry, aber Du hast diesmal eine merkwürdige Art geschriebenes zu interpretieren. Denn er schlägt DOCH zwei Ansätze vor!
www.dannenhoefer.de hat geschrieben: Es gibt zwei Wege Notizen einzufügen. Der erste über getAnnotations mit InsertNew.
Ohne Zweifel, das ist der 1. Weg.
www.dannenhoefer.de hat geschrieben: Der zweite geht über die Zelle dirket.
Und das heißt ja dann wohl ohne Zweifel, das dies der 2. Weg ist. Jedoch funktioniert er nicht mehr.
Theoretisch ist das ja wohl laut XRAY richtig.

Code: Alles auswählen

oCell.annotation.string="Hallo2"
Oder widersprichst Du dem?

Was mich aber momentan noch zusätzlich verwirrt, ist der Umstand das IsVisible in beiden Codes keine Funktion hat, so machts zumindest bei mir den Anschein.

Code: Alles auswählen

  oCell.Annotation.IsVisible = false
Egal ob ich das im 1. oder aber im 2. Code anwende, und egal ob mit True oder False, es passiert nichts. Oder kann man damit die Notiz (Notizanzeiger?) nicht Ein- und Ausschalten? Das Frage ich mich wirklich.


So, und nun noch mal ganz deutlich und sehr langsam zum mitschreiben, warum Michal Dannenhöfer wirklich und unumstößlich von Z W E I verschiedenen Wegen dort spricht.

- Wir arbeiten mit falschen OOo-Versionen!

Glaubst Du nicht?
Ich aber schon!
Und warum?

- Weil beide Codes in OOo 2.3.1 genau so funktionieren, wie vorgesehen!

Achtung!
Kein Schreibfehler!
Ich meine wirklich die 2.3.1, und nicht die 3.2.1!

Und was sagst Du nun?


Lieber Karo, ich wollt dir bestimmt nicht Krumm kommen, aber ich meinte mich daran zu erinnern, das die Codes "früher" mal funktionierten. Und das habe ich ja eben wieder festgestellt, und bewiesen.



@Reginald
Falls Du es noch nicht hast, besorg dir Bitte das Tool XRAY. Damit kannst Du die Notizen untersuchen und manipulieren.



Gruß
balu

Re: [Gelöst] Kommentar in Calc per Makrobefehl einfügen

von Reginald » Di, 14.02.2012 00:52

Auch gut!

Sag mal, bei manueller Bedienung von Calc kann ich den Text ja auch noch formatieren (fett, Schrifart ändern ...) und die Größe des Kommentarfeldes anpassen.

Geht das auch irgendwie über den Code?

Nächtliche Grüße
Reginald

Re: [Gelöst] Kommentar in Calc per Makrobefehl einfügen

von Karolus » Di, 14.02.2012 00:41

Hallo
ja, das hilft. Also er schlägt zwei Ansätze vor:
Er schlägt nicht zwei Ansätze vor, sondern schreibt, daß der obere Code zur 'ersten Initialisierung' einer Notiz gebraucht wird, und der untere dann zum Überschreiben einer vorhandenen Notiz genutzt werden kann.

Karo

Re: Kommentar in Calc per Makrobefehl einfügen

von Reginald » Di, 14.02.2012 00:09

Hallo balu,

ja, das hilft. Also er schlägt zwei Ansätze vor:

Code: Alles auswählen

oSheet = thisComponent.sheets(0)
oCell = oSheet.getCellRangeByName("A1")
stCellAddress=oCell.CellAddress
oSheet.getAnnotations.insertNew(stCellAddress, "Das ist eine Info")
Das funktioniert gut. Wenn man den Kommentar löschen möchte, einfach als Text "" eingeben.

Bei dem hier passiert leider gar nichts bei mir:

Code: Alles auswählen

  oDoc = thisComponent
  oSheet = oDoc.sheets(0)
  oCell = oSheet.getCellRangeByName("A1")
  oCell.annotation.string="Hallo2"
Grüße
Reginald

Re: Kommentar in Calc per Makrobefehl einfügen

von balu » Mo, 13.02.2012 21:52

Hallo Reginald,

einen Tipp zur Teillösung findest Du bei Dannenhöfer.
http://www.dannenhoefer.de/faqstarbasic ... otizInsert



Gruß
balu

[Gelöst] Kommentar in Calc per Makrobefehl einfügen

von Reginald » Mo, 13.02.2012 21:36

Hallo zusammen,

kann mir jemand sagen, mit welchem Befehl ich einen Kommentar (englisch übers Menü Insert, Comment) z. B. in Calc in A1 schreiben kann oder ihn auch wieder von dort lösche (oder die Bemerkung, die in A1 steht, in eine Variable einlese).

Hintergrund meiner Frage ist, dass ich mit einer Datenbank arbeite und mit einer Calctabelle. In beiden sind eine Liste von Kunden verzeichnet, also eigentlich habe ich doppelte Datenhaltung, aber das läßt sich ja nicht immer vermeiden ...

In der Calctabelle steht vorne immer die ID aus der Datenbank, also kann ich die Daten problemlos zuordnen.

Jetzt möchte ich bestimmte Informationen aus der Datenbank von Zeit zu Zeit nach Calc schreiben, z. B. per Buttonklick oder vielleicht auch jedes Mal beim Öffnen der Calctabelle, und zwar als Kommentar in die jeweilige Zelle, wo der Kundenname steht. so dass man zumindest bestimmte Daten, die sonst nur über die Datenbank einzusehen wären, als Anwender leicht nachlesen kann. Beispielsweise die letzten Umsätze des Kunden; Als Fließtext mit Zeilenumbruch paßt soetwas ja prima in ein Kommentarfeld hinein.


Danke,
Reginald

Nach oben