View
217
Download
0
Category
Preview:
Citation preview
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
1 Tabellendokument2 Tabellenblaumltter -21 Zugriff uumlber Index oder Name -22 Einfuumlgen verschieben kopieren und loumlschen3 Spalten und Zeilen -31 Optimale Spaltenbreite und Zeilenhoumlhe4 Zellen -41 Zellen ansprechen -42 Die Inhalte von Zellen -43 Loumlschen von Zellinhalten -44 Text in Zellen -45 Zelladressen5 Zellbereiche -51 Zellbereichsadressen -52 Zellbereiche einfuumlgen entfernen kopieren und verschieben -53 Zellbereiche verbinden -54 Benannte Zellbereiche -55 Berechnungen mit Zellbereichen6 Zellen oder Zellbereiche formatieren -61 comsunstartableCellProperties -62 comsunstarstyleCharacterProperties -63 comsunstarstyleParagraphProperties -64 Formate fuumlr Zahlen Datum und Zeit -65 Bedingte Formatierung -66 Rahmen von Zellen und Zellbereichen7 Selektionen in Calc -71 Selektionen behandeln -72 Zellbereiche selektieren8 Notizen in Calc-Dokumenten -81 Zugriff auf Notizen uumlber Tabellenblatt -82 Notizen hinzufuumlgen und Zugriff uumlber Zellen9 Suchen und Ersetzen -91 SearchDescriptor und ReplaceDescriptor -92 Die Interfaces XSearchable und XReplaceable10 Calc-Funktionen -101 Aufruf von eingebauten Calc-Funktionen -102 Eigene Calc-Funktionen in Basic11 Formulare in Calc-Dokumenten
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Autor
Marc Baumlchinger() mbaebcwinch
Korrektur gelesen
letzte Aumlnderung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (1 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
21022004
Kontakt
Baumlchinger Consulting raquohttpwwwbcwinch OpenOfficeorg deutschsprachig raquohttpdeopenofficeorg
Beitraumlge von
1 TabellendokumentEin Tabellendokument unterstuumltzt den Service comsunstarsheetSpreadsheetDocument Ein Test nach der Unterstuumltzung dieses Services dient dann auch zur Identifizierung eines Tabellendokumentes
Sub aufCalcDokumentTesten Variable deklarieren Dim calcDokument as Object aktives Dokument holen calcDokument = ThisComponent testen ob es ein Calc-Dokument ist If Not calcDokumentsupportsService _ ( comsunstarsheetSpreadsheetDocument ) then MsgBox Das ist ein KEIN Calc-Dokument Else MsgBox Das ist ein Calc-Dokument End IfEnd Sub
Eigenschaften des Service comsunstarsheetSpreadsheetDocument
XNamedRanges NamedRangesDie benannten Zellbereiche eines Dokumentes
XDatabaseRanges DatabaseRanges Die Datenbankbereiche eines Dokumentes
XLabelRanges ColumnLabelRangesDie ColumnLabelRanges eines Dokuments (benannte Spalten)
XLabelRanges RowLabelRangesDie RowLabelRanges eines Dokumentes (benannte Zeilen)
XNameAccess SheetLinks Verweise zu Tabellenblaumltter
XAreaLinks AreaLinks Verweise zu Bereichen
XNameAccess DDELinksDDE links des Dokumentes (nur fuumlr Windows)
2 TabellenblaumltterEin Tabellendokument besteht aus einem oder mehreren Tabellenblaumltter Auf diese einzelnen Tabellenblaumltter kann uumlber das Objekt oCalcDokumentSheets zugegriffen werden Das Objekt das wir so erhalten unterstuumltzt unter anderen die Interfaces XNameAccess und XIndexAccess welche einen Zugriff uumlber den Namen oder den Index des Tabellenblattes
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (2 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ermoumlglichen
21 Zugriff uumlber Index oder Name
Sub tabellenblattAnsprechen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt uumlber Index holen oTabellenblatt = oCalcDokumentSheets(0) Name anzeigen MsgBox oTabellenblattName zweites Tabellenblatt uumlber Name holen oTabellenblatt = oCalcDokumentSheets_ getByName( Tabelle2 ) Name anzeigen MsgBox oTabellenblattName End Sub
22 Einfuumlgen verschieben kopieren und loumlschen
Das Objekt das uumlber calcDokumentSheets erreicht werden kann unterstuumltzt das Interface comsunstarsheetXSpreadsheets Dieses gibt uns die Moumlglichkeit neue Tabellenblaumltter hinzuzufuumlgen zu entfernen zu kopieren oder zu verschieben Der Zugriff auf die Tabellenblaumltter erfolgt bei diesen Methoden uumlber den Namen
Sub tabellenBlaetterSwap Variable deklarieren Dim oCalcDokument as Object aktives Dokument holen oCalcDokument = ThisComponent neues Tabelleblatt einfuumlgen oCalcDokumentSheetsinsertNewByName( neuesblatt 0 ) MsgBox weiter ans Ende schieben oCalcDokumentSheetsmoveByName( neuesblatt _ oCalcDokumentSheetsgetCount() ) MsgBox weiter kopieren oCalcDokumentSheetscopyByName( neuesblatt _ neuesblatt2 0 ) MsgBox weiter und wieder alles loumlschen oCalcDokumentSheetsremoveByName( neuesblatt ) oCalcDokumentSheetsremoveByName( neuesblatt2 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (3 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
End Sub
3 Spalten und ZeilenEin Tabellenblatt besteht aus Zeilen und Spalten Diese koumlnnen uumlber ihren Index (beginnend mit 0) direkt angesprochen werden In der kuumlrzesten Form gelangt man also mit ThisComponentSheets(0)Columns(0) an die Spalte A des ersten Tabellenblattes des aktiven Calc-Dokumentes An Spalten und Zeilen lassen sich alle Formatierungen anwenden welche man auch fuumlr Zellen oder Zellbereiche verfuumlgbar sind Durch eine Anweisung koumlnnen so alle Zellen einer Spalte oder Zeile formatiert werden
Sub zeilenUndSpalten Variablen deklarieren Dim oCalcDokument as Object Dim oZeile as Object Dim oSpalte as Object Calc-Dokument holen oCalcDokument = ThisComponent Spalte A auf Index 0 holen oSpalte = ThisComponentSheets(0)Columns(0) zB Zellhintergrund aller Zellen der Spalte einfaumlrben oSpalteCellBackColor = RGB ( 230 230 230 ) Zeile 1 auf Index 0 holen oZeile = ThisComponentSheets(0)Rows(0) zB Schriftgroumlsse aller Zellen der Zeile setzten oZeileCharHeight = 24End Sub
Mit den Eigenschaften der Services comsunstartableTableRow und comsunstartableTableColumn laumlsst sich die Zeile bzw Spalte unter anderem ein- und ausblenden oder in optimale Dimensionen setzen
Eigenschaften von comsunstartableTableRow
Long Height Houmlhe der Zeile in 1100 Millimeter
Boolean OptimalHeight Passt mit TRUE die Houmlhe der Zeile auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller vertikaler Seitenumbruch vor dieser Zeile wenn TRUE
Eigenschaften von comsunstartableTableColumn
Long Width Breite der Spalte in 1100 Millimeter
Boolean OptimalWidth Passt mit TRUE die Breite der Spalte auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller horizontalen Seitenumbruch vor dieser Spalte wenn TRUE
31 Optimale Spaltenbreite und Zeilenhoumlhe
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (4 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Nach Benutzereingaben aber auch nach der Eingabe von Zellwerten uumlber OpenOfficeorg-Basic sind die Inhalte einiger Spalten oder auch Zeilen oft nicht an die neuen Inhalte angepasst sie sind zu breit oder zu schmal
Uumlber die Maus kann man in diesem Fall eine oder mehrere Spalte anwaumlhlen und mit einem Doppelklick auf die Zellbegrenzung eine angepasste Spaltenbreite erzwingen Dasselbe laumlsst sich uumlber die comsunstartableTableColumn und comsunstartableTableRow Services auch uumlber Basic erreichen
Sub zeilenUndSpaltenOptimaleGroesse optimale Houmlhe fuumlr Zeile 1 auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Rows(0)OptimalHeight = TRUE optimale Breite fuumlr Spalte A auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Columns(0)OptimalWidth = TRUE End Sub
4 ZellenEine Zelle eines Tabellendokumente unterstuumltzt eine Vielzahl von Interfaces Einige die besonders wichtig erscheinen sind in der folgenden Tabelle 1 aufgefuumlhrt und lassen die umfassende Funktionalitaumlt eine Zelle erahnen Viele der Interfaces von Zellen Zellbereiche und Tabellenblaumltter sind uumlbrigens identisch und werden exakt auf dieselbe Weise angewendet
Unterstuumltzte Interfaces vom Calc-Zellen
cssutilXReplaceableErmoumlglicht das Suchen und Ersetzen mit eine ReplaceDescriptor (Abschnitt 19)
csssheetXCellAddressable Hat eine Zelladresse (Abschnitt 145)
csssheetXCellRangeAddressable Hat eine Zellbereichsadresse (Abschnitt 151)
csssheetXFormulaQueryZugriff auf Zellen welche uumlber Funktionen mit dieser Zelle in Beziehung stehen oder solche welche diese Zelle in ihren Funktionen verwenden (DependentsPrecendents)
csssheetXSheetAnnotationAnchor Anker fuumlr eine Notiz (Abschnitt 18)
csssheetXSheetCellRange Eine Zelle ist auch ein Zellbereich
csssheetXSheetOperationAn einer Zelle lassen sich Grundberechnungen (SUM() AVG() etc) durchfuumlhren wie an einem Zellbereich (Abschnitt 155)
csstableXAutoFormattable ist auto-formatierbar
csstableXCell XCell von comsunstartable
csstableXCellRange Eine Zelle ist auch ein Zellbereich (Abschnitt 15)
csstableXColumnRowRange
csstextXText zu Bearbeitung von Zeichenketten in einer Zelle (Abschnitt 145)
csstextXTextFieldsSupplier fuumlr den Zugriff auf Textfelder innerhalb der Zelle
cssutilXIndent zur Manipulation der Einruumlckung der Zelle
cssutilXSearchable eine Zelle laumlsst sich durchsuchen (Abschnitt 19)
41 Zellen ansprechen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (5 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Eine Zelle kann uumlber die Funktion getCellByPosition( col row ) eines Tabellenblattes angesprochen werden Die Zelle A1 kommt dabei auf die Position 00 zu liegen A2 auf 01 B1 auf 10 usw
Sub einzelZelleUeberIndex Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0)
Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Zeichenkette in die Zelle schreiben oZelleString = Ein Text MsgBox weiter lokalisierte Formel in die Zelle schreiben nicht empfehlendwert oZelleFormulaLocal = =SUMME( A2A3 ) MsgBox weiter numerischen Wert in die Zelle schreiben oZelleValue = 2022End Sub
Im Beispiel werden die Eigenschaften String Value und FormulaLocal verwendet um einer Zelle Werte zuzuweisen Waumlhrend die ersten Zeichenketten und numerische Werte betreffen erlaubt es Formula oder FormulaLocal eine Calc-Funktion einzufuumlgen
FormulaLocal weist darauf hin dass die Formel lokalisiert also nicht in der Standardsprache sondern in der eingestellten Sprache vorliegt Es empfiehlt sich aber nie die lokalisierten Namen der Formeln zu verwenden Anwender welche eine andere Lokalisierung verwenden muumlssten sonst die Skripts umschreiben Deshalb besser immer die Basissprache Englisch verwenden
42 Die Inhalte von Zellen
Bei der Unterscheidung von Zellinhalten gibt es zwei verschiedene Ansaumltze welche in verschiedenen Situationen von Bedeutung sind
Geht es darum zu bestimmen von welchem Typ der Wert einer Zelle ist dann bedient man sich der Konstantengruppe comsunstartableCellContentType
Konstanten des Service comsunstartableCellContentType
EMPTY Die Zelle ist leer
VALUE ein numerischer Wert
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (6 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
TEXT eine Zeichenkette
FORMULA eine Funktion
Mittels dieser Konstantengruppe kann gepruumlft werden von welchem Typ der Wert einer Zelle ist
Sub inhaltsTypen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim ausgabe as String aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Inhalte auf Typ pruumlfen Select Case oZelleType Case comsunstartableCellContentTypeTEXT ausgabe = Zelle enthaumllt amp _ eine Zeichenkette Case comsunstartableCellContentTypeVALUE ausgabe = Zelle enthaumllt amp _ einen numerischen Wert Case comsunstartableCellContentTypeFORMULA ausgabe = Zelle enthaumllt amp _ eine Formel Case comsunstartableCellContentTypeEMPTY ausgabe = Zelle ist leer End Select Info-Anzeige MsgBox ausgabeEnd Sub
43 Loumlschen von Zellinhalten
Beim Loumlschen von Zellinhalten kommt eine andere Unterscheidung von Zellinhalten zur Anwendung Diese ist aus dem Dialog Inhalte loumlschen bekannt Selektiert man eine oder mehrere Zellen und druumlckt die Delete-Taste der Tastatur so erscheint der Dialog und fragt nach was denn alles geloumlscht werden soll
Die vorhandenen Optionen und wenige mehr sind auch uumlber Basic verfuumlgbar und koumlnnen fuumlr das Loumlschen von Inhalten in Zellen oder Zellbereichen verwendet werden Die Konstantengruppe comsunstarsheetCellFlags bietet eine Reihe von Konstanten an die dem Zweck dienen bei einer Loumlschoperation die Typen von Inhalten zu deklarieren die geloumlscht werden sollen
Da die Werte der Konstanten der Binaumlrreihe (1 2 4 8 usw) folgen koumlnnen diese einfach addiert werden und die Summe an die Methode clearContents(nInhaltsTypen) uumlbergeben werden die vom Interface comsunstarsheetXSheetOperation bereitgestellt wird
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (7 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
21022004
Kontakt
Baumlchinger Consulting raquohttpwwwbcwinch OpenOfficeorg deutschsprachig raquohttpdeopenofficeorg
Beitraumlge von
1 TabellendokumentEin Tabellendokument unterstuumltzt den Service comsunstarsheetSpreadsheetDocument Ein Test nach der Unterstuumltzung dieses Services dient dann auch zur Identifizierung eines Tabellendokumentes
Sub aufCalcDokumentTesten Variable deklarieren Dim calcDokument as Object aktives Dokument holen calcDokument = ThisComponent testen ob es ein Calc-Dokument ist If Not calcDokumentsupportsService _ ( comsunstarsheetSpreadsheetDocument ) then MsgBox Das ist ein KEIN Calc-Dokument Else MsgBox Das ist ein Calc-Dokument End IfEnd Sub
Eigenschaften des Service comsunstarsheetSpreadsheetDocument
XNamedRanges NamedRangesDie benannten Zellbereiche eines Dokumentes
XDatabaseRanges DatabaseRanges Die Datenbankbereiche eines Dokumentes
XLabelRanges ColumnLabelRangesDie ColumnLabelRanges eines Dokuments (benannte Spalten)
XLabelRanges RowLabelRangesDie RowLabelRanges eines Dokumentes (benannte Zeilen)
XNameAccess SheetLinks Verweise zu Tabellenblaumltter
XAreaLinks AreaLinks Verweise zu Bereichen
XNameAccess DDELinksDDE links des Dokumentes (nur fuumlr Windows)
2 TabellenblaumltterEin Tabellendokument besteht aus einem oder mehreren Tabellenblaumltter Auf diese einzelnen Tabellenblaumltter kann uumlber das Objekt oCalcDokumentSheets zugegriffen werden Das Objekt das wir so erhalten unterstuumltzt unter anderen die Interfaces XNameAccess und XIndexAccess welche einen Zugriff uumlber den Namen oder den Index des Tabellenblattes
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (2 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ermoumlglichen
21 Zugriff uumlber Index oder Name
Sub tabellenblattAnsprechen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt uumlber Index holen oTabellenblatt = oCalcDokumentSheets(0) Name anzeigen MsgBox oTabellenblattName zweites Tabellenblatt uumlber Name holen oTabellenblatt = oCalcDokumentSheets_ getByName( Tabelle2 ) Name anzeigen MsgBox oTabellenblattName End Sub
22 Einfuumlgen verschieben kopieren und loumlschen
Das Objekt das uumlber calcDokumentSheets erreicht werden kann unterstuumltzt das Interface comsunstarsheetXSpreadsheets Dieses gibt uns die Moumlglichkeit neue Tabellenblaumltter hinzuzufuumlgen zu entfernen zu kopieren oder zu verschieben Der Zugriff auf die Tabellenblaumltter erfolgt bei diesen Methoden uumlber den Namen
Sub tabellenBlaetterSwap Variable deklarieren Dim oCalcDokument as Object aktives Dokument holen oCalcDokument = ThisComponent neues Tabelleblatt einfuumlgen oCalcDokumentSheetsinsertNewByName( neuesblatt 0 ) MsgBox weiter ans Ende schieben oCalcDokumentSheetsmoveByName( neuesblatt _ oCalcDokumentSheetsgetCount() ) MsgBox weiter kopieren oCalcDokumentSheetscopyByName( neuesblatt _ neuesblatt2 0 ) MsgBox weiter und wieder alles loumlschen oCalcDokumentSheetsremoveByName( neuesblatt ) oCalcDokumentSheetsremoveByName( neuesblatt2 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (3 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
End Sub
3 Spalten und ZeilenEin Tabellenblatt besteht aus Zeilen und Spalten Diese koumlnnen uumlber ihren Index (beginnend mit 0) direkt angesprochen werden In der kuumlrzesten Form gelangt man also mit ThisComponentSheets(0)Columns(0) an die Spalte A des ersten Tabellenblattes des aktiven Calc-Dokumentes An Spalten und Zeilen lassen sich alle Formatierungen anwenden welche man auch fuumlr Zellen oder Zellbereiche verfuumlgbar sind Durch eine Anweisung koumlnnen so alle Zellen einer Spalte oder Zeile formatiert werden
Sub zeilenUndSpalten Variablen deklarieren Dim oCalcDokument as Object Dim oZeile as Object Dim oSpalte as Object Calc-Dokument holen oCalcDokument = ThisComponent Spalte A auf Index 0 holen oSpalte = ThisComponentSheets(0)Columns(0) zB Zellhintergrund aller Zellen der Spalte einfaumlrben oSpalteCellBackColor = RGB ( 230 230 230 ) Zeile 1 auf Index 0 holen oZeile = ThisComponentSheets(0)Rows(0) zB Schriftgroumlsse aller Zellen der Zeile setzten oZeileCharHeight = 24End Sub
Mit den Eigenschaften der Services comsunstartableTableRow und comsunstartableTableColumn laumlsst sich die Zeile bzw Spalte unter anderem ein- und ausblenden oder in optimale Dimensionen setzen
Eigenschaften von comsunstartableTableRow
Long Height Houmlhe der Zeile in 1100 Millimeter
Boolean OptimalHeight Passt mit TRUE die Houmlhe der Zeile auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller vertikaler Seitenumbruch vor dieser Zeile wenn TRUE
Eigenschaften von comsunstartableTableColumn
Long Width Breite der Spalte in 1100 Millimeter
Boolean OptimalWidth Passt mit TRUE die Breite der Spalte auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller horizontalen Seitenumbruch vor dieser Spalte wenn TRUE
31 Optimale Spaltenbreite und Zeilenhoumlhe
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (4 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Nach Benutzereingaben aber auch nach der Eingabe von Zellwerten uumlber OpenOfficeorg-Basic sind die Inhalte einiger Spalten oder auch Zeilen oft nicht an die neuen Inhalte angepasst sie sind zu breit oder zu schmal
Uumlber die Maus kann man in diesem Fall eine oder mehrere Spalte anwaumlhlen und mit einem Doppelklick auf die Zellbegrenzung eine angepasste Spaltenbreite erzwingen Dasselbe laumlsst sich uumlber die comsunstartableTableColumn und comsunstartableTableRow Services auch uumlber Basic erreichen
Sub zeilenUndSpaltenOptimaleGroesse optimale Houmlhe fuumlr Zeile 1 auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Rows(0)OptimalHeight = TRUE optimale Breite fuumlr Spalte A auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Columns(0)OptimalWidth = TRUE End Sub
4 ZellenEine Zelle eines Tabellendokumente unterstuumltzt eine Vielzahl von Interfaces Einige die besonders wichtig erscheinen sind in der folgenden Tabelle 1 aufgefuumlhrt und lassen die umfassende Funktionalitaumlt eine Zelle erahnen Viele der Interfaces von Zellen Zellbereiche und Tabellenblaumltter sind uumlbrigens identisch und werden exakt auf dieselbe Weise angewendet
Unterstuumltzte Interfaces vom Calc-Zellen
cssutilXReplaceableErmoumlglicht das Suchen und Ersetzen mit eine ReplaceDescriptor (Abschnitt 19)
csssheetXCellAddressable Hat eine Zelladresse (Abschnitt 145)
csssheetXCellRangeAddressable Hat eine Zellbereichsadresse (Abschnitt 151)
csssheetXFormulaQueryZugriff auf Zellen welche uumlber Funktionen mit dieser Zelle in Beziehung stehen oder solche welche diese Zelle in ihren Funktionen verwenden (DependentsPrecendents)
csssheetXSheetAnnotationAnchor Anker fuumlr eine Notiz (Abschnitt 18)
csssheetXSheetCellRange Eine Zelle ist auch ein Zellbereich
csssheetXSheetOperationAn einer Zelle lassen sich Grundberechnungen (SUM() AVG() etc) durchfuumlhren wie an einem Zellbereich (Abschnitt 155)
csstableXAutoFormattable ist auto-formatierbar
csstableXCell XCell von comsunstartable
csstableXCellRange Eine Zelle ist auch ein Zellbereich (Abschnitt 15)
csstableXColumnRowRange
csstextXText zu Bearbeitung von Zeichenketten in einer Zelle (Abschnitt 145)
csstextXTextFieldsSupplier fuumlr den Zugriff auf Textfelder innerhalb der Zelle
cssutilXIndent zur Manipulation der Einruumlckung der Zelle
cssutilXSearchable eine Zelle laumlsst sich durchsuchen (Abschnitt 19)
41 Zellen ansprechen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (5 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Eine Zelle kann uumlber die Funktion getCellByPosition( col row ) eines Tabellenblattes angesprochen werden Die Zelle A1 kommt dabei auf die Position 00 zu liegen A2 auf 01 B1 auf 10 usw
Sub einzelZelleUeberIndex Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0)
Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Zeichenkette in die Zelle schreiben oZelleString = Ein Text MsgBox weiter lokalisierte Formel in die Zelle schreiben nicht empfehlendwert oZelleFormulaLocal = =SUMME( A2A3 ) MsgBox weiter numerischen Wert in die Zelle schreiben oZelleValue = 2022End Sub
Im Beispiel werden die Eigenschaften String Value und FormulaLocal verwendet um einer Zelle Werte zuzuweisen Waumlhrend die ersten Zeichenketten und numerische Werte betreffen erlaubt es Formula oder FormulaLocal eine Calc-Funktion einzufuumlgen
FormulaLocal weist darauf hin dass die Formel lokalisiert also nicht in der Standardsprache sondern in der eingestellten Sprache vorliegt Es empfiehlt sich aber nie die lokalisierten Namen der Formeln zu verwenden Anwender welche eine andere Lokalisierung verwenden muumlssten sonst die Skripts umschreiben Deshalb besser immer die Basissprache Englisch verwenden
42 Die Inhalte von Zellen
Bei der Unterscheidung von Zellinhalten gibt es zwei verschiedene Ansaumltze welche in verschiedenen Situationen von Bedeutung sind
Geht es darum zu bestimmen von welchem Typ der Wert einer Zelle ist dann bedient man sich der Konstantengruppe comsunstartableCellContentType
Konstanten des Service comsunstartableCellContentType
EMPTY Die Zelle ist leer
VALUE ein numerischer Wert
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (6 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
TEXT eine Zeichenkette
FORMULA eine Funktion
Mittels dieser Konstantengruppe kann gepruumlft werden von welchem Typ der Wert einer Zelle ist
Sub inhaltsTypen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim ausgabe as String aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Inhalte auf Typ pruumlfen Select Case oZelleType Case comsunstartableCellContentTypeTEXT ausgabe = Zelle enthaumllt amp _ eine Zeichenkette Case comsunstartableCellContentTypeVALUE ausgabe = Zelle enthaumllt amp _ einen numerischen Wert Case comsunstartableCellContentTypeFORMULA ausgabe = Zelle enthaumllt amp _ eine Formel Case comsunstartableCellContentTypeEMPTY ausgabe = Zelle ist leer End Select Info-Anzeige MsgBox ausgabeEnd Sub
43 Loumlschen von Zellinhalten
Beim Loumlschen von Zellinhalten kommt eine andere Unterscheidung von Zellinhalten zur Anwendung Diese ist aus dem Dialog Inhalte loumlschen bekannt Selektiert man eine oder mehrere Zellen und druumlckt die Delete-Taste der Tastatur so erscheint der Dialog und fragt nach was denn alles geloumlscht werden soll
Die vorhandenen Optionen und wenige mehr sind auch uumlber Basic verfuumlgbar und koumlnnen fuumlr das Loumlschen von Inhalten in Zellen oder Zellbereichen verwendet werden Die Konstantengruppe comsunstarsheetCellFlags bietet eine Reihe von Konstanten an die dem Zweck dienen bei einer Loumlschoperation die Typen von Inhalten zu deklarieren die geloumlscht werden sollen
Da die Werte der Konstanten der Binaumlrreihe (1 2 4 8 usw) folgen koumlnnen diese einfach addiert werden und die Summe an die Methode clearContents(nInhaltsTypen) uumlbergeben werden die vom Interface comsunstarsheetXSheetOperation bereitgestellt wird
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (7 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ermoumlglichen
21 Zugriff uumlber Index oder Name
Sub tabellenblattAnsprechen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt uumlber Index holen oTabellenblatt = oCalcDokumentSheets(0) Name anzeigen MsgBox oTabellenblattName zweites Tabellenblatt uumlber Name holen oTabellenblatt = oCalcDokumentSheets_ getByName( Tabelle2 ) Name anzeigen MsgBox oTabellenblattName End Sub
22 Einfuumlgen verschieben kopieren und loumlschen
Das Objekt das uumlber calcDokumentSheets erreicht werden kann unterstuumltzt das Interface comsunstarsheetXSpreadsheets Dieses gibt uns die Moumlglichkeit neue Tabellenblaumltter hinzuzufuumlgen zu entfernen zu kopieren oder zu verschieben Der Zugriff auf die Tabellenblaumltter erfolgt bei diesen Methoden uumlber den Namen
Sub tabellenBlaetterSwap Variable deklarieren Dim oCalcDokument as Object aktives Dokument holen oCalcDokument = ThisComponent neues Tabelleblatt einfuumlgen oCalcDokumentSheetsinsertNewByName( neuesblatt 0 ) MsgBox weiter ans Ende schieben oCalcDokumentSheetsmoveByName( neuesblatt _ oCalcDokumentSheetsgetCount() ) MsgBox weiter kopieren oCalcDokumentSheetscopyByName( neuesblatt _ neuesblatt2 0 ) MsgBox weiter und wieder alles loumlschen oCalcDokumentSheetsremoveByName( neuesblatt ) oCalcDokumentSheetsremoveByName( neuesblatt2 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (3 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
End Sub
3 Spalten und ZeilenEin Tabellenblatt besteht aus Zeilen und Spalten Diese koumlnnen uumlber ihren Index (beginnend mit 0) direkt angesprochen werden In der kuumlrzesten Form gelangt man also mit ThisComponentSheets(0)Columns(0) an die Spalte A des ersten Tabellenblattes des aktiven Calc-Dokumentes An Spalten und Zeilen lassen sich alle Formatierungen anwenden welche man auch fuumlr Zellen oder Zellbereiche verfuumlgbar sind Durch eine Anweisung koumlnnen so alle Zellen einer Spalte oder Zeile formatiert werden
Sub zeilenUndSpalten Variablen deklarieren Dim oCalcDokument as Object Dim oZeile as Object Dim oSpalte as Object Calc-Dokument holen oCalcDokument = ThisComponent Spalte A auf Index 0 holen oSpalte = ThisComponentSheets(0)Columns(0) zB Zellhintergrund aller Zellen der Spalte einfaumlrben oSpalteCellBackColor = RGB ( 230 230 230 ) Zeile 1 auf Index 0 holen oZeile = ThisComponentSheets(0)Rows(0) zB Schriftgroumlsse aller Zellen der Zeile setzten oZeileCharHeight = 24End Sub
Mit den Eigenschaften der Services comsunstartableTableRow und comsunstartableTableColumn laumlsst sich die Zeile bzw Spalte unter anderem ein- und ausblenden oder in optimale Dimensionen setzen
Eigenschaften von comsunstartableTableRow
Long Height Houmlhe der Zeile in 1100 Millimeter
Boolean OptimalHeight Passt mit TRUE die Houmlhe der Zeile auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller vertikaler Seitenumbruch vor dieser Zeile wenn TRUE
Eigenschaften von comsunstartableTableColumn
Long Width Breite der Spalte in 1100 Millimeter
Boolean OptimalWidth Passt mit TRUE die Breite der Spalte auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller horizontalen Seitenumbruch vor dieser Spalte wenn TRUE
31 Optimale Spaltenbreite und Zeilenhoumlhe
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (4 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Nach Benutzereingaben aber auch nach der Eingabe von Zellwerten uumlber OpenOfficeorg-Basic sind die Inhalte einiger Spalten oder auch Zeilen oft nicht an die neuen Inhalte angepasst sie sind zu breit oder zu schmal
Uumlber die Maus kann man in diesem Fall eine oder mehrere Spalte anwaumlhlen und mit einem Doppelklick auf die Zellbegrenzung eine angepasste Spaltenbreite erzwingen Dasselbe laumlsst sich uumlber die comsunstartableTableColumn und comsunstartableTableRow Services auch uumlber Basic erreichen
Sub zeilenUndSpaltenOptimaleGroesse optimale Houmlhe fuumlr Zeile 1 auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Rows(0)OptimalHeight = TRUE optimale Breite fuumlr Spalte A auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Columns(0)OptimalWidth = TRUE End Sub
4 ZellenEine Zelle eines Tabellendokumente unterstuumltzt eine Vielzahl von Interfaces Einige die besonders wichtig erscheinen sind in der folgenden Tabelle 1 aufgefuumlhrt und lassen die umfassende Funktionalitaumlt eine Zelle erahnen Viele der Interfaces von Zellen Zellbereiche und Tabellenblaumltter sind uumlbrigens identisch und werden exakt auf dieselbe Weise angewendet
Unterstuumltzte Interfaces vom Calc-Zellen
cssutilXReplaceableErmoumlglicht das Suchen und Ersetzen mit eine ReplaceDescriptor (Abschnitt 19)
csssheetXCellAddressable Hat eine Zelladresse (Abschnitt 145)
csssheetXCellRangeAddressable Hat eine Zellbereichsadresse (Abschnitt 151)
csssheetXFormulaQueryZugriff auf Zellen welche uumlber Funktionen mit dieser Zelle in Beziehung stehen oder solche welche diese Zelle in ihren Funktionen verwenden (DependentsPrecendents)
csssheetXSheetAnnotationAnchor Anker fuumlr eine Notiz (Abschnitt 18)
csssheetXSheetCellRange Eine Zelle ist auch ein Zellbereich
csssheetXSheetOperationAn einer Zelle lassen sich Grundberechnungen (SUM() AVG() etc) durchfuumlhren wie an einem Zellbereich (Abschnitt 155)
csstableXAutoFormattable ist auto-formatierbar
csstableXCell XCell von comsunstartable
csstableXCellRange Eine Zelle ist auch ein Zellbereich (Abschnitt 15)
csstableXColumnRowRange
csstextXText zu Bearbeitung von Zeichenketten in einer Zelle (Abschnitt 145)
csstextXTextFieldsSupplier fuumlr den Zugriff auf Textfelder innerhalb der Zelle
cssutilXIndent zur Manipulation der Einruumlckung der Zelle
cssutilXSearchable eine Zelle laumlsst sich durchsuchen (Abschnitt 19)
41 Zellen ansprechen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (5 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Eine Zelle kann uumlber die Funktion getCellByPosition( col row ) eines Tabellenblattes angesprochen werden Die Zelle A1 kommt dabei auf die Position 00 zu liegen A2 auf 01 B1 auf 10 usw
Sub einzelZelleUeberIndex Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0)
Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Zeichenkette in die Zelle schreiben oZelleString = Ein Text MsgBox weiter lokalisierte Formel in die Zelle schreiben nicht empfehlendwert oZelleFormulaLocal = =SUMME( A2A3 ) MsgBox weiter numerischen Wert in die Zelle schreiben oZelleValue = 2022End Sub
Im Beispiel werden die Eigenschaften String Value und FormulaLocal verwendet um einer Zelle Werte zuzuweisen Waumlhrend die ersten Zeichenketten und numerische Werte betreffen erlaubt es Formula oder FormulaLocal eine Calc-Funktion einzufuumlgen
FormulaLocal weist darauf hin dass die Formel lokalisiert also nicht in der Standardsprache sondern in der eingestellten Sprache vorliegt Es empfiehlt sich aber nie die lokalisierten Namen der Formeln zu verwenden Anwender welche eine andere Lokalisierung verwenden muumlssten sonst die Skripts umschreiben Deshalb besser immer die Basissprache Englisch verwenden
42 Die Inhalte von Zellen
Bei der Unterscheidung von Zellinhalten gibt es zwei verschiedene Ansaumltze welche in verschiedenen Situationen von Bedeutung sind
Geht es darum zu bestimmen von welchem Typ der Wert einer Zelle ist dann bedient man sich der Konstantengruppe comsunstartableCellContentType
Konstanten des Service comsunstartableCellContentType
EMPTY Die Zelle ist leer
VALUE ein numerischer Wert
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (6 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
TEXT eine Zeichenkette
FORMULA eine Funktion
Mittels dieser Konstantengruppe kann gepruumlft werden von welchem Typ der Wert einer Zelle ist
Sub inhaltsTypen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim ausgabe as String aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Inhalte auf Typ pruumlfen Select Case oZelleType Case comsunstartableCellContentTypeTEXT ausgabe = Zelle enthaumllt amp _ eine Zeichenkette Case comsunstartableCellContentTypeVALUE ausgabe = Zelle enthaumllt amp _ einen numerischen Wert Case comsunstartableCellContentTypeFORMULA ausgabe = Zelle enthaumllt amp _ eine Formel Case comsunstartableCellContentTypeEMPTY ausgabe = Zelle ist leer End Select Info-Anzeige MsgBox ausgabeEnd Sub
43 Loumlschen von Zellinhalten
Beim Loumlschen von Zellinhalten kommt eine andere Unterscheidung von Zellinhalten zur Anwendung Diese ist aus dem Dialog Inhalte loumlschen bekannt Selektiert man eine oder mehrere Zellen und druumlckt die Delete-Taste der Tastatur so erscheint der Dialog und fragt nach was denn alles geloumlscht werden soll
Die vorhandenen Optionen und wenige mehr sind auch uumlber Basic verfuumlgbar und koumlnnen fuumlr das Loumlschen von Inhalten in Zellen oder Zellbereichen verwendet werden Die Konstantengruppe comsunstarsheetCellFlags bietet eine Reihe von Konstanten an die dem Zweck dienen bei einer Loumlschoperation die Typen von Inhalten zu deklarieren die geloumlscht werden sollen
Da die Werte der Konstanten der Binaumlrreihe (1 2 4 8 usw) folgen koumlnnen diese einfach addiert werden und die Summe an die Methode clearContents(nInhaltsTypen) uumlbergeben werden die vom Interface comsunstarsheetXSheetOperation bereitgestellt wird
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (7 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
End Sub
3 Spalten und ZeilenEin Tabellenblatt besteht aus Zeilen und Spalten Diese koumlnnen uumlber ihren Index (beginnend mit 0) direkt angesprochen werden In der kuumlrzesten Form gelangt man also mit ThisComponentSheets(0)Columns(0) an die Spalte A des ersten Tabellenblattes des aktiven Calc-Dokumentes An Spalten und Zeilen lassen sich alle Formatierungen anwenden welche man auch fuumlr Zellen oder Zellbereiche verfuumlgbar sind Durch eine Anweisung koumlnnen so alle Zellen einer Spalte oder Zeile formatiert werden
Sub zeilenUndSpalten Variablen deklarieren Dim oCalcDokument as Object Dim oZeile as Object Dim oSpalte as Object Calc-Dokument holen oCalcDokument = ThisComponent Spalte A auf Index 0 holen oSpalte = ThisComponentSheets(0)Columns(0) zB Zellhintergrund aller Zellen der Spalte einfaumlrben oSpalteCellBackColor = RGB ( 230 230 230 ) Zeile 1 auf Index 0 holen oZeile = ThisComponentSheets(0)Rows(0) zB Schriftgroumlsse aller Zellen der Zeile setzten oZeileCharHeight = 24End Sub
Mit den Eigenschaften der Services comsunstartableTableRow und comsunstartableTableColumn laumlsst sich die Zeile bzw Spalte unter anderem ein- und ausblenden oder in optimale Dimensionen setzen
Eigenschaften von comsunstartableTableRow
Long Height Houmlhe der Zeile in 1100 Millimeter
Boolean OptimalHeight Passt mit TRUE die Houmlhe der Zeile auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller vertikaler Seitenumbruch vor dieser Zeile wenn TRUE
Eigenschaften von comsunstartableTableColumn
Long Width Breite der Spalte in 1100 Millimeter
Boolean OptimalWidth Passt mit TRUE die Breite der Spalte auf Inhalte an
Boolean IsVisible TRUE fuumlr sichtbar und FALSE fuumlr ausgeblendet
Boolean IsStartOfNewPageManueller horizontalen Seitenumbruch vor dieser Spalte wenn TRUE
31 Optimale Spaltenbreite und Zeilenhoumlhe
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (4 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Nach Benutzereingaben aber auch nach der Eingabe von Zellwerten uumlber OpenOfficeorg-Basic sind die Inhalte einiger Spalten oder auch Zeilen oft nicht an die neuen Inhalte angepasst sie sind zu breit oder zu schmal
Uumlber die Maus kann man in diesem Fall eine oder mehrere Spalte anwaumlhlen und mit einem Doppelklick auf die Zellbegrenzung eine angepasste Spaltenbreite erzwingen Dasselbe laumlsst sich uumlber die comsunstartableTableColumn und comsunstartableTableRow Services auch uumlber Basic erreichen
Sub zeilenUndSpaltenOptimaleGroesse optimale Houmlhe fuumlr Zeile 1 auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Rows(0)OptimalHeight = TRUE optimale Breite fuumlr Spalte A auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Columns(0)OptimalWidth = TRUE End Sub
4 ZellenEine Zelle eines Tabellendokumente unterstuumltzt eine Vielzahl von Interfaces Einige die besonders wichtig erscheinen sind in der folgenden Tabelle 1 aufgefuumlhrt und lassen die umfassende Funktionalitaumlt eine Zelle erahnen Viele der Interfaces von Zellen Zellbereiche und Tabellenblaumltter sind uumlbrigens identisch und werden exakt auf dieselbe Weise angewendet
Unterstuumltzte Interfaces vom Calc-Zellen
cssutilXReplaceableErmoumlglicht das Suchen und Ersetzen mit eine ReplaceDescriptor (Abschnitt 19)
csssheetXCellAddressable Hat eine Zelladresse (Abschnitt 145)
csssheetXCellRangeAddressable Hat eine Zellbereichsadresse (Abschnitt 151)
csssheetXFormulaQueryZugriff auf Zellen welche uumlber Funktionen mit dieser Zelle in Beziehung stehen oder solche welche diese Zelle in ihren Funktionen verwenden (DependentsPrecendents)
csssheetXSheetAnnotationAnchor Anker fuumlr eine Notiz (Abschnitt 18)
csssheetXSheetCellRange Eine Zelle ist auch ein Zellbereich
csssheetXSheetOperationAn einer Zelle lassen sich Grundberechnungen (SUM() AVG() etc) durchfuumlhren wie an einem Zellbereich (Abschnitt 155)
csstableXAutoFormattable ist auto-formatierbar
csstableXCell XCell von comsunstartable
csstableXCellRange Eine Zelle ist auch ein Zellbereich (Abschnitt 15)
csstableXColumnRowRange
csstextXText zu Bearbeitung von Zeichenketten in einer Zelle (Abschnitt 145)
csstextXTextFieldsSupplier fuumlr den Zugriff auf Textfelder innerhalb der Zelle
cssutilXIndent zur Manipulation der Einruumlckung der Zelle
cssutilXSearchable eine Zelle laumlsst sich durchsuchen (Abschnitt 19)
41 Zellen ansprechen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (5 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Eine Zelle kann uumlber die Funktion getCellByPosition( col row ) eines Tabellenblattes angesprochen werden Die Zelle A1 kommt dabei auf die Position 00 zu liegen A2 auf 01 B1 auf 10 usw
Sub einzelZelleUeberIndex Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0)
Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Zeichenkette in die Zelle schreiben oZelleString = Ein Text MsgBox weiter lokalisierte Formel in die Zelle schreiben nicht empfehlendwert oZelleFormulaLocal = =SUMME( A2A3 ) MsgBox weiter numerischen Wert in die Zelle schreiben oZelleValue = 2022End Sub
Im Beispiel werden die Eigenschaften String Value und FormulaLocal verwendet um einer Zelle Werte zuzuweisen Waumlhrend die ersten Zeichenketten und numerische Werte betreffen erlaubt es Formula oder FormulaLocal eine Calc-Funktion einzufuumlgen
FormulaLocal weist darauf hin dass die Formel lokalisiert also nicht in der Standardsprache sondern in der eingestellten Sprache vorliegt Es empfiehlt sich aber nie die lokalisierten Namen der Formeln zu verwenden Anwender welche eine andere Lokalisierung verwenden muumlssten sonst die Skripts umschreiben Deshalb besser immer die Basissprache Englisch verwenden
42 Die Inhalte von Zellen
Bei der Unterscheidung von Zellinhalten gibt es zwei verschiedene Ansaumltze welche in verschiedenen Situationen von Bedeutung sind
Geht es darum zu bestimmen von welchem Typ der Wert einer Zelle ist dann bedient man sich der Konstantengruppe comsunstartableCellContentType
Konstanten des Service comsunstartableCellContentType
EMPTY Die Zelle ist leer
VALUE ein numerischer Wert
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (6 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
TEXT eine Zeichenkette
FORMULA eine Funktion
Mittels dieser Konstantengruppe kann gepruumlft werden von welchem Typ der Wert einer Zelle ist
Sub inhaltsTypen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim ausgabe as String aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Inhalte auf Typ pruumlfen Select Case oZelleType Case comsunstartableCellContentTypeTEXT ausgabe = Zelle enthaumllt amp _ eine Zeichenkette Case comsunstartableCellContentTypeVALUE ausgabe = Zelle enthaumllt amp _ einen numerischen Wert Case comsunstartableCellContentTypeFORMULA ausgabe = Zelle enthaumllt amp _ eine Formel Case comsunstartableCellContentTypeEMPTY ausgabe = Zelle ist leer End Select Info-Anzeige MsgBox ausgabeEnd Sub
43 Loumlschen von Zellinhalten
Beim Loumlschen von Zellinhalten kommt eine andere Unterscheidung von Zellinhalten zur Anwendung Diese ist aus dem Dialog Inhalte loumlschen bekannt Selektiert man eine oder mehrere Zellen und druumlckt die Delete-Taste der Tastatur so erscheint der Dialog und fragt nach was denn alles geloumlscht werden soll
Die vorhandenen Optionen und wenige mehr sind auch uumlber Basic verfuumlgbar und koumlnnen fuumlr das Loumlschen von Inhalten in Zellen oder Zellbereichen verwendet werden Die Konstantengruppe comsunstarsheetCellFlags bietet eine Reihe von Konstanten an die dem Zweck dienen bei einer Loumlschoperation die Typen von Inhalten zu deklarieren die geloumlscht werden sollen
Da die Werte der Konstanten der Binaumlrreihe (1 2 4 8 usw) folgen koumlnnen diese einfach addiert werden und die Summe an die Methode clearContents(nInhaltsTypen) uumlbergeben werden die vom Interface comsunstarsheetXSheetOperation bereitgestellt wird
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (7 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Nach Benutzereingaben aber auch nach der Eingabe von Zellwerten uumlber OpenOfficeorg-Basic sind die Inhalte einiger Spalten oder auch Zeilen oft nicht an die neuen Inhalte angepasst sie sind zu breit oder zu schmal
Uumlber die Maus kann man in diesem Fall eine oder mehrere Spalte anwaumlhlen und mit einem Doppelklick auf die Zellbegrenzung eine angepasste Spaltenbreite erzwingen Dasselbe laumlsst sich uumlber die comsunstartableTableColumn und comsunstartableTableRow Services auch uumlber Basic erreichen
Sub zeilenUndSpaltenOptimaleGroesse optimale Houmlhe fuumlr Zeile 1 auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Rows(0)OptimalHeight = TRUE optimale Breite fuumlr Spalte A auf Index 0 Tabellenblatt 0 ThisComponentSheets(0)Columns(0)OptimalWidth = TRUE End Sub
4 ZellenEine Zelle eines Tabellendokumente unterstuumltzt eine Vielzahl von Interfaces Einige die besonders wichtig erscheinen sind in der folgenden Tabelle 1 aufgefuumlhrt und lassen die umfassende Funktionalitaumlt eine Zelle erahnen Viele der Interfaces von Zellen Zellbereiche und Tabellenblaumltter sind uumlbrigens identisch und werden exakt auf dieselbe Weise angewendet
Unterstuumltzte Interfaces vom Calc-Zellen
cssutilXReplaceableErmoumlglicht das Suchen und Ersetzen mit eine ReplaceDescriptor (Abschnitt 19)
csssheetXCellAddressable Hat eine Zelladresse (Abschnitt 145)
csssheetXCellRangeAddressable Hat eine Zellbereichsadresse (Abschnitt 151)
csssheetXFormulaQueryZugriff auf Zellen welche uumlber Funktionen mit dieser Zelle in Beziehung stehen oder solche welche diese Zelle in ihren Funktionen verwenden (DependentsPrecendents)
csssheetXSheetAnnotationAnchor Anker fuumlr eine Notiz (Abschnitt 18)
csssheetXSheetCellRange Eine Zelle ist auch ein Zellbereich
csssheetXSheetOperationAn einer Zelle lassen sich Grundberechnungen (SUM() AVG() etc) durchfuumlhren wie an einem Zellbereich (Abschnitt 155)
csstableXAutoFormattable ist auto-formatierbar
csstableXCell XCell von comsunstartable
csstableXCellRange Eine Zelle ist auch ein Zellbereich (Abschnitt 15)
csstableXColumnRowRange
csstextXText zu Bearbeitung von Zeichenketten in einer Zelle (Abschnitt 145)
csstextXTextFieldsSupplier fuumlr den Zugriff auf Textfelder innerhalb der Zelle
cssutilXIndent zur Manipulation der Einruumlckung der Zelle
cssutilXSearchable eine Zelle laumlsst sich durchsuchen (Abschnitt 19)
41 Zellen ansprechen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (5 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Eine Zelle kann uumlber die Funktion getCellByPosition( col row ) eines Tabellenblattes angesprochen werden Die Zelle A1 kommt dabei auf die Position 00 zu liegen A2 auf 01 B1 auf 10 usw
Sub einzelZelleUeberIndex Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0)
Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Zeichenkette in die Zelle schreiben oZelleString = Ein Text MsgBox weiter lokalisierte Formel in die Zelle schreiben nicht empfehlendwert oZelleFormulaLocal = =SUMME( A2A3 ) MsgBox weiter numerischen Wert in die Zelle schreiben oZelleValue = 2022End Sub
Im Beispiel werden die Eigenschaften String Value und FormulaLocal verwendet um einer Zelle Werte zuzuweisen Waumlhrend die ersten Zeichenketten und numerische Werte betreffen erlaubt es Formula oder FormulaLocal eine Calc-Funktion einzufuumlgen
FormulaLocal weist darauf hin dass die Formel lokalisiert also nicht in der Standardsprache sondern in der eingestellten Sprache vorliegt Es empfiehlt sich aber nie die lokalisierten Namen der Formeln zu verwenden Anwender welche eine andere Lokalisierung verwenden muumlssten sonst die Skripts umschreiben Deshalb besser immer die Basissprache Englisch verwenden
42 Die Inhalte von Zellen
Bei der Unterscheidung von Zellinhalten gibt es zwei verschiedene Ansaumltze welche in verschiedenen Situationen von Bedeutung sind
Geht es darum zu bestimmen von welchem Typ der Wert einer Zelle ist dann bedient man sich der Konstantengruppe comsunstartableCellContentType
Konstanten des Service comsunstartableCellContentType
EMPTY Die Zelle ist leer
VALUE ein numerischer Wert
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (6 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
TEXT eine Zeichenkette
FORMULA eine Funktion
Mittels dieser Konstantengruppe kann gepruumlft werden von welchem Typ der Wert einer Zelle ist
Sub inhaltsTypen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim ausgabe as String aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Inhalte auf Typ pruumlfen Select Case oZelleType Case comsunstartableCellContentTypeTEXT ausgabe = Zelle enthaumllt amp _ eine Zeichenkette Case comsunstartableCellContentTypeVALUE ausgabe = Zelle enthaumllt amp _ einen numerischen Wert Case comsunstartableCellContentTypeFORMULA ausgabe = Zelle enthaumllt amp _ eine Formel Case comsunstartableCellContentTypeEMPTY ausgabe = Zelle ist leer End Select Info-Anzeige MsgBox ausgabeEnd Sub
43 Loumlschen von Zellinhalten
Beim Loumlschen von Zellinhalten kommt eine andere Unterscheidung von Zellinhalten zur Anwendung Diese ist aus dem Dialog Inhalte loumlschen bekannt Selektiert man eine oder mehrere Zellen und druumlckt die Delete-Taste der Tastatur so erscheint der Dialog und fragt nach was denn alles geloumlscht werden soll
Die vorhandenen Optionen und wenige mehr sind auch uumlber Basic verfuumlgbar und koumlnnen fuumlr das Loumlschen von Inhalten in Zellen oder Zellbereichen verwendet werden Die Konstantengruppe comsunstarsheetCellFlags bietet eine Reihe von Konstanten an die dem Zweck dienen bei einer Loumlschoperation die Typen von Inhalten zu deklarieren die geloumlscht werden sollen
Da die Werte der Konstanten der Binaumlrreihe (1 2 4 8 usw) folgen koumlnnen diese einfach addiert werden und die Summe an die Methode clearContents(nInhaltsTypen) uumlbergeben werden die vom Interface comsunstarsheetXSheetOperation bereitgestellt wird
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (7 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Eine Zelle kann uumlber die Funktion getCellByPosition( col row ) eines Tabellenblattes angesprochen werden Die Zelle A1 kommt dabei auf die Position 00 zu liegen A2 auf 01 B1 auf 10 usw
Sub einzelZelleUeberIndex Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0)
Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Zeichenkette in die Zelle schreiben oZelleString = Ein Text MsgBox weiter lokalisierte Formel in die Zelle schreiben nicht empfehlendwert oZelleFormulaLocal = =SUMME( A2A3 ) MsgBox weiter numerischen Wert in die Zelle schreiben oZelleValue = 2022End Sub
Im Beispiel werden die Eigenschaften String Value und FormulaLocal verwendet um einer Zelle Werte zuzuweisen Waumlhrend die ersten Zeichenketten und numerische Werte betreffen erlaubt es Formula oder FormulaLocal eine Calc-Funktion einzufuumlgen
FormulaLocal weist darauf hin dass die Formel lokalisiert also nicht in der Standardsprache sondern in der eingestellten Sprache vorliegt Es empfiehlt sich aber nie die lokalisierten Namen der Formeln zu verwenden Anwender welche eine andere Lokalisierung verwenden muumlssten sonst die Skripts umschreiben Deshalb besser immer die Basissprache Englisch verwenden
42 Die Inhalte von Zellen
Bei der Unterscheidung von Zellinhalten gibt es zwei verschiedene Ansaumltze welche in verschiedenen Situationen von Bedeutung sind
Geht es darum zu bestimmen von welchem Typ der Wert einer Zelle ist dann bedient man sich der Konstantengruppe comsunstartableCellContentType
Konstanten des Service comsunstartableCellContentType
EMPTY Die Zelle ist leer
VALUE ein numerischer Wert
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (6 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
TEXT eine Zeichenkette
FORMULA eine Funktion
Mittels dieser Konstantengruppe kann gepruumlft werden von welchem Typ der Wert einer Zelle ist
Sub inhaltsTypen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim ausgabe as String aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Inhalte auf Typ pruumlfen Select Case oZelleType Case comsunstartableCellContentTypeTEXT ausgabe = Zelle enthaumllt amp _ eine Zeichenkette Case comsunstartableCellContentTypeVALUE ausgabe = Zelle enthaumllt amp _ einen numerischen Wert Case comsunstartableCellContentTypeFORMULA ausgabe = Zelle enthaumllt amp _ eine Formel Case comsunstartableCellContentTypeEMPTY ausgabe = Zelle ist leer End Select Info-Anzeige MsgBox ausgabeEnd Sub
43 Loumlschen von Zellinhalten
Beim Loumlschen von Zellinhalten kommt eine andere Unterscheidung von Zellinhalten zur Anwendung Diese ist aus dem Dialog Inhalte loumlschen bekannt Selektiert man eine oder mehrere Zellen und druumlckt die Delete-Taste der Tastatur so erscheint der Dialog und fragt nach was denn alles geloumlscht werden soll
Die vorhandenen Optionen und wenige mehr sind auch uumlber Basic verfuumlgbar und koumlnnen fuumlr das Loumlschen von Inhalten in Zellen oder Zellbereichen verwendet werden Die Konstantengruppe comsunstarsheetCellFlags bietet eine Reihe von Konstanten an die dem Zweck dienen bei einer Loumlschoperation die Typen von Inhalten zu deklarieren die geloumlscht werden sollen
Da die Werte der Konstanten der Binaumlrreihe (1 2 4 8 usw) folgen koumlnnen diese einfach addiert werden und die Summe an die Methode clearContents(nInhaltsTypen) uumlbergeben werden die vom Interface comsunstarsheetXSheetOperation bereitgestellt wird
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (7 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
TEXT eine Zeichenkette
FORMULA eine Funktion
Mittels dieser Konstantengruppe kann gepruumlft werden von welchem Typ der Wert einer Zelle ist
Sub inhaltsTypen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim ausgabe as String aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) Inhalte auf Typ pruumlfen Select Case oZelleType Case comsunstartableCellContentTypeTEXT ausgabe = Zelle enthaumllt amp _ eine Zeichenkette Case comsunstartableCellContentTypeVALUE ausgabe = Zelle enthaumllt amp _ einen numerischen Wert Case comsunstartableCellContentTypeFORMULA ausgabe = Zelle enthaumllt amp _ eine Formel Case comsunstartableCellContentTypeEMPTY ausgabe = Zelle ist leer End Select Info-Anzeige MsgBox ausgabeEnd Sub
43 Loumlschen von Zellinhalten
Beim Loumlschen von Zellinhalten kommt eine andere Unterscheidung von Zellinhalten zur Anwendung Diese ist aus dem Dialog Inhalte loumlschen bekannt Selektiert man eine oder mehrere Zellen und druumlckt die Delete-Taste der Tastatur so erscheint der Dialog und fragt nach was denn alles geloumlscht werden soll
Die vorhandenen Optionen und wenige mehr sind auch uumlber Basic verfuumlgbar und koumlnnen fuumlr das Loumlschen von Inhalten in Zellen oder Zellbereichen verwendet werden Die Konstantengruppe comsunstarsheetCellFlags bietet eine Reihe von Konstanten an die dem Zweck dienen bei einer Loumlschoperation die Typen von Inhalten zu deklarieren die geloumlscht werden sollen
Da die Werte der Konstanten der Binaumlrreihe (1 2 4 8 usw) folgen koumlnnen diese einfach addiert werden und die Summe an die Methode clearContents(nInhaltsTypen) uumlbergeben werden die vom Interface comsunstarsheetXSheetOperation bereitgestellt wird
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (7 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Sub zellInhalteLoeschen Variablen deklarieren Dim oCalcDokument as Object Dim oTabellenblatt as Object Dim oZelle as Object Dim oZellAdresse as Object Dim nInhaltsTypen as Long aktuelles Dokument holen oCalcDokument = ThisComponent erstes Tabellenblatt holen oTabellenblatt = oCalcDokumentSheets(0) Zelle A1 liegt auf Position 00 oZelle = oTabellenblattgetCellByPosition( 0 0 ) addieren der Zellinhaltstypen die geloumlscht werden sollen nInhaltsTypen = comsunstarsheetCellFlagsSTRING + _ comsunstarsheetCellFlagsVALUE + _ comsunstarsheetCellFlagsFORMULA loumlschen uumlber comsunstarsheetXSheetOperation oZelleclearContents( nInhaltsTypen )End Sub
In der folgenden Tabelle sind alle Konstanten der Gruppe comsunstarsheetCellFlags aufgefuumlhrt
Konstanten von comsunstarsheetCellFlags
VALUE numerische Werte
DATETIME numerische Werte mit Datums- oder Zeitformat
STRING Zeichenketten
ANNOTATION Notizen
FORMULA Funktionen
HARDATTRHarte Formatierung die nicht uumlber Formatvorlagen angebracht wurden
STYLES Formatvorlagen
OBJECTS Zeichenobjekte
EDITATTR
44 Text in Zellen
Der einfachste Weg auf den Text in einer Zelle zuzugreifen ist die Eigenschaft String einer Zelle
Sub textInZelle Variablen deklarieren Dim oZelle as Object Dim sText as String
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (8 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Text anzeigen MsgBox oZelleStringEnd Sub
Zelltext erweitern
Um einem bereits existierenden Text in einer Zelle weiteren Text anzuhaumlngen oder in diesen einzufuumlgen benoumltigen wir den Ruumlckgriff auf einen Textcursor (XTextCursor) mit dem wir uns innerhalb des Textes bewegen koumlnnen Nachdem der Cursor im Text an die gewuumlnschte Stelle bewegt worden ist benutzt man die Methode insertString( oTextCursor sText bAbsorb ) Wird fuumlr den dritten Parameter jeweils FALSE uumlbergeben so wird der bestehende Text nicht uumlberschrieben
Sub textInZelleErweitern Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor ans Ende des Textes bewegen oTextCursorgoToEnd( false ) Text am Ende einfuumlgen oZelleinsertString( oTextCursor neuer Text am Ende false ) TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) Text am Anfang einfuumlgen oZelleinsertString( oTextCursor Und am Anfang false )End Sub
Zelltext uumlberschreiben
Wird der Cursor verschoben so muss immer ein boolean-Parameter mitgegeben werden Im obigen Beispiel wurde dabei immer false verwendet Wird true uumlbergeben so wird der Text uumlber welchen sich der Cursor hinwegbewegt selektiert Das geschieht jedoch nur virtuell und wird nicht visuell angezeigt Dennoch kann man die Vorstellung der Selektion mit der Maus als Analogie verwenden Der so selektierte Text laumlsst sich dann ersetzen indem bei der Methode insertString( oTextCursor sText bAbsorb) als Parameter bAbsorb auf true mitgegeben wird Der Text wird absorbiert oder eben uumlberschrieben
Sub textUeberschreiben Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (9 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
drei Zeichen uumlberspringen oTextCursorgoRight( 3 false ) TextCursor ans Ende des Textes bewegen und selektieren oTextCursorgoToEnd( true ) selektierten Text ersetzen oZelleinsertString( oTextCursor ersetze Text true )End Sub
Zelltext formatieren
Selektierter Text laumlsst sich nicht nur uumlberschreiben sondern auch formatieren indem man nach der virtuellen Selektion mit dem TextCursor die Format-Eigenschaften des TextCursors manipuliert
Sub textSelektieren Variablen deklarieren Dim oZelle as Object Dim oTextCursor as Object Zelle A1 uumlber Position holen oZelle = ThisComponentSheets(0)getCellByPosition(00) TextCursor erzeugen oTextCursor = oZellecreateTextCursor TextCursor an den Anfang des Textes bewegen oTextCursorgoToStart( false ) TextCursor 1 Zeichen nach rechts und selektieren(true) oTextCursorgoRight( 1 true ) Erstes Zeichen fett oTextCursorCharWeight = comsunstarawtFontWeightBOLD auch zweites Zeich in Selektion einschliessen oTextCursorgoRight( 1 true ) erstes und zweites Zeichen 18 pt oTextCursorCharHeight = 18End Sub
45 Zelladressen
Ein Zelle enthaumllt in der Eigenschaft CellAddress ein Struct vom Typ comsunstartableCellAddress das Informationen uumlber die Position der Zelle im Dokument enthaumllt
Eigenschaften des Stuct comsunstartableCellAddress
SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
Column Index der Spalte in der die Zelle liegt
Row Index der Zeile in der die Zelle liegt
Neben dem Index der Zeile und der Spalte kann uumlber die Zelladresse auch der Index des Tabellenblattes in Erfahrung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (10 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
gebracht werden
Sub zelladresse Variablen deklarieren Dim oZelle as Object Dim oZellAdresse as Object Zelle A1 liegt auf Position 00 in Blatt 0 oZelle = ThisComponentSheets(0)getCellByPosition( 1 0 ) Zelladresse holen oZellAdresse = oZellegetCellAddress() Zeichenkette fuumlr Info-Ausgabe Dim ausgabe as String ausgabe = Tabellenblatt amp _ oZellAdresseSheet amp chr(13) ausgabe = ausgabe amp Spalte amp _ oZellAdresseColumn amp chr(13) ausgabe = ausgabe amp Zeile amp _ oZellAdresseRow Info anzeigen MsgBox ausgabeEnd Sub
5 Zellbereiche
51 Zellbereichsadressen
Auch Zellbereiche koumlnnen uumlber eine Adresse angesprochen werden (comsunstartableCellRangeAddress) Diese enthaumllt die dreidimensionalen Koordinaten (Tabellenblatt Zeile Spalte) eines Zellbereiches
Sub zellbereichsAdressen Variablen deklarieren Dim oZellBereich as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0 oZellbereichsAdresseStartRow = 0 oZellbereichsAdresseEndColumn = 3 oZellbereichsAdresseEndRow = 4 Zellbereich holen oZellbereich = ThisComponentSheets( oZellbereichsAdresseSheet )_ getCellRangeByPosition( oZellbereichsAdresseStartColumn _ oZellbereichsAdresseStartRow _ oZellbereichsAdresseEndColumn _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (11 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseEndRow ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) End Sub
Eigenschaften des Struct comsunstartableCellRangeAddress
short SheetIndex des Tabellenblattes welches den Zellbereich enthaumllt
long StartColumnIndex der Spalte am linken Ende des Zellbereiches
long StartRowIndex der Zeile am oberen Ende des Zellbereiches
long EndColumnIndex der Spalte am rechten Ende des Zellbereiches
long EndRowIndex der Zeile am unteren Ende des Zellbereiches
52 Zellbereiche einfuumlgen entfernen kopieren und verschieben
Das Einfuumlgen Loumlschen Kopieren und Verschieben von Zellen und Zellbereichen wird uumlber das Interface comsubstarsheetXCellRangeMovement ermoumlglicht das von einem Tabellenblatt exportiert wird
Methoden des Interfaces comsunstarsheetXCellRangeMovement
insertCells(oCellrange nCellInsertMode )Zellen einfuumlgen verschiebt die anderen Zellen nach unten oder nach rechts
removeRange(cellrange nCellDeleteMode)Zellen loumlschen verschiebt andere Zellen nach oben oder nach links
moveRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument verschieben
copyRange(oDestinationCell oCellRange)Zellen nach einem anderen Ort im Dokument kopieren
Sub zellenEinfuegenVerschieben Variablen deklarieren Dim oZellBereich as Object Dim oTabellenblatt as Object neues Struct erzeugen Dim oZellbereichsAdresse as new comsunstartableCellRangeAddress neues Struct erzeugen Dim oZielZellAdresse as new comsunstartableCellAddress Zellbereichsadresse konfigurieren oZellbereichsAdresseSheet = 0 oZellbereichsAdresseStartColumn = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (12 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZellbereichsAdresseStartRow = 1 oZellbereichsAdresseEndColumn = 2 oZellbereichsAdresseEndRow = 2 Zelladresse konfigurieren oZielZellAdresseSheet = 1 oZielZellAdresseColumn = 0 oZielZellAdresseRow = 0 Tabellenblatt implementiert XCellRangeMovement oTabellenblatt = ThisComponentSheets(0) kopieren nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) einfuumlgen eines Zellbereichs oTabellenblattinsertCells( oZellbereichsAdresse _ comsunstarsheetCellInsertModeDOWN) veschieben nach zweitem Tabellenblatt oTabellenblattcopyRange( oZielZellAdresse oZellbereichsAdresse ) entfernen eines Zellbereichs oTabellenblattremoveRange( oZellbereichsAdresse _ comsunstarsheetCellDeleteModeUP) End Sub
53 Zellbereiche verbinden
Zellbereich koumlnnen zu einer einzelnen Zelle verbunden werden Uumlber die grafische Oberflaumlche geschieht das uumlber den Menuumlpunkt Format Zelle zusammenfassen Festlegen In OOo-Basic get der Weg uumlber das Interface comsunstarutilXMergeable welches die Methode merge(boolean) anbietet und von einem Zellbereich (XCellRange) implementiert wird
Die Anwendung ist denkbar einfach Mit dem boolean-Parameter wird angegeben ob der Zellbereich verbunden (true) oder die Verbindung aufgehoben werden soll (false) Eine weitere Methode getIsMerged()boolean laumlsst pruumlfen ob ein Zellbereich bereits verbunden wurde oder nicht
Sub zellbereichVerbindenOderAufheben Variablen deklarieren Dim oZellBereich as Object Zellbereich holen oZellBereich = ThisComponentSheets(0)_ getCellRangeByPosition( 0 0 4 0 ) Zellbereich zu einer einzigen Zelle verbinden oder Verbindung aufheben If oZellBereichgetIsMerged() then oZellBereichmerge( false ) Else oZellBereichmerge( true ) End IfEnd Sub
54 Benannte Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (13 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
In Calc kann einem Zellbereich uumlber Einfuumlgen Name Festlegen ein Name verliehen werden uumlber den ein Zellbereich angesprochen werden kann Solche benannte Zellbereiche koumlnnen uumlber die Methode getCellRangeByName() eines Tabellenblattes angesprochen werden Anstatt eines Namens des Zellbereiches wie A1C10 kann einfach der verliehene Name verwendet werden
Sub benannterZellbereich Variablen deklarieren Dim oZellbereich as Object benannter Zellbereich mit dem Namen test holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( test )
benannter Zellbereich selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
55 Berechnungen mit Zellbereichen
Die Enumeration comsunstarsheetGeneralFunction enthaumllt einige Grundfunktionen welche auf einen Zellbereich angewendet werden koumlnnen Uumlber diese Grundfunktionen lassen sich einige Berechnungen auf einfachste Art und Weise anstellen
Sub grundFunktionenAnwenden Variablen deklarieren Dim oCalcDokument as Object Dim oSelektion as Object Dim sMessage as String sMessage = berechnete Werte amp chr(13) aktuelles Dokument holen oCalcDokument = ThisComponent aktuelle Selektion holen (unterstuumltzt XCellRange) oSelektion = oCalcDokumentgetCurrentSelection() Summe berechnen sMessage = sMessage amp Summe amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionSUM )_ amp chr(13) maximaler Wert sMessage = sMessage amp Max amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionMAX )_ amp chr(13) Durchschnitt sMessage = sMessage amp Durchschnitt amp _ oSelektioncomputeFunction( _ comsunstarsheetGeneralFunctionAVERAGE )_ amp chr(13) Anzahl numerischer Werte sMessage = sMessage amp Anzahl num Werte amp _ oSelektioncomputeFunction( _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (14 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetGeneralFunctionCOUNTNUMS )_ amp chr(13) an Benutzer ausgeben MsgBox sMessageEnd Sub
comsunstarsheetGeneralFunction
NONE Keine Berechnung
AUTO Funktion wird automatisch determiniert
SUM berechnet die Summe aller numerischen Werte
COUNT Alle Werte auch alphanumerische werden gezaumlhlt (Anzahl Werte)
AVERAGE berechnet den Durchschnitt aller numerischen Werte
MAX maximaler Wert aller numerischer Werte wird evaluiert
MIN minimaler Wert aller numerischen Werte wird evaluiert
PRODUCT berechnet das Produkt aller numerischen Werte
COUNTNUMS zaumlhlt die numerischen Werte
STDEV berechnet die Standardabweichung basierend auf einer Stichprobe
STDEVP berechnet die Standardabweichung basierend auf der Grundgesamtheit
VAR berechnet die Varianz basierend auf einer Stichprobe
VARP berechnet die Varianz basierend auf die Grundgesamtheit
6 Zellen oder Zellbereiche formatierenDie meisten Zellformatierungen koumlnnen uumlber die drei Eigenschaftsgruppen csstableCellProperties cssstyleCharacterProperties und cssstyleParagraphProperties angebracht werden Die Anwendung dieser erfolgt uumlber das Setzen dieser Eigenschaften welche an Zellen Zellbereichen und ganzen Tabellenblaumltter angebracht werden koumlnnen
61 comsunstartableCellProperties
comsunstartableCellProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das Cell-Property CellBackColor einer Zelle auf ein helles Grau gesetzt
Sub cellProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor oZelleCellBackColor = RGB( 200 200 200 )End Sub
Eigenschaft moumlgliche Werte
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (15 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
String CellStyle raquoOPTIONAL Name des Styles der Zelle
Long CellBackColor Hintergrundfarbe der Zelle RGB( nRot Ngruen Nblau )
Boolean IsCellBackgroundTransparent True wenn der Hintergrund transparent ist
HoriJustify
Horizontale Ausrichtung der Zelle comsunstartableCellHoriJustifyRIGHT comsunstartableCellHoriJustifyCENTER comsunstartableCellHoriJustifyLEFT comsunstartableCellHoriJustifySTANDARD
VertJustify
Vertikale Ausrichtung der Zelle comsunstartableCellVertJustifySTANDARD comsunstartableCellVertJustifyTOP comsunstartableCellVertJustifyCENTER comsunstartableCellVertJustifyBOTTOM
Boolean IsTextWrapped True wenn der Text automatisch umgebrochen wird
Long ParaIndent Einruumlckung des Zellinhaltes in 1100 mm
Orientation
Orientierung des Zellinhaltes comsunstartableCellOrientationSTANDARD comsunstartableCellOrientationTOPBOTTOM comsunstartableCellOrientationBOTTOMTOP comsunstartableCellOrientationSTACKED
Long RotateAngle Rotation des Zellinhaltes in 1100 Grad
RotateReference die Ecke um die rotiert wird
AsianVerticalMode raquoOPTIONAL Waumlhlt vertikale asiatische Zeichen-Orientierung aus
TableBorder Beschreibung des Rahmens um die Zelle oder den Zellbereich
TopBorder Beschreibung des oberen Rahmens
BottomBorder Beschreibung des unteren Rahmens
LeftBorder Beschreibung des linken Rahmens
RightBorder Beschreibung des rechten Rahmens
NumberFormat Index des Zahlenformats
ShadowFormat Format der Schattierung der Zelle
CellProtection Beschreibung des Zellschutzes
UserDefinedAttributes Zusaumltzlich gespeicherte Attribute
62 comsunstarstyleCharacterProperties
comsunstarstyleCharacterProperties koumlnnen auf Zellen Zellbereiche sowie Spalten und Zeilen angewendet werden Im folgenden Beispiel wird das CharacterProperty CharHeight einer Zelle auf 24 Punkte gesetzt
Sub characterProperties Variablen deklarieren Dim oZelle as Object hole Zelle A1 oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) setzen des CharacterProperty CellBackColor
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (16 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleCharHeight = 24End Sub
Eigenschaft moumlgliche Werte
Long CharColorZeichenfarbe RGB( nRotwert nGruenwert nBlauwert ) Farbeanteile zwischen 0 und 255
Boolean CharContoured Zeichen mit Contouren
Boolean CharCrossedOut Durchgestrichene Zeichen
Integer CharEmphasis Betonung
Integer CharFont Schrift
Integer CharFontCharSet
Integer CharFontCharSetAsian
Integer CharFontCharSetComplex
Integer CharFontFamily Schriftfamilie
Integer CharFontFamilyAsian asiatische Schriftfamilie
Integer CharFontFamilyComplex
String CharFontName Schriftname
String CharFontNameAsian
String CharFontNameComplex
Integer CharFontPitch
Integer CharFontPitchAsian
Integer CharFontPitchComplex
String CharFontStyleName Zeichen-Formatvorlage
String CharFontStyleNameAsian
String CharFontStyleNameComplex
Single CharHeight Zeichengroumlsse in Punkten
Single CharHeightAsian
Single CharHeightComplex
Object CharLocale Sprache der Zeichen
Object CharLocaleAsian
Object CharLocaleComplex
Long CharPosture
Long CharPostureAsian
Long CharPostureComplex
Integer CharRelief
Boolean CharShadowed Schattierung der Zeichen
Integer CharStrikeout
Integer CharUnderline Unterstreichung der Zeichen
Long CharUnderlineColor Farbe der Unterstreichung
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (17 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean CharUnderlineHasColor Unterstreichung in Farbe (TRUEFALSE)
Single CharWeight Zeichendicke
Single CharWeightAsian
Single CharWeightComplex
63 comsunstarstyleParagraphProperties
Eigenschaft moumlgliche Werte
Integer ParaAdjust
comsunstarstyleParagraphAdjustLEFT comsunstarstyleParagraphAdjustRIGHT comsunstarstyleParagraphAdjustBLOCK comsunstarstyleParagraphAdjustCENTER comsunstarstyleParagraphAdjustSTRETCH
Integer ParaIndent
Integer ParaLastLineAdjust
Long ParaBottomMargin Abstand nach unten in 1100 Millimeter
Long ParaLeftMargin Abstand links in 1100 Millimeter
Long ParaRightMargin Abstand nach rechts in 1100 Millimeter
Long ParaTopMargin Abstand nach oben in 1100 Millimeter
64 Formate fuumlr Zahlen Datum und Zeit
65 Bedingte Formatierung
Einer Zelle oder einem Zellbereich koumlnnen bedingte Formatierungen angebracht werden die wirksam werden wenn die Bedingungen zutreffen Diese praktische Eigenschaft kann auch uumlber Basic genutzt werden
Die Services comsunstartableXCell und comsunstarsheetXSheetCellRange erlauben uumlber die Eigenschaft ConditionalFormat bzw ConditionalFormatLocal Zugriff auf ein Objekt welches das Interface comsunstarsheetXSheetConditionalEntries unterstuumltzt und einen XIndexAccess bzw XElementAccess auf die bedingten Formatierungen einer Zelle oder eines Zellbereiches anbietet
Die in XSheetConditionalEntries enthaltenen Objekte unterstuumltzen den Service comsunstarsheetTableConditionalEntry welche die Interfaces comsunstarsheetXSheetConditionalEntry und comsunstarsheetXSheetCondition exportiert
Eigenschaften von comsunstarsheetXSheetConditionalEntry
String StyleName Name der Formatvorlage
Eigenschaften von comsunstarsheetXSheetCondition
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (18 von 34) [03082004 225040]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long Operator
logischer Operator der Bedingung NONE Keine Bedingung definiert EQUAL Wert muss gleich dem spezifizierten Wert in Formula1 sein NOT_EQUAL Wert muss ungleich dem spezifizierten Wert in Formula1 sein GREATER Wert muss groumlsser als der spezifizierte Wert in Formula1 sein GREATER_EQUAL Wert muss gleich oder groumlsser als der spezifizierte Wert in Formula1 sein LESS Wert muss kleiner als der spezifizierte Wert in Formula1 sein LESS_EQUAL Wert muss gleich oder kleiner als der spezifizierte Wert in Formula1 sein BETWEEN Wert muss zwischen den spezifizierten Werten in Formula1 und Formula2 sein NOT_BETWEEN Der Wert muss ausserhalb der beiden spezifizierten Werte in Formula1 und Formula2 sein FORMULA Der in Forumla1 spezifizierte Ausdruck muss ein Resultat ergeben das nicht gleich 0 ist
String Formula1Erste Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
String Formula2Zweite Formel als Zeichenkette die den auszuwertenden Ausdruck enthaumllt Kann zB 10 sein oder aber auch SUM(A1A20) gt 100
Object SourcePositionDie Zelle oder der Zellbereich zu dem die Bedingung gehoumlrt
Mit diesem Wissen sind wir in der Lage die bedingten Formatierungen uumlber Basic zu pruumlfen zu entfernen oder zu erstellen
Sub bedingteFormateEinerZelleAnzeigen Variablen deklarieren Dim oZelle as Object Dim oBedingtesFormat as Object Dim nCounter as Integer Dim sAusgabe as String Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 ) Schleife durch alle bedingten Formate For nCounter = 0 To oZelleConditionalFormatCount-1 bedingtes Formate holen oBedingtesFormat = oZelleConditionalFormat(nCounter) Ausgabe der Eigenschaften sAusgabe = (nCounter+1) amp Bedingtes Format amp chr(13) sAusgabe = sAusgabe amp Operator amp _ oBedingtesFormatOperator amp chr(13) sAusgabe = sAusgabe amp Formel 1 amp _ oBedingtesFormatFormula1 amp chr(13) sAusgabe = sAusgabe amp Formel 2 amp _ oBedingtesFormatFormula2 amp chr(13) sAusgabe = sAusgabe amp Formatvorlage amp _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (19 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oBedingtesFormatStyleName amp chr(13) Ausgabe anzeigen MsgBox sAusgabe Next nCounterEnd Sub
Folgendes Code-Beispiel fuumlgt ein neues bedingtes Format zu den bedingten Formaten der Zelle A1 hinzu Waumlhrend uumlber Format Bedingte Formatierung im Dialog Bedingte Formatierung nur drei bedingte Formatierungen definiert werden koumlnnen (wirklich) scheint dies uumlber Basic keiner Beschraumlnkung zu unterliegen In meinen Versuchen wurden jedenfalls auch Formatierungen an zehnter Stelle ausgewertet und angewendet
Sub bedingteFormateEinerZelleHinzufuegen Variablen deklarieren Dim oZelle as Object die bedingten Formate als XIndexAccess XElementAccess Dim oBedingteFormate as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition( 0 0 )
bedingte Formate der Zelle holen oBedingteFormate = oZelleConditionalFormat neues bedingtes Format als PropertyValue Dim oBedingung(3) as New comsunstarbeansPropertyValue Eigenschaften des Formates definieren oBedingung(0)Name = Operator oBedingung(0)Value = comsunstarsheetConditionOperatorFORMULA oBedingung(1)Name = Formula1 oBedingung(1)Value = SUM(A1A10) gt 100 oBedingung(2)Name = StyleName oBedingung(2)Value = Heading1 das neue Format zu den bereits bestehenden hinzufuumlgen oBedingteFormateaddNew( oBedingung() ) oBedingteFormateclear() wichtig Bedingte Formate in zelle setzen oZelleConditionalFormat = oBedingteFormateEnd Sub
66 Rahmen von Zellen und Zellbereichen
Um den Rahmen einer Zelle oder eines Zellbereiches zu manipulieren koumlnnen die Eigenschaften TopBorder BottomBorder LeftBorder und RightBorder verwendet werden Sowohl Zellen als auch Zellbereiche bieten diese Eigenschaften an uumlber welche die entsprechenden Rahmenlinien bestimmt werden koumlnnen
Die Definition der Eigenschaften einer Linie erfolgt uumlber das Struct comsunstartableBorderLine welches vier Eigenschaften besitzt
Eigenschaften des Struct comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (20 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Long ColorFarbe der Linie ZB RGB( 02550) fuumlr ein haumlssliches Blau
ShortInteger InnerLineWidth Breite der inneren Linie der Doppellinie (in 1100 mm)
ShortInteger OuterLineWidth Breite der aumlusseren Linie der Doppellinie (in 1100 mm)
ShortInteger LineDistance Distanz zwischen den beiden Linien (in 1100 mm)
Der Rahmen eine Zelle oder eines Zellbereiches besteht aus einer Doppellinie Die Staumlrken beider Linien und der Abstand zwischen den beiden koumlnnen unabhaumlngig definiert werden Ist aber InnerLine gleich 0 so wird auch die aumlussere Linie nicht angebracht (Ooo11rc1)
Sub zellRahmenDirekt Variable deklarieren Dim oZellbereich as Object Dim oRahmenLinie as Object oZellbereich = ThisComponentSheets(0)getCellRangeByName( B2B8 ) Rahmenlinie erstellen oRahmenLinie = CreateUnoStruct(comsunstartableBorderLine) Eigenschaften der Linie definieren With oRahmenLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With einzelne Rahmen setzen oZellbereichTopBorder = oRahmenLinie oZellbereichBottomBorder = oRahmenLinie oZellbereichLeftBorder = oRahmenLinie oZellbereichRightBorder = oRahmenLinieEnd Sub
Mit dem direkten Zugriff die Rahmenlinien der Zellen koumlnnen jedoch nur die einzelnen Zellen angesteuert werden Einen Zellbereich nur als ganzes zu Umrahmen ist mit diesem direkten Zugriff nicht moumlglich Die Rahmenformatierung wird immer auf alle Zellen angewendet so dass ein Gitternetz entsteht Soll nur der aumlussere Rahmen eines ganze Zellbereiches gesetzt werden so muss ein Struct vom Typ comsunstartableTableBorder erstellt und uumlber das Property TableBorder einer Zelle oder eines Zellbereiches zugewiesen werden
Das Struct comsunstartableTableBorder
Das Struct comsunstartableTableBorder beschreibt den Rahmen eines Zellbereiches Jeder Zelle oder Zellbereich kann uumlber die Eigenschaft TableBorder ein Rahmen zugewiesen werden der den aumlusseren Rahmen sowie die Trennlinien zwischen den einzelnen Zellen beschreibt
Struct comsunstartableTableBorder
BorderLine TopLine oberer Linienstil als comsunstartableBorderLine
booIean IsTopLineValid TopLine-Eigenschaft verwenden oder nicht
BorderLine BottomLine unterer Linienstil als comsunstartableBorderLine
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (21 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
booIean IsBottomLineValid BottomLine-Eigenschaft verwenden oder nicht
BorderLine LeftLine linker Linienstil als comsunstartableBorderLine
booIean IsLeftLineValid LeftLine-Eigenschaft verwenden oder nicht
BorderLine RightLine rechter Linienstil als comsunstartableBorderLine
booIean IsRightLineValid RightLine-Eigenschaft verwenden oder nicht
BorderLine HorizontalLineLinienstil der horizontalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsHorizontalLineValid HorizontalLine-Eigenschaft verwenden oder nicht
BorderLine VerticalLineLinienstil der vertikalen Trennlinien zwischen den einzelnen Zellen als comsunstartableBorderLine
booIean IsVerticalLineValid VerticalLine-Eigenschaft verwenden oder nicht
ShortInteger Distance Distanz zwischen der Linie und dem Inhalt
booIean IsDistanceValid Distance-Eigenschaft verwenden oder nicht
Die Linien-Eigenschaften sind alle ein Struct vom Typ comsunstartableBorderLine Wird ein Rahmen eines Zellbereiches gesetzt so entscheiden die horizontale unnd vertikale Linie ob ein Rahmen bloss um den ganzen Zellbereich oder um jede Zelle (Gitternetz) gezogen wird Horizontale und vertikale Linien definieren folglich die Trennlinien zwischen den Zellen eines Zellbereiches
Im folgenden Beispiel wird der Zellbereich B2D4 mit einem duumlnnen roten Rahmen umgeben Den Eigenschaften HorizontalLine und VerticalLine werden leere BorderLines zugeordnet was bewirkt dass keine Linie gezeichnet wird und auch einfach weggelassen werden kann
Sub zellRahmen Variable deklarieren Dim oZellBereich as Object Dim oRoteLinie as Object Dim oTableBorder as Object Zellbereich uumlber Name holen oZellBereich = ThisComponentSheets(0)getCellRangeByname( B2D4 )
BorderLine erzeugen oRoteLinie = CreateUnoStruct(comsunstartableBorderLine) Linien-Eigenschaften setzen With oRoteLinie Color = RGB( 255 0 0 ) InnerLineWidth = 0 OuterLineWidth = 8 LineDistance = 0 End With
Tabellenrahemn erzeugen oTableBorder = createUnoStruct(comsunstartableTableBorder) Eigenschaften setzen With oTableBorder TopLine = oRoteLinie IsTopLineValid = True BottomLine = oRoteLinie IsBottomLineValid = True
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (22 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
LeftLine = oRoteLinie IsLeftLineValid = True RightLine = oRoteLinie IsRightLineValid = True HorizontalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsHorizontalLineValid = True VerticalLine = _ CreateUnoStruct(comsunstartableBorderLine) IsVerticalLineValid = True Distance = 0 IsDistanceValid = True End With
Rahmen zuweisen oZellBereichTableBorder = oTableBorderEnd Sub
7 Selektionen in Calc
71 Selektionen behandeln
Um an die aktuelle Selektion in einem Calc-Dokument zu erhalten benutzt man die Funktion getCurrentSelection() des Tabellendokumentes
Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen selektion = calcDokumentgetCurrentSelection()
In Calc-Dokumenten koumlnnen drei verschiedene Selektionen unterschieden werden
Selektion Ruumlckgabewert von getCurrentSelection()
eine einzelne Zelle comsunstarsheetSheetCell
ein einzelner Zellbereich comsunstarsheetSheetCellRange
mehrere Zellbereiche comsunstarsheetSheetCellRanges
Natuumlrlich ist es manchmal notwendig den Typ der Selektion zu kennen Dies erreichen Sie mit einem Test nach den unterstuumltzten Services
Sub selektierteZellen Dim calcDokument as Object Dim selektion as Object aktuelles Dokument holen calcDokument = ThisComponent aktuelle Selektion holen
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (23 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
selektion = calcDokumentgetCurrentSelection() Selektion kann null() eine einzelne Zelle ein einzelner oder mehrere Zellbereiche sein If IsNull( selektion ) then keine Selektion (uumlberhaupt moumlglich wie) MsgBox Keine Selektion
Elseif selektionsupportsService( _ comsunstarsheetSheetCell ) then einzelne Zelle selektiert MsgBox Einzelne Zelle selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRange ) then einzelner Zellbereich selektiert MsgBox Einzelner Zellbereich selektiert
Elseif selektionsupportsService( _ comsunstarsheetSheetCellRanges ) then mehrere Zellbereiche selektiert MsgBox Mehrere Zellbereiche selektiert End IfEnd Sub
Ist der Typ der Selektion einmal bestimmt kann auf die Interfaces und Eigenschaften der entsprechenden Objekt-Typen zugegriffen werden In Tabelle 2 sind die Objekt-Typen aufgefuumlhrt welche bei den verschiedenen Selektionen zuruumlckgegeben werden In den beiden ersten Faumlllen der SheetCell- und SheetCellRange-Objekte kann mit diesen analog zu den Beispielen in Kapitel zu den Zellen bzw Zellbereichen verfahren werden
Ein Spezialfall ist die Selektion von mehreren Zellbereichen mittels der Ctrl-Taste Das Container-Objekt SheetCellRanges enthaumllt dabei die einzelnen Zellbereiche Im folgenden soll nur der Fall der Mehrfachselektion mit einem Codebeispiel ausgefuumlhrt werden Fuumlr die anderen Faumllle sei auf die entsprechenden Kapitel uumlber Calc-Zellen und Zellbereiche verwiesen
CellRanges unterstuumltzen die Interfaces comsunstarcontainerXIndexAccess und comsunstarcontainerXEnumerationAccess welche Zugriff auf die enthaltenen Zellbereiche erlauben Im folgenden Beispiel wird uumlber das XIndexAccess-Interface auf die Zellbereiche zugegriffen
Sub mehrfachSelektion Dim selektion as Object Dim ausgabe as String Dim zellBereichAddresse as Object selektion = ThisComponentgetCurrentSelection() If Not( selektionsupportsService( _ comsunstarsheetSheetCellRanges ) ) then MsgBox keine Mehrfachselektion Exit Sub End If ausgabe = Mehrere Zellbereiche ausgewaumlhlt amp chr(13) Anzahl der Zellbereiche
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (24 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
ausgabe = ausgabe amp Anzahl Bereiche amp _ selektiongetCount() amp chr(13) Schleife durch alle Zellbereiche for i=0 To selektiongetCount()-1 Adresse des Zellbereiches holen zellBereichAddresse = selektion_ getByIndex(i)getRangeAddress() Adressinfo an Ausgabe anfuumlgen ausgabe = ausgabe amp _ zellBereichAddresseStartColumn amp amp _ zellBereichAddresseStartRow amp -gt amp _ zellBereichAddresseEndColumn amp amp _ zellBereichAddresseEndRow amp chr(13) Next i Ausgabe der Informationen uumlber MessageBox MsgBox ausgabe End Sub
72 Zellbereiche selektieren
Um einen Zellbereich zu selektieren dient die Methode select( cellRange ) des currentControllers Fuumlr den direkten Aufruf bedient man sich demnach ThisComponentcurrentControllerselect( cellRange )
Sub zellbereichSelektieren Variable deklarieren Dim oZellbereich as Object Zellbereich uumlber Name holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1B10 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich ) warten bis OK gedruumlckt wird MsgBox weiter einzelne Zelle uumlber Bereichsname holen oZellbereich = ThisComponentSheets(0)getCellRangeByName( A1 ) und selektieren ThisComponentcurrentControllerselect( oZellbereich )End Sub
8 Notizen in Calc-DokumentenEin Calc-Dokument kann Notizen (Annotations) enthalten die einer Zelle zugeordnet sind und uumlber oZellegetAnnotation() angesprochen werden kann Zudem bietet ein Tabellenblatt (Sheet) uumlber das Feld Annotations einen comsunstarcontainerXIndexAccess uumlber alle Notizen eine Blattes
Eine Notiz bzw das Interface comsunstarsheetXSheetAnnotation bietet folgende Methoden an
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (25 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
comsunstarsheetXSheetAnnotation
PositionDie comsunstartableCellAddress der Zelle zu welcher die Notiz zugeordnet ist
Author (nur lesen) Der Autor der Notiz
Date (nur lesen) Das Datum als Zeichenkette
IsVisible Gibt TRUE zuruumlck wenn sichtbar andernfalls FALSE
setIsVisible( boolean ) Methode um Notiz anzuzeigen bzw auszublenden
getParent() gibt die Zelle zuruumlck in der die Notiz enthalten ist
81 Zugriff auf Notizen uumlber Tabellenblatt
Das folgende Beispiel iteriert uumlber alle Notizen des ersten Tabellenblattes eine Calc-Dokumentes
Sub notizenEinesTabellenblattes Variable deklarieren Dim oNotizen as Object Dim oNotiz as Object Dim oZelle as Object Dim nCounter as Integer Dim sAusgabe as String XIndexAccess fuumlr Notizen (Annotations) des Tabellenblattes oNotizen = ThisComponentSheets(0)Annotations for nCounter = 0 To oNotizenCount - 1 Notiz uumlber Index holen oNotiz = oNotizengetByIndex( nCounter ) Notizangaben ausgeben sAusgabe = Notiz amp _ oNotizString amp chr(13) sAusgabe = sAusgabe amp Autor amp _ oNotizAuthor amp chr(13) sAusgabe = sAusgabe amp Datum amp _ oNotizDate amp chr(13) die Zelle in der die Notiz enthalten ist oZelle = oNotizgetParent() Zelladresse ermitteln sAusgabe = sAusgabe amp Zelle amp _ oZelleCellAddressColumn amp amp _ oZelleCellAddressRow Notiz einblenden oNotizsetIsVisible( TRUE ) anzeige der Notizinfo an Benutzer MsgBox sAusgabe Notiz ausblenden oNotizsetIsVisible( FALSE )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (26 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Next nCounter If nCounter = 0 then MsgBox Keine Notiz in diesem Dokument End ifEnd Sub
Waumlhrend getPosition() eine Zelladresse liefert kann uumlber die Methode getParent() die uumlber das unterstuumltzte Interface comsunstarcontainerXChild zur Verfuumlgung gestellt wird direkt auf das Zell-Objekt zugegriffen werden
82 Notizen hinzufuumlgen und Zugriff uumlber Zellen
Neben dem Zugriff auf die Notizen uumlber das Tabellenblatt laumlsst sich eine Notiz auch uumlber die Zelle erreichen oZelleAnnotation liefert die Notiz Um eine neue Notiz zu erstellen reicht es aus die Eigenschaft von oZelleAnnotation zu setzten Auch wenn einer Zelle noch keine Notiz zugeordnet wurde erhaumllt man uumlber oZelleAnnotation eine Notiz Es ist nicht noumltig eine neue Instanz zu erzeugen
Sub NotizHinzufuegen Variable deklarieren Dim oZelle as Object Zelle A1 holen oZelle = ThisComponentSheets(0)getCellByPosition(00) Notiz einfuumlgen oder uumlberschreiben oZelleAnnotationString = Eine Notiz Notiz einblenden oZelleAnnotationIsVisible = TRUE warten bis OK gedruumlckt wird MsgBox weiter und wieder ausblenden oZelleAnnotationIsVisible = FALSEEnd Sub
9 Suchen und Ersetzen
91 SearchDescriptor und ReplaceDescriptor
Das Suchen undoder Ersetzen von Text in einem Calc-Dokument erfolgt uumlber den Service comsunstarutilSearchDescriptor bzw comsunstarutilReplaceDescriptor welche so konfiguriert werden koumlnnen wie das auch uumlber den Suchen und Ersetzen-Dialog von Calc gemacht werden koumlnnte
Eigenschaften des Services comsunstarutilXSearchDescriptor
String SearchStringDie Zeichenkette die das Suchmuster enthaumllt (Text Format oder Regular Expression)
Eigenschaften des Services comsunstarutilSearchDescriptor
Boolean SearchBackwards Sucht ruumlckwaumlrts wenn TRUE
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (27 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Boolean SearchCaseSensitiveGross-Kleinschreibung wird beachtet wenn TRUE
Boolean SearchWords Nur ganze Woumlrter wenn TRUE
Boolean SearchRegularExpressionSearchString wird als Regulaumlrer Ausdruck behandelt wenn TRUE
Boolean SearchStylesWenn TRUE wird nicht nach Text sondern nach dem Namen einer Absatzvorlage gesucht das auf den SearchString passt
Boolean SearchSimilarity Aumlhnlichkeitsuche wenn TRUE
Boolean SearchSimilarityRelaxAlle Aumlhnlichkeitsregeln miteinander anwenden wenn TRUE
shortInteger SearchSimilarityRemoveAnzahl der Zeichen welche ignoriert werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityAddAnzahl der Zeichen die hinzugefuumlgt werden sollen (Aumlhnlichkeitssuche)
shortInteger SearchSimilarityExchangeAnzahl der Zeichen die ersetzt werden sollen (Aumlhnlichkeitssuche)
Eigenschaften des Services comsunstarutilXReplaceDescriptor
String ReplaceString Die Zeichenkette die als Ersetzung dienen soll
92 Die Interfaces XSearchable und XReplaceable
Ein Search- bzw ReplaceDescriptor kann auf alle Objekte angewandt werden die die Interfaces comsunstarutilXReplaceable bzw comsunstarutilXSearchable exportieren Das sind insbesondere Zellen Zellbereiche und Tabellenblaumltter welche demnach folgende Methoden aufweisen
Methoden des Interfaces comsunstarutilXSearchable
createSearchDescriptor() erzeugt einen SearchDescriptor
findAll(oSearchDescription)durchsucht den enthaltenen Text nach allen Entsprechungen des spezifizierten Suchanforderung
findFirst(oSearchDescription)durchsucht den enthaltenen Text nach der ersten Entsprechungen des spezifizierten Suchanforderung
findNext(nPosition oSearchDescription)durchsucht den enthaltenen Text nach der naumlchsten Entsprechungen des spezifizierten Suchanforderung
Sub textInZellebereichSuchen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oSuchBeschreibung as Object Dim oTrefferZelle as Object Zellbereich holen in dem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1D40 )
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (28 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
SearchDescriptor erzeugen oSuchBeschreibung = oZelleOderBereichOderBlatt_ createSearchDescriptor() SearchDescriptor konfigurieren With oSuchBeschreibung SearchString = hallo SearchBackwards = False SearchCaseSensitive = True SearchWords = True SearchRegularExpression = False SearchStyles = False SearchSimilarity = False SearchSimilarityRelax = True SearchSimilarityRemove = 2 SearchSimilarityAdd = 2 SearchSimilarityExchange = 2 End With nach erster Trefferzelle suchen oTrefferZelle = oZelleOderBereichOderBlatt_ findFirst( oSuchBeschreibung ) Loop durch alle Trefferzellen Do While Not IsNull ( oTrefferZelle ) Treffer vermelden oTrefferZelleCellBackColor = RGB( 200 200 200 ) MsgBox Treffer in Zelle amp _ oTrefferZelleCellAddressColumn amp amp _ oTrefferZelleCellAddressRow weitersuchen oTrefferZelle = oZelleOderBereichOderBlatt_ findNext( oTrefferZelle oSuchBeschreibung ) LoopEnd Sub
Methoden des Interfaces comsunstarutilXReplaceable
createReplaceDescriptor() Erzeugt einen ReplaceDescriptor
replaceAll(SearchDescription) Ersetzt allen Text der der Suchanforderung entspricht
Sub SuchenUndErsetzen Variablen deklarieren Dim oZelleOderBereichOderBlatt as Object Dim oErsetzungsBeschreibung as Object Zellbereich holen indem ersetzt werden soll oZelleOderBereichOderBlatt = _ ThisComponentSheets(0)getCellRangeByName( A1B10 ) ReplaceDescriptor erzeugen oErsetzungsBeschreibung = _
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (29 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
oZelleOderBereichOderBlattcreateReplaceDescriptor() ReplaceDescriptor konfigurieren oErsetzungsBeschreibungSearchString = hallo oErsetzungsBeschreibungReplaceString = adieux oErsetzungsBeschreibungSearchBackwards = False oErsetzungsBeschreibungSearchCaseSensitive = True oErsetzungsBeschreibungSearchWords = True oErsetzungsBeschreibungSearchRegularExpression = False oErsetzungsBeschreibungSearchStyles = False oErsetzungsBeschreibungSearchSimilarity = False oErsetzungsBeschreibungSearchSimilarityRelax = True oErsetzungsBeschreibungSearchSimilarityRemove = 2 oErsetzungsBeschreibungSearchSimilarityAdd = 2 oErsetzungsBeschreibungSearchSimilarityExchange = 2
Ersetzung im Zellbereich durchfuumlhren oZelleOderBereichOderBlattreplaceAll( oErsetzungsBeschreibung )End Sub
10 Calc-Funktionen
101 Aufruf von eingebauten Calc-Funktionen
Die Funktionen welche in Calc zur Verfuumlgung stehen koumlnnen auch uumlber Ooo-Basic genutzt werden Zum einen besteht die Moumlglichkeit eine Funktion aufzurufen die Argumente der Funktion in einem Array mitzugeben und das Resultat der ausgefuumlhrten Funktion zB in eine Basic-Variable zu schreiben oder als Wert zuruumlckzugeben
Das folgende Beispiel ruft die SUM() Funktion auf (immer englisch als Standard-Sprache verwenden) Die numerischen Summanden werden in einem Array mitgegeben
Function funktionAufrufen ( value as Double ) As Double Variablen deklarieren Dim oFunktion as Object comsunstarsheetFunctionAccess holen oFunktion = createUnoService(comsunstarsheetFunctionAccess) als Argumente ein Array mit numerischen Werten Sinnloserweise wird als Summanden einfach zweimal das Argument value verwendet Dim aArgumente(1) As Variant aArgumente(0) = value aArgumente(1) = value Aufruf der SUM-Funktion mit Uumlbergabe des Arrays mit den Werten die zu addieren sind funktionAufrufen = oFunktioncallFunction( SUM aArgumente() )End Function
Die Argumente einer Funktion werden in einen Array gelegt und beim Aufruf der Methode oFunktioncallFunction( sName aArgumentArray() ) als zweiter Parameter mitgegeben Die Argumente die in einem Array an die Funktion
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (30 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
uumlbergeben werden koumlnnen folgende Datentypen aufweisen
Datentyp Funktions-Argumente
Long oder Double fuumlr einen numerischen Wert
String fuumlr eine Zeichenkette
Long[]raquoder Double[[] ein 2D-Array mit numerischen Werten
String[]raquo|ein 2D-Array mit Zeichenketten
Any[[] ein 2D-Array mit gemischten Datentypen
102 Eigene Calc-Funktionen in Basic
In Calc-Zellen lassen sich praktische Funktionen einfuumlgen welche Berechnungen mit Zellwerten anstellen und das Ergebnis als Wert in die Zelle schreiben Wem die verfuumlgbaren Funktionen nicht genug sind kann seine eigenen Funktionen in OpenOfficeorg-Basic schreiben und sie in der bekannten Form =meinefunktion(arg1 agr2) in einer Zelle verwenden
Grundsaumltzlich koumlnnen Argumente einer Funktion in einer Calc-Zelle drei Auspraumlgungen haben
Argumententyp Beschreibung Werte in Basic
=meineFunktion(hallo ooo2355)eingetippte Zeichenketten und numerische Werte
Zeichenkette oder numerischer Wert
=meineFunktion(A1) Referenzen auf einzelne Zellen Zeichenkette oder numerischer Wert
=meineFunktion(A1B10) Referenzen auf Zellbereiche 2D-Array
Im folgenden Beispiel wird die Uumlbergabe des Argumentes vArgument der Funktion Argument in der Zelle an die Basic-Funktion Argument demonstriert Ein Argument wird wie in der Tabelle aufgefuumlhrt immer als numerischer Wert Zeichenkette oder zweidimensionaler Array uumlbergeben
argument muss as Variant sein Function Argument ( vArgument as Variant ) Variablen deklarieren Dim sRueckgabeWert As String if IsMissing(vArgument) then sRueckgabeWert = Argument fehlt Elseif IsArray(vArgument) then sRueckgabeWert = Ein Array mit amp UBound(vArgument 1) amp _ Zeilen und amp UBound(vArgument 2) amp Spalten Elseif IsNumeric( vArgument ) then sRueckgabeWert = Numerisch amp vArgument else sRueckgabeWert = Zeichenkette amp vArgument End if Argument = sRueckgabeWertEnd Function
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (31 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Wird ein Argument eingetippt oder handelt es sich um eine Referenz auf eine Zelle so wird der Wert nach meinen Versuchen immer in eine Zeichenkette oder einen numerischen Wert transformiert Zellinhalte wie WAHR und FALSCH oder Zellen mit Datumsformat werden als numerische Werte repraumlsentiert und nicht mit den Datentypen Boolean bzw einem Datums-Objekt uumlbergeben
Wert in der Calc-Zelle Typ der Basic-Variable Wert
Text String zB Elefanten sind grau
Numerisch Numerisch zB 2234 oder 0222
Datum Numerisch31121899-gt 1 111900 -gt 2 111970 -gt 25569 211970 -gt 25570
FALSCHWAHR Numerisch 0 oder 1
Leere Zelle Numerisch 0
Folgendes Code-Beispiel demonstriert die Konvertierung eines Long-Wertes in ein Date-Objekt
Sub ZumDatumKonvertieren ( nDatum as Long ) Variable deklarieren Dim dDatum as Date Datum aus Long-Variable konvertieren dDatum = CDate( nDatum ) Ausgabe an Benutzer MsgBox dDatumEnd Sub
Als Konsequenz dieses pass-by-value ergibt sich dass in Calc-Funktionen die in Basic implementiert werden keine Moumlglichkeit besteht auf das Zellobjekt zuzugreifen Der Wert wird ohne Information auf seine Quelle uumlbergeben womit keine Manipulation der Zelleigenschaften (Hintergrund Textformatierung etc) moumlglich sind Der Ruumlckgabewert der Basic-Funktion (der in die Zelle eingetragen wird) ist die einzige Moumlglichkeit auf die Zelle Einfluss zu nehmen in der die Funktion aufgerufen wurde
Ein moumlglicher Workaround waumlre natuumlrlich die Zell- oder Zellbereichsadresse als Zeichenkette mitzugeben =meineFunktion( A1B10 ) So laumlsst sich der Zellbereich ermitteln und auf seine Eigenschaften zugreifen Einen impliziten Mechanismus fuumlr einen solchen Zugriff existiert jedoch in Basic nicht waumlhrend dies meines Wissens mittels eines Calc-Addins in Java oder C++ realisierbar ist
Das folgende Code-Beispiel stellt ein funktionales Aumlquivalent der =SUMME()-Funktion dar die als Basic-Funktion implementiert ist Sie demonstriert insbesondere die Uumlbergabe von Werten eine ganzen Zellbereiches (zB A1G10) die als zweidimensionaler Array (Matrix) uumlbergeben werden
Function summenTest ( vArgument as Variant ) ist das argument ein Array (Zellbereich) if Not IsArray(vArgument) then ist der einzelne Wert numerisch if IsNumeric( vArgument ) then Ruumlckgabewert ist gleich Eingabewert summenTest = vArgument else Summe ist gleich 0 wenn kein numerischer Wert uumlbergeben wurde summenTest = 0
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (32 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
end if funktion beenden exit function End If Dim nSumme as Long Dim i as Integer Dim j as Integer der spaumltere Ruumlckgabewert nSumme = 0 Schleife durch 1 Dimension (Zeilen) for i=1 to UBound(vArgument1) Schleife durch zweite Dimension (Spalten) for j=1 to UBound(vArgument2) numerisch if IsNumeric( vArgument(ij) ) then Wert dazuzaumlhlen nSumme = nSumme + vArgument(ij) end if next j next i Ruumlckagbewert in Zelle summenTest = nSummeEnd Function
11 Formulare in Calc-DokumentenIn Bezug auf Formulare weisen Calc-Dokumente gegenuumlber den anderen OpenOfficeorg-Dokumenten eine Besonderheit auf Formular befinden sich auf der DrawPage eine OfficeDokumentes Waumlhrend in Dokumenten von Writer Impress und Draw nur eine einzige DrawPage existiert verfuumlgt ein Calc-Dokument uumlber eine DrawPage fuumlr jedes Tabellenblatt Die Formulare und deren Element sind in Calc-Documente somit an ein Tabellenblatt und dessen DrawPage gebunden
Sub FormulareInCalc Variablen deklarieren Dim oTabellenblatt as Object Dim nCounter as Integer Dim nCounter2 as Integer Schleife durch alle Tabellenblaumltter For nCounter=0 To ThisComponentSheetsCount-1 Tabellenblatt holen oTabellenblatt = ThisComponentSheets(nCounter) If oTabellenblattDrawPageFormsCount gt 0 Then Schleife durch alle Formulare des Tabelleblattes For nCounter2=0 To oTabellenblattDrawPageFormsCount-1 gefundenes Formular melden MsgBox Formular amp oTabellenblatt_ DrawPageForms(nCounter2)Name amp _ in Tabellenblatt amp (nCounter+1) Next nCounter2
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (33 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
OpenOfficeorg-Basic Einstieg in die Programmierung mit Calc
Else kein Formular in diesem Tabellenblatt MsgBox kein Formular im Tabellenblatt amp (nCounter+1) End If Next nCounterEnd Sub
fileA|OpenOffice_org-Basic20Einstieg20in20die20Programmierung20mit20Calchtm (34 von 34) [03082004 225041]
Recommended