Werte aus Kommentarfeld auslesen

Servus zusammen,

gerade habe ich eine Calc-Datei gekriegt, wo der Ersteller tonnenweise
Kommentare hinter den Zellen hinterlegt hat. Eine sehr blöde Idee, denn
nun brauche ich genau diese Kommentare als Wert in einer Zelle drin.

Kriegt man den Kommentar-Inhalt mit einer Formel zu fassen? Also etwas
wie

  =kommentar(A1)

Geht das mit zelle()? Das schien mir die Funktion, die noch am nähesten
dran ist an dem, was ich möchte. Aber Umsetzen konnte ich es damit
letztlich nicht.

Bitte um Erleuchtung, bzw. um Google-Futter.

Hallo Andre,

gerade habe ich eine Calc-Datei gekriegt, wo der Ersteller tonnenweise
Kommentare hinter den Zellen hinterlegt hat. Eine sehr blöde Idee, denn
nun brauche ich genau diese Kommentare als Wert in einer Zelle drin.

Zwei Ideen kann ich anbieten:

(1) Kommentare mit einem BASIC-Makro auslesen. Dazu finde ich
folgenden Blog-Eintrag interessant:

http://www.openofficetips.com/2005/09/14/listing-cell-notes/

(2) Entpacke die ODS-Datei (welche nichts anderes ist, als ein
ZIP-Archiv) und schau in die Datei content.xml. Dort findest Du die
Kommentare und falls Du irgendwie in der Lage bist, XML automatisch
zu verarbeiten, wäre das ein Weg, die Kommentare automatisch
irgendwohin einzulesen.

Gruß

Stefan

Servus Stefan,

Stefan Weigel, Montag, 23. Januar 2012:

http://www.openofficetips.com/2005/09/14/listing-cell-notes/

Damit kann ich mir helfen, danke für den Hinweis!

Viele Grüße!

Hallo Andre,

da war ich wohl zu langsam.
Ich hab dir gerade eine Funktion geschrieben, die du wie eine normale Formel in Calc verwenden kannst,
wenn du sie in das Modul Standard einfügst.

hier der Code:

function KommentarText(sName as String,sCell As String) As String
   dim oSheet As object
   dim oCell as Object
   oSheet=ThisComponent.Sheets.getByName(sName)
   oCell = oSheet.getCellRangeByName(sCell)
   If oCell.Annotation.String="" Then
     KommentarText= "#NV"
   Else
     KommentarText= oCell.Annotation.String
   End if
End function

Aufgerufen wird die funktion z.B. so:
=KOMMENTARTEXT("Tabelle1";"A1")

Gruß Frieder

Servus Frieder,

Frieder, Montag, 23. Januar 2012:

function KommentarText(sName as String,sCell As String) As String
   dim oSheet As object
   dim oCell as Object
   oSheet=ThisComponent.Sheets.getByName(sName)
   oCell = oSheet.getCellRangeByName(sCell)
   If oCell.Annotation.String="" Then
     KommentarText= "#NV"
   Else
     KommentarText= oCell.Annotation.String
   End if
End function

Aufgerufen wird die funktion z.B. so:
=KOMMENTARTEXT("Tabelle1";"A1")

Das ist nützlich, weil es einfacher ist als der Blog-Vorschlag. Denn
dafür habe ich mir auf die Schnelle noch ein Perl-Skript gebaut, welches
die Kommentarwerte in die Datenbank gestopft hat, wohin die komplette
Liste nämlich sollte.

Den Fall werde ich jetzt aber vermutlich öfter haben, daher ist Deine
Funktion interessant. Was daran noch ungünstig ist: Die Zelle wird über
"A1" angesprochen, nicht A1. Das heißt, wenn man sie eine Spalte
hinunterkopiert, dann wird die Bezugszelle nicht verändert.

Da könnte man sich wiederum ein Makro außenrum bauen, aber das ist nicht
so recht schön.
Da ich mich mit LO-Basic nicht auskenne: kann man das dahingehend
modifizieren?

Vielen Dank fürs Schreiben der Funktion!

Hallo Andre

Servus Frieder,

Frieder, Montag, 23. Januar 2012:

Aufgerufen wird die funktion z.B. so:
=KOMMENTARTEXT("Tabelle1";"A1")

Das ist nützlich, weil es einfacher ist als der Blog-Vorschlag...
...
Den Fall werde ich jetzt aber vermutlich öfter haben, daher ist Deine
Funktion interessant. Was daran noch ungünstig ist: Die Zelle wird über
"A1" angesprochen, nicht A1. Das heißt, wenn man sie eine Spalte
hinunterkopiert, dann wird die Bezugszelle nicht verändert.

Das lässt sich umgehen mit:
=KOMMENTARTEXT("Tabelle1";ZELLE("adresse";A1))

Gruß Werner

Hallo Andre
Genau das hätte ich auch vorgeschlagen.

es gibt aber noch weitere Möglichkeiten.
Ein ist, dass das Makro nicht auf die nahmen,
sondern auf die Indices zugreift.

hier der Code:

function KommentarText2(nTable as Integer,lColumn As Long, lRow As Long) As String
   dim oSheet As object
   dim oCell as Object
   oSheet=ThisComponent.Sheets.getByIndex(nTable-1)
   oCell = oSheet.getCellByPosition(lColumn-1,lRow-1)
   If oCell.Annotation.String="" Then
     KommentarText2= "#NV"
   Else
     KommentarText2= oCell.Annotation.String
   End if
End function

Der Aufruf könnte dann so aussehen:
=KOMMENTARTEXT2(TABELLE(A1);SPALTE(A1);ZEILE(A1))

Gruß Frieder

Servus Werner und Frieder,

Frieder, Montag, 23. Januar 2012:
[…]

> =KOMMENTARTEXT("Tabelle1";ZELLE("adresse";A1))

[…]

hier der Code:

[…]

Das war jetzt für mich ein höchst interessanter und lehrreicher
(Teil-)Thread. Das meiste kannte ich nämlich noch nicht, und vieles
davon läßt sich hervorragend auch in anderen Zusammenhängen verbauen.

Vielen Dank für eure Ideen!