包含在尋找其他文件熱門支援資源 | 以 PDF 格式下載這本書 (1551 KB)
Kapitel 7 TabellendokumenteStarOffice Basic stellt eine umfangreiche Schnittstelle für die programmgesteuerte Erstellung und Bearbeitung von Tabellendokumenten zur Verfügung. In diesem Kapitel wird beschrieben, wie sich die betreffenden Dienste, Methoden und Eigenschaften von Tabellendokumenten steuern lassen. Im ersten Abschnitt wird der grundlegende Aufbau von Tabellendokumenten behandelt und gezeigt, wie auf den Inhalt einzelner Zellen zugegriffen und dieser bearbeitet werden kann. Der zweite Abschnitt konzentriert sich auf die effiziente Bearbeitung von Tabellendokumenten. Im Vordergrund stehen dabei der Dienst zum Bearbeiten von Zellbereichen und die Möglichkeiten zum Suchen und Ersetzen von Zellinhalten. Hinweis – Das Range-Objekt ermöglicht Ihnen die Adressierung jedes Tabellenbereichs. Sein Funktionsumfang wurde in der neuen API erweitert. Der Aufbau von TabellendokumentenDie Dokumentobjekte eines Tabellendokuments basieren auf dem Dienst com.sun.star.sheet.SpreadsheetDocument. Jedes dieser Dokumente kann mehrere Tabellen enthalten. In diesem Handbuch wird unter einem Tabellendokument, manchmal auch als Spreadsheet-Dokument bezeichnet, das gesamte Dokument verstanden, während Tabelle (oder Spreadsheet) eine in diesem Dokument enthaltene einzelne Tabelle bezeichnet. Hinweis – Die Terminologie für Tabellendokumente und ihren Inhalt unterscheidet sich zwischen VBA und StarOffice Basic. Während das Dokumentobjekt in VBA Workbook und seine einzelnen Seiten Worksheets heißen, lauten ihre Bezeichnungen in StarOffice Basic SpreadsheetDocument und Sheet. Tabellen (Spreadsheets)Die einzelnen Tabellen eines Tabellendokuments sind über die Liste Sheets verfügbar. Das folgende Beispiel zeigt, wie Sie entweder über die Nummer oder den Namen auf eine Tabelle zugreifen. Beispiel 1: Zugriff über die Nummer (Nummerierung beginnt mit 0) Dim Doc As Object Dim Sheet As Object Doc = StarDesktop.CurrentComponent Sheet = Doc. Sheets (0) Beispiel 2: Zugriff über den Namen Dim Doc As Object
Dim Sheet As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
In Beispiel 1 wird über ihre Nummer auf die Tabelle zugegriffen (die Zählung beginnt hier mit 0). Im zweiten Beispiel erfolgt der Zugriff auf die Tabelle über ihren Namen mit der Methode getByName. Das Sheet-Objekt, das mit der Methode getByName abgerufen wird, unterstützt den Dienst com.sun.star.sheet.Spreadsheet. Neben mehreren Schnittstellen zum Bearbeiten des Inhalts stellt dieser Dienst folgende Eigenschaften zur Verfügung: Erstellen, Löschen und Umbenennen von Tabellen (Sheets)Auch das Erstellen, Löschen und Umbenennen einzelner Tabellen erfolgt über die Sheets-Liste des Spreadsheet-Dokuments. Das folgende Beispiel prüft über die Methode hasByName, ob eine Tabelle mit dem Namen MySheet existiert. Falls ja, ermittelt die Methode eine entsprechende Objektreferenz über die Methode getByName und speichert diese dann in einer Variable in Sheet ab. Existiert die betreffende Tabelle noch nicht, so wird sie über den Aufruf createInstance erzeugt und mit der Methode insertByName in das Tabellendokument eingefügt. Dim Doc As Object
Dim Sheet As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
If Doc.Sheets.hasByName("MySheet") Then
Sheet = Doc.Sheets.getByName("MySheet")
Else
Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
Doc.Sheets.insertByName("MySheet", Sheet)
End If
Die Methoden getByName und insertByName stammen aus der Schnittstelle com.sun.star.container.XnameContainer, die in Kapitel 4, Einführung in die StarOffice API, beschrieben wird. Zeilen und SpaltenJede Tabelle enthält eine Liste ihrer Zeilen und Spalten. Sie sind über die Eigenschaften Rows beziehungsweise Columns des Tabellenobjekts verfügbar und unterstützen die Dienste com.sun.star.table.TableColumns beziehungsweise com.sun.star.table.TableRows. Das folgende Beispiel erzeugt zwei Objekte, die auf die erste Zeile und die erste Spalte einer Tabelle verweisen, und speichert diese Referenzen in den Objektvariablen FirstCol und FirstRow. Dim Doc As Object Dim Sheet As Object Dim FirstRow As Object Dim FirstCol As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) FirstCol = Sheet.Columns(0) FirstRow = Sheet.Rows(0) Die Spaltenobjekte unterstützen den Dienst com.sun.star.table.TableColumn, der folgende Eigenschaften bereitstellt:
Die Breite einer Spalte wird nur optimiert, wenn die Eigenschaft OptimalWidth auf True festgelegt ist. Wird die Breite einer einzelnen Zelle geändert, bleibt die Breite der Spalte, in der sich die Zelle befindet, unverändert. Funktional handelt es sich bei OptimalWidth also eher um eine Methode als um eine Eigenschaft. Die Zeilenobjekte basieren auf dem Dienst com.sun.star.table.RowColumn, der folgende Eigenschaften bereitstellt:
Wenn die Eigenschaft OptimalHeight einer Zeile auf den Wert True festgelegt ist, ändert sich die Zeilenhöhe automatisch, wenn die Höhe einer Zelle in der Zeile geändert wird. Die automatische Optimierung bleibt so lange aktiv, bis der Zeile über die Eigenschaft Height eine absolute Höhe zugewiesen wird. Folgendes Beispiel aktiviert die automatische Höhenoptimierung für die ersten fünf Zeilen in der Tabelle und blendet die zweite Spalte aus. Dim Doc As Object Dim Sheet As Object Dim Row As Object Dim Col As Object Dim I As Integer Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) For I = 0 To 4 Row = Sheet.Rows(I) Row.OptimalHeight = True Next I Col = Sheet.Columns(1) Col.IsVisible = False Hinweis – Auf die Listen Rows und Columns kann über einen Index in StarOffice Basic zugegriffen werden. Anders als in VBA hat die erste Spalte jedoch den Index 0 und nicht den Index 1. Einfügen und Löschen von Zeilen und SpaltenDie Objekte Rows und Columns einer Tabelle können sowohl auf vorhandene Zeilen und Spalten zugreifen und sie löschen als auch neue einfügen. Dim Doc As Object Dim Sheet As Object Dim NewColumn As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Sheet.Columns.insertByIndex(3, 1) Sheet.Columns.removeByIndex(5, 1) Das Beispiel fügt über die Methode insertByIndex an der vierten Spaltenposition in der Tabelle eine neue Spalte ein (Index 3, da Nummerierung mit 0 beginnt). Der zweite Parameter gibt die Anzahl der einzufügenden Spalten an (im Beispiel eine). Die Methode removeByIndex löscht die sechste Spalte (Index 5). Auch hier gibt der zweite Parameter die Anzahl der zu löschenden Spalten an. Die Methoden zum Einfügen und Löschen von Zeilen über das Rows-Objekt arbeiten auf dieselbe Weise wie die dargestellten Methoden zur Bearbeitung von Spalten über das Columns-Objekt. ZellenEine Tabelle setzt sich aus einer zweidimensionalen Liste mit Zellen zusammen. Jede Zelle wird durch ihre X- und Y-Position in Bezug auf die oberste linke Zelle mit der Position (0,0) definiert. Das folgende Beispiel erzeugt ein Objekt, das auf die oberste linke Zelle verweist und darin Text einfügt: Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(0, 0) Cell.String = "Test" Zusätzlich zu den numerischen Koordinaten hat jede Zelle in einer Tabelle einen Namen, zum Beispiel wird die oberste linke Zelle (0,0) einer Tabelle mit A1 bezeichnet. Der Buchstabe A steht dabei für die Spalte und die Ziffer 1 für die Zeile. Es ist wichtig, den Namen und die Position einer Zelle nicht zu verwechseln, weil die Zählung der Zeilen für den Namen mit 1 beginnt, die für die Position jedoch mit 0. Eine Tabellenzelle kann in StarOffice leer sein oder Text, Zahlen oder Formeln enthalten. Der Zellentyp wird dabei nicht über den darin gespeicherten Inhalt bestimmt, sondern über die für den Eintrag verwendete Objekt-Eigenschaft. Zahlen lassen sich über die Eigenschaft Value einfügen und auslesen, Text über die Eigenschaft String und Formeln über die Eigenschaft Formula. Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(0, 0) Cell.Value = 100 Cell = Sheet.getCellByPosition(0, 1) Cell.String = "Test" Cell = Sheet.getCellByPosition(0, 2) Cell.Formula = "=A1" Das Beispiel fügt in die Felder A1 bis A3 eine Zahl, einen Text und eine Formel ein. Hinweis – Die Eigenschaften Value, String und Formula ersetzen die Methode PutCell zum Setzen der Werte einer Tabellenzelle. StarOffice verarbeitet Zellinhalte, die mit der Eigenschaft String eingegeben werden, als Text, sogar wenn es sich bei dem Inhalt um eine Zahl handelt. Zahlen werden in Zellen links- statt rechtsbündig ausgerichtet. Aber auch beim Einsatz von Formeln ist auf den Unterschied zwischen Text und Zahlen zu achten: Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(0, 0) Cell.Value = 100 Cell = Sheet.getCellByPosition(0, 1) Cell.String = 1000 Cell = Sheet.getCellByPosition(0, 2) Cell.Formula = "=A1+A2" MsgBox Cell.Value Obwohl die Zelle A1 den Wert 100 und die Zelle A2 den Wert 1000 enthält, gibt die Formel A1+A2 den Wert 100 zurück. Ursache hierfür ist, dass der Inhalt von Zelle A2 als String (Zeichenfolge) und nicht als Zahl eingegeben wurde. Zur Überprüfung, ob eine Zelle eine Zahl oder eine Zeichenfolge enthält, verwenden Sie die Eigenschaft Type: Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 1000 Select Case Cell.Type Case com.sun.star.table.CellContentType.EMPTY MsgBox "Content: Empty" Case com.sun.star.table.CellContentType.VALUE MsgBox "Content: Value" Case com.sun.star.table.CellContentType.TEXT MsgBox "Content: Text" Case com.sun.star.table.CellContentType.FORMULA MsgBox "Content: Formula" End Select Die Eigenschaft Cell.Type gibt für die Aufzählung com.sun.star.table.CellContentType einen Wert zurück, der den Inhaltstyp einer Zelle identifiziert. Mögliche Werte sind:
Einfügen, Löschen, Kopieren und Verschieben von ZellenNeben der Möglichkeit zum direkten Ändern von Zellinhalten bietet StarOffice Calc außerdem eine Schnittstelle, die das Einfügen, Löschen, Kopieren und Zusammenführen von Zellen gestattet. Die über das Spreadsheet-Objekt verfügbare Schnittstelle (com.sun.star.sheet.XRangeMovement) stellt zum Ändern von Zellinhalten vier Methoden zur Verfügung. Die Methode insertCell wird zum Einfügen von Zellen in eine Tabelle verwendet. Dim Doc As Object Dim Sheet As Object Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) CellRangeAddress.Sheet = 0 CellRangeAddress.StartColumn = 1 CellRangeAddress.StartRow = 1 CellRangeAddress.EndColumn = 2 CellRangeAddress.EndRow = 2 Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN) Das Beispiel fügt in der ersten Tabelle (Nummer 0) des Tabellendokuments in der zweiten Spalte und Zeile (tragen jeweils die Nummer 1) einen zwei Zeilen hohen und zwei Spalten breiten Zellbereich ein. Alle in dem angegebenen Zellbereich bereits vorhandenen Werte werden unter den Bereich verschoben. Um den einzufügenden Zellbereich zu definieren, verwenden Sie die Struktur com.sun.star.table.CellRangeAddress. Diese Struktur enthält folgende Werte:
Die ausgefüllte CellRangeAddress-Struktur muss der Methode insertCells als erster Parameter übergeben werden. Der zweite Parameter von insertCells enthält einen Wert der Aufzählung com.sun.star.sheet.CellInsertMode und definiert, wie die Werte zu verarbeiten sind, die sich vor der Einfügeposition befinden. Die Aufzählung CellInsertMode erkennt folgende Werte:
Die Methode removeRange ist das Gegenstück zur Methode insertCells. Diese Methode löscht den in der Struktur CellRangeAddress definierten Bereich aus der Tabelle. Dim Doc As Object Dim Sheet As Object Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) CellRangeAddress.Sheet = 0 CellRangeAddress.StartColumn = 1 CellRangeAddress.StartRow = 1 CellRangeAddress.EndColumn = 2 CellRangeAddress.EndRow = 2 Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.UP) Dieses Beispiel entfernt den Zellbereich B2:C3 aus der Tabelle und verschiebt dann die darunter liegenden Zellen um zwei Zeilen nach oben. Die Art des Löschens wird über einen der folgenden Werte aus der Aufzählung com.sun.star.sheet.CellDeleteMode definiert:
Die Schnittstelle XRangeMovement bietet zwei zusätzliche Methoden zum Verschieben (moveRange) oder Kopieren (copyRange) von Zellbereichen. Das folgende Beispiel verschiebt den Bereich B2:C3 so, dass er an der Position A6 beginnt: Dim Doc As Object Dim Sheet As Object Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress Dim CellAddress As New com.sun.star.table.CellAddress Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) CellRangeAddress.Sheet = 0 CellRangeAddress.StartColumn = 1 CellRangeAddress.StartRow = 1 CellRangeAddress.EndColumn = 2 CellRangeAddress.EndRow = 2 CellAddress.Sheet = 0 CellAddress.Column = 0 CellAddress.Row = 5 Sheet.moveRange(CellAddress, CellRangeAddress) Zusätzlich zu der Struktur CellRangeAdress erwartet die Methode moveRange eine Struktur com.sun.star.table.CellAddress, die den Ursprung des Zielbereichs der Verschiebung definiert. Die Methode CellAddress stellt folgende Werte zur Verfügung:
Die Zellinhalte im Zielbereich werden immer von der Methode moveRange überschrieben. Anders als bei der Methode InsertCells, wird in der Methode removeRange kein Parameter zur Durchführung automatischer Verschiebungen bereitgestellt. Die Methode copyRange arbeitet auf dieselbe Weise wie die Methode moveRange, mit der Ausnahme, dass copyRange eine Kopie des Zellbereichs einfügt, statt ihn zu verschieben. Hinweis – Hinsichtlich ihrer Funktion sind die StarOffice Basic-Methoden insertCell, removeRange und copyRange mit den VBA-Methoden Range.Insert, Range.Delete und Range.Copy vergleichbar. Während sie in VBA auf das entsprechende Range-Objekt angewendet werden, werden sie in StarOffice Basic auf das verknüpfte Sheet-Objekt angewendet. FormatierenEin Tabellendokument stellt Eigenschaften und Methoden zum Formatieren von Zellen und Seiten zur Verfügung. ZelleigenschaftenZum Formatieren von Zellen stehen zahlreiche Optionen zur Verfügung, beispielsweise das Festlegen von Schriftart und -größe für den Text. Jede Zelle unterstützt die Dienste com.sun.star.style.CharacterProperties und com.sun.star.style.ParagraphProperties, deren Haupteigenschaften in Kapitel 6, Textdokumente, beschrieben werden. Spezielle Zellformatierungen werden von dem Dienst com.sun.star.table.CellProperties verarbeitet. Die Haupteigenschaften dieses Dienstes werden in den folgenden Abschnitten vorgestellt. Alle der angeführten Eigenschaften können auf einzelne Zellen sowie auf Zellbereiche angewendet werden. Hinweis – Das CellProperties-Objekt der StarOffice API ist mit dem Interior-Objekt in VBA vergleichbar, das ebenfalls zellspezifische Eigenschaften definiert. Hintergrundfarbe und SchattenDer Dienst com.sun.star.table.CellProperties stellt folgende Eigenschaften zum Definieren von Hintergrundfarben und Schatten bereit:
Die Struktur com.sun.star.table.ShadowFormat sowie die Detailangaben für Zellschatten sind wie folgt aufgebaut:
Das folgende Beispiel schreibt die Zahl 1000 in die Zelle B2, ändert die Hintergrundfarbe über die Eigenschaft CellBackColor zu Rot und legt dann einen hellgrauen Schatten für die Zelle an, der um 1 mm nach links unten verschoben ist. Dim Doc As Object Dim Sheet As Object Dim Cell As Object Dim ShadowFormat As New com.sun.star.table.ShadowFormat Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 1000 Cell.CellBackColor = RGB(255, 0, 0) ShadowFormat.Location = com.sun.star.table.ShadowLocation.BOTTOM_RIGHT ShadowFormat.ShadowWidth = 100 ShadowFormat.Color = RGB(160, 160, 160) Cell.ShadowFormat = ShadowFormat AusrichtungStarOffice bietet verschiedene Funktionen, mit denen die Ausrichtung von Text in einer Tabellenzelle geändert werden kann. Zur Definition der horizontalen und vertikalen Ausrichtung eines Texts stehen folgende Eigenschaften zur Verfügung:
Das folgende Beispiel zeigt, wie der Inhalt einer Zelle "gestapelt" werden kann, so dass die einzelnen Zeichen in der linken oberen Ecke der Zelle eins unter dem anderen angezeigt werden. Die Zeichen werden hierbei nicht gedreht. Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 1000 Cell.HoriJustify = com.sun.star.table.CellHoriJustify.LEFT Cell.VertJustify = com.sun.star.table.CellVertJustify.TOP Cell.Orientation = com.sun.star.table.CellOrientation.STACKED Zahlen-, Datums- und TextformatStarOffice bietet eine ganze Reihe von vordefinierten Datums- und Uhrzeitformaten. Jedes dieser Formate verfügt über eine interne Nummer, über die das jeweilige Format mit der Eigenschaft NumberFormat den Zellen zugewiesen wird. StarOffice stellt die Methoden queryKey und addNew zur Verfügung, mit denen Sie auf vorhandene Zahlenformate zugreifen sowie eigene erstellen können. Der Zugriff auf die Methoden erfolgt mit folgendem Objekt-Aufruf: NumberFormats = Doc.NumberFormats Ein Format wird über einen Format-String angegeben, der ähnlich aufgebaut ist wie die Format-Funktion von StarOffice Basic. Es existiert jedoch ein wesentlicher Unterschied: Während der Format-Befehl immer englische Abkürzungen und Dezimal- beziehungsweise Tausendertrennzeichen erwartet, müssen in der Syntax eines Format-Befehls für das NumberFormats-Objekt die landesspezifischen Abkürzungen verwendet werden. Das folgende Beispiel formatiert die Zelle B2 so, dass Zahlen mit drei Dezimalstellen und Kommas als Tausendertrennzeichen angezeigt werden. Dim Doc As Object Dim Sheet As Object Dim Cell As Object Dim NumberFormats As Object Dim NumberFormatString As String Dim NumberFormatId As Long Dim LocalSettings As New com.sun.star.lang.Locale Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) Cell.Value = 23400.3523565 LocalSettings.Language = "en" LocalSettings.Country = "us" NumberFormats = Doc.NumberFormats NumberFormatString = "#,##0.000" NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True) If NumberFormatId = -1 Then NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings) End If MsgBox NumberFormatId Cell.NumberFormat = NumberFormatId In dem Dialogfeld Zellen formatieren in StarOffice Calc erhalten Sie einen Überblick über die verschiedenen Formatierungsoptionen für Zellen. SeiteneigenschaftenSeiteneigenschaften sind die Formatierungsoptionen, die sowohl den Dokumentinhalt auf einer Seite positionieren als auch die visuellen Elemente, die auf allen Seiten wiederholt werden. Hierzu zählen unter anderem
Das Vorgehen bei der Definition von Seitenformaten unterscheidet sich von anderen Arten der Formatierung. Während Zell-, Absatz- und Zeichenelemente direkt formatiert werden können, können Seitenformatierungen auch definiert und unter Verwendung von Seitenvorlagen indirekt angewendet werden. So werden beispielsweise Kopf- und Fußzeilen in eine Seitenvorlage aufgenommen. In den folgenden Abschnitten werden die Hauptformatierungsoptionen für Tabellendokumentseiten beschrieben. Viele der beschriebenen Vorlagen stehen auch für Textdokumente zur Verfügung. Die Seiteneigenschaften, die für beide Dokumentarten gültig sind, sind im Dienst com.sun.star.style.PageProperties definiert. Die Seiteneigenschaften, die nur für Tabellendokumente gültig sind, sind im Dienst com.sun.star.sheet.TablePageStyle definiert. Hinweis – Die Seiteneigenschaften (Seitenränder, Rahmen usw.) für ein Microsoft Office-Dokument werden auf der Ebene der Objekte Worksheet (Excel) beziehungsweise Document (Word) über ein PageSetup-Objekt definiert. In StarOffice erfolgt die Definition der Seiteneigenschaften hingegen über eine Seitenvorlage, die wiederum mit dem zugehörigen Dokument verknüpft ist. SeitenhintergrundDer Dienst Dcom.sun.star.style.PageProperties definiert folgende Eigenschaften für einen Seitenhintergrund:
SeitenformatDie Definition des Seitenformats erfolgt über folgende Eigenschaften des Dienstes com.sun.star.style.PageProperties: Das folgende Beispiel setzt die Seitengröße der Seitenvorlage "Default" (Standard) auf das Format DIN A5 quer (Höhe 14,8 cm, Breite 21 cm): Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")
DefPage.IsLandscape = True
DefPage.Width = 21000
DefPage.Height = 14800
Seitenrand, -rahmen und -schattenDer Dienst com.sun.star.style.PageProperties stellt folgende Eigenschaften zum Anpassen von Seitenrändern sowie Rahmen und Schatten bereit:
Das folgende Beispiel setzt den linken und rechten Rand der Seitenvorlage "Default" (Standard) auf 1 Zentimeter. Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")
DefPage.LeftMargin = 1000
DefPage.RightMargin = 1000
Kopf- und FußzeilenDie Kopf- und Fußzeilen eines Dokuments gehören zu den Seiteneigenschaften und werden über den Dienst com.sun.star.style.PageProperties definiert. Die Eigenschaften zum Formatieren von Kopfzeilen sind:
Die Eigenschaften zum Formatieren von Fußzeilen sind:
Ändern des Texts in Kopf- und FußzeilenAuf den Inhalt von Kopf- und Fußzeilen in einem Tabellendokument kann über folgende Eigenschaften zugegriffen werden:
Wenn Sie keine Unterscheidung zwischen Kopf- und Fußzeilen für gerade und ungerade Seiten benötigen (die Eigenschaft FooterIsShared hat den Wert False), setzen Sie die Eigenschaften für Kopf- und Fußzeilen auf ungeraden Seiten. Alle genannten Objekte geben ein Objekt zurück, das den Dienst com.sun.star.sheet.HeaderFooterContent unterstützt. Dieser Dienst stellt über die (unechten) Eigenschaften LeftText, CenterText und RightText drei Textelemente für die Kopf- und Fußzeilen von StarOffice Calc zur Verfügung. Das folgende Beispiel schreibt in das linke Textfeld der Kopfzeile der Vorlage "Default" (Standard) den Wert "Nur ein Test.". Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Dim HText As Object
Dim HContent As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")
DefPage.HeaderIsOn = True
HContent = DefPage.RightPageHeaderContent
HText = HContent.LeftText
HText.String = "Nur ein Test."
DefPage.RightPageHeaderContent = HContent
Beachten Sie die letzte Zeile des Beispiels: Nach dem Ändern des Texts muss das TextContent-Objekt erneut der Kopfzeile zugewiesen werden, damit die Änderung wirksam wird. Für Textdokumente (StarOffice Writer) steht ein anderer Mechanismus zum Ändern der Texte in Kopf- und Fußzeilen zur Verfügung, da diese aus einem einzigen Textblock bestehen. Folgende Eigenschaften sind im Dienst com.sun.star.style.PageProperties definiert:
Das folgende Beispiel erstellt in der Vorlage "Default" (Standard) für Textdokumente eine Kopfzeile und fügt dieser den Text "Nur ein Test." hinzu. Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Dim HText As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")
DefPage.HeaderIsOn = True
HText = DefPage.HeaderText
HText.String = "Nur ein Test."
Der Zugriff erfolgt in diesem Fall statt über das HeaderFooterContent-Objekt direkt über die Eigenschaft HeaderText der Seitenvorlage. Zentrieren (nur Tabellendokumente)Der ausschließlich in den Seitenvorlagen von StarOffice Calc zum Einsatz kommende Dienst com.sun.star.sheet.TablePageStyle gestattet es, zu druckende Zellbereiche auf der Seite zu zentrieren. Dieser Dienst stellt folgende Eigenschaften zur Verfügung:
Definieren von auszudruckenden Elementen (nur Tabellendokumente)Beim Formatieren von Tabellen können Sie definieren, ob Seitenelemente angezeigt werden sollen. Hierzu stellt der Dienst com.sun.star.sheet.TablePageStyle folgende Eigenschaften bereit:
Effizientes Bearbeiten von TabellendokumentenWährend im vorangegangenen Abschnitt der grundlegende Aufbau von Tabellendokumenten beschrieben wurde, behandelt der vorliegende Abschnitt die Dienste, mit denen Sie unkompliziert auf einzelne Zellen oder Zellbereiche zugreifen können. ZellbereicheNeben einem Objekt für Einzelzellen (Dienst com.sun.star.table.Cell) stellt StarOffice außerdem Objekte zur Verfügung, die Zellbereiche darstellen. Die Erstellung solcher CellRange-Objekte erfolgt über den Aufruf getCellRangeByName des Spreadsheet-Objekts: Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("A1:C15")
Mit einem Doppelpunkt (:) wird ein Zellbereich in einem Tabellendokument festgelegt. So stellt beispielsweise A1:C15 alle Zellen in den Zeilen 1 bis 15 und in den Spalten A, B und C dar. Die Position einzelner Zellen innerhalb eines Zellbereichs lässt sich über die Methode getCellByPosition ermitteln, wobei die Koordinaten der obersten linken Zelle des Zellbereichs die Position (0, 0) besitzt. Das folgende Beispiel erstellt mit dieser Methode ein Objekt der Zelle C3. Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("B2:D4")
Cell = CellRange.GetCellByPosition(1, 1)
Formatieren von ZellbereichenWie bei einzelnen Zellen können Sie Formatierungen mit dem Dienst com.sun.star.table.CellProperties auch auf Zellbereiche anwenden. Weitere Informationen und Beispiele zu diesem Dienst finden sich im Abschnitt Formatieren. Rechnen mit ZellbereichenMit der Methode computeFunction können Sie mathematische Operationen an Zellbereichen vornehmen. ComputeFunction erwartet eine Konstante als Parameter, der die anzuwendende mathematische Funktion beschreibt. Die verknüpften Konstanten sind in der Aufzählung com.sun.star.sheet.GeneralFunction definiert. Folgende Werte stehen zur Verfügung:
Das folgende Beispiel berechnet den Mittelwert des Bereichs A1:C3 und gibt das Ergebnis in einem Meldungsfenster aus: Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("A1:C3")
MsgBox CellRange.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE)
Löschen von ZellinhaltenDie Methode clearContents vereinfacht den Vorgang des Löschens von Zellinhalten und Zellbereichen, indem sie einen bestimmten Inhaltstyp aus einem Zellbereich löscht. Das folgende Beispiel entfernt alle Zeichenfolgen sowie die direkten Formatierungsinformationen aus dem Bereich B2:C3. Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Dim Flags As Long
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
CellRange = Sheet.getCellRangeByName("B2:C3")
Flags = com.sun.star.sheet.CellFlags.STRING + _
com.sun.star.sheet.CellFlags.HARDATTR
CellRange.clearContents(Flags)
Die in clearContents angegebenen Flags stammen aus der Konstantenliste com.sun.star.sheet.CellFlags. Diese Liste stellt folgende Elemente bereit:
Die Konstanten können auch aufaddiert werden, um unter Verwendung eines Aufrufs von clearContents verschiedene Informationen zu löschen. Suchen und Ersetzen von ZellinhaltenTabellendokumente bieten ähnlich wie Textdokumente eine Funktion zum Suchen und Ersetzen. Die Deskriptor-Objekte zum Suchen und Ersetzen werden in Tabellendokumenten jedoch nicht direkt über das Dokumentobjekt erzeugt, sondern über die Sheets-Liste. Im Folgenden finden Sie ein Beispiel für einen Suchen- und Ersetzen-Vorgang: Dim Doc As Object Dim Sheet As Object Dim ReplaceDescriptor As Object Dim I As Integer Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) ReplaceDescriptor = Sheet.createReplaceDescriptor() ReplaceDescriptor.SearchString = "is" ReplaceDescriptor.ReplaceString = "was" For I = 0 to Doc.Sheets.Count - 1 Sheet = Doc.Sheets(I) Sheet.ReplaceAll(ReplaceDescriptor) Next I Dieses Beispiel erstellt mit Hilfe der ersten Seite des Dokuments einen ReplaceDescriptor und wendet diesen dann in einer Schleife auf alle Seiten an. |