Możliwe jest tworzenie spersonalizowanych raportów. Każde dane mogą być wyeksportowane do arkusza kalkulacyjnego lub dokumentu tekstowego z zastosowaniem styli, obrazów, tabel oraz zasad formatowania. Możliwe jest także użycie wykresów dla wyeksportowanych danych. Ten podrozdział opisuje jak tworzyć spersonalizowane raporty.
The MS Office and OpenOffice programs korzystają z tego samego API dlatego oddzielny opis nie jest konieczny. Pakiety MS Office oraz OpenOffice
Tworzenie nowego arkusza kalkulacyjnego jest łatwe. Poniższy skrypt przedstawia jak to zrobić
spreadsheet = Office.createSpreadsheet()
Dokumenty arkuszy kalkulacyjnych mogą być użyte w celu wykonania zadań w listy poniżej.
Tabela 5.2. Metody dla obiektów arkuszy kalkulacyjnych
Zadanie | Użycie metody |
---|---|
Umieszczenie danych tekstowych w pojedyńczej komórce | setCellValue(columnIndex, rowIndex, "text") |
Umieszczenie wartości liczbowych w pojedyńczej komórce | setCellValue(columnIndex, rowIndex, number) |
Umieszczenie formuły w pojedyńczej komórce | setCellValue(columnIndex, rowIndex, "formula") |
Umieszczenie tablicy w pojedyńczej komórce | setCellValue(columnIndex, rowIndex, dataArray)
Formuły nie mogą być umieszczne w ten sposób.
|
Określenie zakresu komórek | setStyle(spreadsheet.getCellRangeByName("cell-range"), spreadsheet.headerStyle)
Zobacz także Komórki oraz zakres komórek
oraz Predefiniowanie styli.
|
Scalanie zakresu komórek | mergeCells(spreadsheet.getCellRangeByName("cell-range"))
Zobacz także Komórki oraz zakres komórek.
|
Zwiekszenie wcięcia zawartości z zakresu komórek | incrementIndent(spreadsheet.getCellRangeByName("cell-range"), indentationLevel)
Zobacz także Komórki oraz zakres komórek.
|
Zmniejszenie wcięcia zawartości z zakresu komórek | decrementIndent(spreadsheet.getCellRangeByName("cell-range"), indentationLevel)
Zobacz także Komórki oraz zakres komórek.
|
Ustawienie szerokości komórki | setColumnWidth(columnIndex, newColumnWidth) |
Ustawienie optymalnej szerokości komórki | setOptimalColumnWidth(columnIndex) |
Wstawianie wykresów | zobacz Wstawianie Wykresów |
Wstawianie tabeli przestawnej | zobacz Wstawianie Tabeli Przestawnej |
Wstawianie nowego aktywnego arkusza | zobacz Zarządzanie Arkuszami |
MS Office korzysta z lokalnych nazw formuł, a OpenOffice nie, co ma wpływ na formuły jak SUM, MEAN, itd.
Wszystkie powyższe metody powinny być wywoływane jak w przykładzie poniżej:
spreadsheet.method(Parametr1, Parametr2, ... )
Gdy spreadsheet jest obiektem arkusza utworzonego za pomocą: SpreadsheetWrapper(officeConnection.createSpreadsheetDocument())
Patrz na podstawowe przykłady poniżej:
# Tworzenie obiektu dokumentu arkusza spreadsheet = Office.createSpreadsheet() # Wstawienie danych tekstowych w komórkę A1 spreadsheet.setCellValue(0,0, "Przykładowy tekst") # Wstawienie zmiennoprzecinkowej liczby w komórkę A2 spreadsheet.setCellValue(0,1, 12.5) # Wstawienie liczby całkowitej w komórkę A3 spreadsheet.setCellValue(0,2, 100) # Wstawienie formuły z stylem headerStyle w komórkę A4 spreadsheet.setCellValue(0,3, "=A2*A3", spreadsheet.headerStyle)
Tabela może być wyeksportowana do arkusza dla dalszego przetwarzania. AdvancedMiner dostarcza metodę readTable, która wczytuje tabelę do pamięci jako dwuwymiarową tablicę. Tablica może być wykorzystana do wyeksportowania danych do arkusza. Jest to szybkim sposobem. (kod poniżej jest częścią skryptu instruktarzowego openoffice_import_data_PL.gy)
Starsze wersje arkuszy kalkulacyjnych posiadały ograniczenie liczby wierszy do 65000 oraz do 256 kolumn. MS Excel począwszy od wersji 2007 limity ma zwiększone do ponad miliona wierszy oraz szesnastu tysięcy kolumn.
Przykład 5.1. Eksportowanie danych do arkusza
# After the connection is established a new spreadsheet document # is created spreadsheet = Office.createSpreadsheet() # Create a new table using the standard table procedure table 'openoffice_test1': a b c d e 1 1 2 3 'ABC' 2 2 1 3 'ABC' 4 4 2 1 'DEF' 1 1 2 3 'ABC' 2 2 1 3 'ABC' 4 4 2 1 'DEF' 1 1 2 3 'ABC' 2 2 1 3 'ABC' 4 4 2 1 'DEF' # Now the table is available in the database, so we can import # it into OpenOffice # At first write the header... spreadsheet.setCellValue(0, 0, 'a') spreadsheet.setCellValue(1, 0, 'b') spreadsheet.setCellValue(2, 0, 'c') spreadsheet.setCellValue(3, 0, 'd') spreadsheet.setCellValue(4, 0, 'e') # ...and next write the data trans None <- 'openoffice_test1': $spreadsheet.setCellValue(0, __rowNumber__+1, a) $spreadsheet.setCellValue(1, __rowNumber__+1, b) $spreadsheet.setCellValue(2, __rowNumber__+1, c) $spreadsheet.setCellValue(3, __rowNumber__+1, d) $spreadsheet.setCellValue(4, __rowNumber__+1, e) # The task is done, but this is a very slow method and the user has # to know column names # There also is an optimized and fast method of reading a table into # openspreadsheet. # Add a new sheet to our spreadsheet document sheet1 = spreadsheet.newSheet("FastImport") # Read the table... data = tableRead('openoffice_test1') spreadsheet.setCellValue(0,0, data)
Skrypt powyżej otwiera plik z dwoma arkuszami, z których każdy zawiera dane z tabeli openoffice_test1.
Podczas pracy z arkuszami często zachodzi potrzeba zaznaczenia pojedynczej komórki lub zakresu komórek. Niektóre metody, jako parametr, również wymagają komórek lub zakresu. Pożądane zaznaczenie komórki, zakresu komórek można uzyskać w arkuszu przy użyciu następujących poleceń:
# Zaznaczenie komórki po pozycji(liczone od 0) sheet.getCellByPosition(0,0) # Zaznaczenie zakresu komórek po nazwie sheet.getCellRangeByName("A1:C5") # Zaznaczenie zakresu komórek po pozycji. sheet.getCellRangeByPosition(0, 0, 2, 4)
AdvancedMiner wspiera wstawianie wykresów w arkuszach kalkulacyjnych (dostępne tylko wykresy słupkowe)
Wykresy w arkuszach tworzone są przez dodanie elementu wykresu oraz konfiguracji ustawień
Przykład 5.2. Tworzenie wykresów w arkuszu
spreadsheet = Office.createSpreadsheet() # Prepare some data to write to the active sheet values = [ ['Value', 'Count'], ['5', 300], ['6', 102], ['7', 105], ['8', 15], ['9', 5], ['10', 45] ] # Writes the prepared data array to the sheet. Begining at the cell 0,0 (A1) spreadsheet.setCellValue(0,0, values) # Insert the chart chart = spreadsheet.addChart("unique_name") # Set where the source data is chart.setDataRanges( collection( [ spreadsheet.getCellRangeByPosition(0,0, 1, 6) ] ) ) # the data range can consist of separate ranges, so it is necessary to use collection([ range1, range2, ...]) syntax # The position and size of the chart is defined by another cell range chart.setPositionAndSize( spreadsheet.getCellRangeByPosition( 0, 7, 6, 14) ) # The first row is a header chart.setFirstColumnHeader( 1 ) # The first column contains data labels, so should be treated # as a header chart.setFirstColumnHeader( 1 )
Arkusz utworzony przez ten skrypt jest widoczny poniżej.
AdvancedMiner dostarcza funkcjonalność wstawiania tabel przestawnych w arkuszach kalkulacyjnych.
Przykład 5.3. Tworzenie tabeli przestawnej
# After the connection is established a new spreadsheet document # is created spreadsheet = Office.createSpreadsheet() # Create sample data table 'openoffice_test1': a b c d e 1 1 2 3 'ABC' 2 2 1 3 'ABC' 4 4 2 1 'DEF' 1 1 2 3 'ABC' 2 2 1 3 'ABC' 4 4 2 1 'DEF' 1 1 2 3 'ABC' 2 2 1 3 'ABC' 4 4 2 1 'DEF' # Export the data into a spreadsheet data = tableRead('openoffice_test1') # Write data array into the spreadsheet spreadsheet.setCellDataArray(0, 0, data) # Some properties of the data pilot have to be set before it can # be added to the spreadsheet dpp = DataPilotProperties() # Add column indexes which should be treated as columns dpp.addColumn(1) dpp.addColumn(2) dpp.addColumn(3) # Add a row index dpp.addRow(0) # Indicate which column should be used as the data for the # data pilot dpp.addData(4) # Specify the source data range... sourceCellRange = spreadsheet.getCurrentSheet().getCellRangeByPosition(0,0, 4, 9) # ... and the destination of the inserted data pilot destinationCell = spreadsheet.getCurrentSheet().getCellByPosition(0, 11) # Insert the prepared data pilot spreadsheet.insertDataPilot(dpp, sourceCellRange, destinationCell)
Arkusz stworzony przez ten skrypt jest widoczny poniżej.
W sytuacji nawiązania połączenia z pakietem narzędzi biurowych oraz nowy arkusz kalkulacyjny jest tworzony, jest on aktywny oraz bieżący co oznacza, że każda operacja jest wykonywana na tym konkretnym arkuszu. Nowy arkusz w aktywnym dokumencie jest tworzony za pomocą metody: newSheet metody. Możliwe jest przełączanie między aktywnymi arkuszami metodą: setActiveSheet. Patrz na skrypt poniżej..
# Po nawiązaniu połączenia nowy dokument arkusza kalkulacyjnego # jest tworzony spreadsheet = Office.createSpreadsheet() # Utworzenie nowego arkusza o nazwie: "My new sheet" sheet1 = spreadsheet.newSheet("My new sheet") # Wstawienie pewnych wartości spreadsheet.setCellValue(0,0, 'ABC') # Tworzenie nowego arkusza sheet2 = spreadsheet.newSheet("Another sheet") # Wstawienie pewnych wartości spreadsheet.setCellValue(3, 3, 'Hello World?') # Ponowne aktywowanie pierwszego arkusza spreadsheet.setActiveSheet(sheet1)
Istotne jest zdanie sobie sprawy, że nowy arkusz stanie się widoczny i bieżący. Przełączanie pomiędzy arkuszami odbywa się za pomocą: setActiveSheet(sheetName) oraz setActiveSheet(sheetObject).
Obramowanie arkusza kalkulacyjnego dostarcza kilka predefiniowanych styli. Poniższa tabela przedstawia predefiniowane style.
Tabela 5.3. Style predefiniowane arkusza kalkulacyjnego
headerStyle | Styl standardowy dla nagłówków |
---|---|
header1Style | Inny styl standardowy dla nagłówków |
level1Style | Styl dla pierwszego tworzonego poziomu danych |
level2Style | Styl dla drugiego tworzonego poziomu danych |
level3Style | Styl dla trzeciego tworzonego poziomu danych |
ooStyle | Styl domyślny |
rowLightStyle | Styl dla tworzonego wierszza z jasnym tłem |
rowDarkStyle | Styl dla tworzonego wierszza z ciemnym tłem |
whiteStyle | Styl z białym tłem |
significanceStyle | Styl z pogrubioną i dużą czcionką |
Style te mogą być stosowane w następujących obiektach:
komórka - używając setCellStyle lub setCellValue
zakres komórek - używając setCellRangeStyle
wiersze, kolumny, komórki w tabelach tekstowych zastosowanych w dokumentach edytorów tekstu.
W rzeczywistości style predefiniowane są zestawem styli w postaci tablicy, dlatego możliwe jest tworzenie styli spersonalizowanych. Przedstawione jest to w poniższym przykładzie.
Przykład 5.5. Tworzenie styli spersonalizowanych
spreadsheet = Office.createSpreadsheet() # Create an empty array for styles oStyle = [] # Use Office.createStyle to provide a style object. oStyle.append(Office.createStyle(OStyle.CELL_BACK_COLOR, OStyle.COLOR_RED)) oStyle.append(Office.createStyle(OStyle.FONT_SIZE, 15)) oStyle.append(Office.createStyle(OStyle.FONT_WEIGHT, 150.0)) oStyle.append(Office.createStyle(OStyle.FONT_COLOR, OStyle.COLOR_WHITE)) #Now apply the prepared style to cell value spreadsheet.setCellValue(1,1, "Some text", oStyle) spreadsheet.setOptimalColumnWidth(1)
Poniższa lista zawiera OStyle stałe oraz ich znaczenie.
FONT_COLOR - kolor czcionki, może być liczbą całkowitą (RGB) lub lub jednym z stałych predefiniowanych styli.
FONT_SIZE - rozmiar czcionki wypunktowania
FONT_WEIGHT - grubość czcionki. Mniej niż 100 oznacza domyślną grubośc czcionki, a więcej niż 150 oznacza czcionkę pogrubioną
H_JUSTIFY - używane do określenia poziomego wyrównania komórki
V_JUSTIFY - używane do określenia pionowego wyrównania komórki
BACK_COLOR - używane do ustawienia koloru tła czcionki w dokumentach tekstowych
CELL_BACK_COLOR - kolor tła komórki
COLOR_USER_DEF_1 - COLOR_USER_DEF_8 - definiowanie kolorów używanych w predefiniowanych stylach
COLOR_RED - kolor czerwony
COLOR_GREEN - kolor zielony
COLOR_BLUE - kolor niebieski
COLOR_BLACK - kolor czarny
COLOR_WHITE - kolor biały
AdvancedMiner wspiera również edytory tekstu. Kod poniżej przestawia jak utworzyć dokument tekstowy.
textDocument = Office.createText()
Poniższa tabela przedstawia metody dla edytorów tekstu
Tabela 5.4. Metody dokumentów tekstowych
Zadanie | Przykłady wywoływania metod |
---|---|
Podmiana tkstu w całym dokumencie | setString(text) |
Dopisanie tekstu na końcu dokumentu | appendString(text) |
Dopisanie tekstu na początku dokumentu | prependString(text) |
ustawienia stylu czcionki | # ustawienie koloru znaku na czerwony - kolory w formacie RGB są zdefiniowane szesnastkowo setCursorStyle(Office.createStyle(OStyle.FONT_COLOR, OStyle.COLOR_RED)) # ustawienie stylu dla grubości czcionki setCursorStyle(Office.createStyle(OStyle.FONT_WEIGHT, 150)) |
Dodanie wcięcia dla akapitu | insertParagraphBreak() |
Wyśrodkowanie ostatniego akapitu | centerLastParagraph() |
Wyrównanie do lewej ostatniego akapitu | leftLastParagraph() |
Wstawienie tabeli w dokumencie tekstowym | textTable = createTable(rowCount, columnCount) |
Wstawienie danych do tabeli | setCellStringValue(textTable, "A2", "TextData") |
Ustawienie stylu dla całej tabeli | # ustawienie tła tabeli na kolor ciemno szary setTableProperty(textTable, Office.createStyle(OStyle.BACK_COLOR, 0x606060)) |
Ustawienie stylu dla wiersza tekstu w tabeli | # ustawienie tła wiersza trzeciego na kolor niebieski setRowProperty(textTable, 3, Office.createStyle(OStyle.BACK_COLOR, OStyle.COLOR_BLUE)) |
Ustawienie stylu dla kolumny tekstu w tabeli | # ustawienie tła kolumny drugiej kolor zielony setColumnProperty(textTable, 2, Office.createStyle(OStyle.BACK_COLOR, OStyle.COLOR_GREEN)) |
Ustawienie stylu czcionki dla konkretnej komórki w tabeli | # ustawienie małego rozmiaru czcionki dla komórki A1 setCellCursorStyle(textTable, "A1", Office.createStyle(OStyle.FONT_SIZE, 8)) |
Dodawanie obrazu | insertImage("file://C:\gfx\graphic.jpg"), insertImage("http://public/graphic.gif"), insertImage("file:///home/user/gfx/graphic.png") |
Metody powinny wyłowywane być w następujący sposób:
textDocument.method(Parameter1, Paramter2, ...)
Obrazy dodawanie są do dokumentów jako linki.
Następujący przykład przedstawia podstawowe możliwości dla użycia z edytorami tekstu:
Przykład 5.6. Praca z dokumentami tekstowymi
# Create a TextWrapper object, which acts as a text document textDocument = Office.createText() # Write the text textDocument.appendString('First line of text, with standard style\n') textDocument.appendString('This line is appended\n') # Create a new paragraph and set its alignment textDocument.insertParagraphBreak() textDocument.appendString('This is new paragraph - it can have a different alignment than the first one'); textDocument.centerLastParagraph() # Create a new paragraph and set another cursor style - bold font textDocument.insertParagraphBreak() textDocument.setCursorStyle(Office.createStyle(OStyle.FONT_WEIGHT, 150.0)) textDocument.appendString('...THIS IS BOLD') textDocument.insertParagraphBreak() # Bring back normal character weight textDocument.setCursorStyle(Office.createStyle(OStyle.FONT_WEIGHT, 100.0)) # But set a different font color textDocument.setCursorStyle(Office.createStyle(OStyle.FONT_COLOR, OStyle.COLOR_BLUE)) textDocument.appendString("\nBLUE MAX\n")
Dobrą praktyką podczas używania styli jest przedefiniowanie niektórych styli, zamiast tworzenia nowych, przy każdej potrzebie ich użycia.
Przykład 5.7. Definiowanie styli spersonalizowanych dla dokumentu tekstowego
# Create a TextWrapper object, which act as spreadsheet document textDocument = Office.createText() # Prepare some useful styles boldFont = Office.createStyle(OStyle.FONT_WEIGHT, 150) normalFont = Office.createStyle(OStyle.FONT_WEIGHT, 100) big = Office.createStyle(OStyle.FONT_SIZE, 20) small = Office.createStyle(OStyle.FONT_SIZE, 8) # Use the styles textDocument.insertParagraphBreak() textDocument.setCursorStyle(boldFont) textDocument.appendString('...This is bold\n') textDocument.setCursorStyle(big) textDocument.appendString('...and BIG.\n') textDocument.setCursorStyle(normalFont) textDocument.appendString('This line is thin...\n') textDocument.setCursorStyle(small) textDocument.appendString('...and this small\n')
Kolejny przykład demonstruje jak wstawić tabelę w dokumencie tekstowym oraz jak ustawić style dla zawartości komórek, wierszy oraz tła tabeli.
Przykład 5.8. Praca z tabelą w dokumencie tekstowym
# Create a TextWrapper object, which act as a text document textDocument = Office.createText() textDocument.appendString("See the table below:\n") # Create a table with three columns and four rows textTable = textDocument.createTable(4, 3) # Prepare the styles lightRedBackground = Office.createStyle(OStyle.BACK_COLOR, 0xffe0e0) darkGreenBackground = Office.createStyle(OStyle.BACK_COLOR, 0x408040) whiteFontColor = Office.createStyle(OStyle.FONT_COLOR, OStyle.COLOR_WHITE) # Set the table background to light red textDocument.setTableProperty(textTable, lightRedBackground) # Set the first row background to dark green color textDocument.setRowProperty(textTable, 0, darkGreenBackground) # Now write in the first row values using white font color textDocument.setCellCursorStyle(textTable, "A1", whiteFontColor) textDocument.setCellStringValue(textTable, "A1", "First column") textDocument.setCellCursorStyle(textTable, "B1", whiteFontColor) textDocument.setCellStringValue(textTable, "B1", "Second column") textDocument.setCellCursorStyle(textTable, "C1", whiteFontColor) textDocument.setCellStringValue(textTable, "C1", "Third column")