Cellák és tartományok

From Apache OpenOffice Wiki
Jump to: navigation, search
Book.png


Egy munkalap egy kétdimenziós, cellákat tartalmazó listából áll. Minden cellát az X és Y pozíciója jelöl a bal felső cellához képes, amelynek pozíciója (0,0).

Egyedi cellák címzése és szerkesztése

A következő példa létrehoz egy objektumot, amely a bal felső cellára hivatkozik, és beszúr szöveget ebbe a cellába:

Dim Doc As Object   
Dim Sheet As Object
Dim Cell As Object   
 
Doc = ThisComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.String = "Teszt"


A numerikus koordináták mellett minden cellának van neve is, például a bal felső (0,0) cellának A1 a neve. Az A betű jelöli az oszlopot, és az 1-es szám a sort. Fontos, hogy a cella nevét és pozícióját ne keverjük össze, mert a nevek 1-gyel kezdődnek, viszont a pozíciók 0-val.

Az Apache OpenOffice programban a táblázatcella lehet üres, vagy tartalmazhat szöveget, számokat, illetve képleteket. A cellatípust nem a cella tartalma határozza meg, hanem annak objektumtulajdonsága. A számok a Value tulajdonsággal írhatók be és olvashatók ki, a szöveg a String tulajdonsággal, és a képletek a Formula tulajdonsággal.

Dim Doc As Object   
Dim Sheet As Object
Dim Cell As Object   
 
Doc = ThisComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100
 
Cell = Sheet.getCellByPosition(0, 1)
Cell.String = "Teszt"
 
Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1"

A példa beszúr egy számot, egy szöveget és egy képletet az A1-A3 mezőkbe.

Documentation note.png A Value, a String és a Formula tulajdonság helyettesíti a PutCell metódust a táblázatcellák értékadásánál.

Az Apache OpenOffice a String tulajdonsággal megadott cellatartalmat szövegként kezeli még akkor is, ha az szám. A számok balra vannak igazítva a cellában a jobbra igazítás helyett. A képletek használatánál is ügyelni kell a szöveg és számok közti különbségekre:

Dim Doc As Object   
Dim Sheet As Object
Dim Cell As Object
 
Doc = ThisComponent
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

Annak ellenére, hogy az A1 cella a 100 értéket, az A2 cella az 1000 értéket tartalmazza, az A1+A2 képlet a 100 értéket adja vissza. Ez azért van, mert az A2 cella tartalma szövegként lett megadva.

Ha ellenőrizni akarjuk, hogy egy cella számot vagy szöveget tartalmaz-e, használjuk a Type tulajdonságot:

Dim Doc As Object   
Dim Sheet As Object
Dim Cell As Object
 
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)
 
Cell.Value = 1000
 
Select Case Cell.Type  
Case com.sun.star.table.CellContentType.EMPTY  
   MsgBox "Tartalom: Üres"
Case com.sun.star.table.CellContentType.VALUE
   MsgBox "Tartalom: Érték"
Case com.sun.star.table.CellContentType.TEXT
   MsgBox "Tartalom: Szöveg"
Case com.sun.star.table.CellContentType.FORMULA
   MsgBox "Tartalom: Képlet"
End Select

A Cell.Type tulajdonság visszaadja a com.sun.star.table.CellContentType enumeráció értékét, amely azonosítja a cella típusát. A következő értékek használhatók:

EMPTY
nincs érték.
VALUE
szám.
TEXT
karakterláncok.
FORMULA
képlet.

Cellák beszúrása, törlése, másolása és áthelyezése

A cellatartalom közvetlen módosítása mellett az Apache OpenOffice Calc biztosít egy felületet, amellyel beszúrhatunk, törölhetünk, másolhatunk vagy összevonhatunk cellákat. A (com.sun.star.sheet.XRangeMovement) felület a munkafüzet-objektumon keresztül érhető el, és négy metódust biztosít a cellatartalom módosításához.

Az insertCell metódussal cellák szúrhatók be a munkalapba.

Dim Doc As Object   
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
 
Doc = ThisComponent
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)

Ebben a példában a program beszúr egy két oszlop és két sor méretű cellatartományt az első munkalap (száma 0) második oszlopába és sorába (mindkettő száma 1). Az adott tartományban található értékek a tartomány alá kerülnek.

A com.sun.star.table.CellRangeAddress struktúrával definiálható a beszúrni kívánt cellatartomány. Ebben a struktúrában a következő értékek találhatók:

Sheet (rövid egész)
a munkalap száma (a számozás 0-val kezdődik).
StartColumn (hosszú egész)
a cellatartomány első oszlopa (a számozás 0-val kezdődik).
StartRow (hosszú egész)
a cellatartomány első sora (a számozás 0-val kezdődik).
EndColumn (hosszú egész)
a cellatartomány utolsó oszlopa (a számozás 0-val kezdődik).
EndRow (hosszú egész)
a cellatartomány utolsó sora (a számozás 0-val kezdődik).

A kitöltött CellRangeAddress struktúrát át kell adni az insertCells metódusnak. Az insertCells második paramétere tartalmaz egy értéket a com.sun.star.sheet.CellInsertMode enumerációból, és meghatározza mit kell tenni a beszúrási pozícióban lévő értékekkel. A CellInsertMode enumeráció a következő értékeket használja:

NONE
az aktuális értékek a helyükön maradnak.
DOWN
a beszúrási pozícióban és azalatt lévő értékek lefelé mozognak.
RIGHT
a beszúrási pozícióban és attól jobbra lévő értékek jobbra mozognak.
ROWS
a beszúrási pozíció utáni sorok lefelé mozognak.
COLUMNS
a beszúrási pozíció utáni oszlopok jobbra mozognak.

A removeRange metódus az ellentettje a insertCells metódusnak. Ez a metódus törli a CellRangeAddress struktúrában megadott cellatartományt a munkalapról.

Dim Doc As Object   
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
 
Doc = ThisComponent
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)

Ez a példa eltávolítja a munkalapból a B2:C3 cellatartományt, és felfelé mozgatja az alatta lévő cellákat két sorral. Az eltávolítást típusát a com.sun.star.sheet.CellDeleteMode enumeráció egyik értéke határozza meg:

NONE
az aktuális értékek a helyükön maradnak.
UP
a beszúrási pozícióban és azalatt lévő értékek lefelé mozognak.
LEFT
a beszúrási pozícióban és attól jobbra lévő értékek balra mozognak.
ROWS
a beszúrási pozíció utáni sorok felfelé mozognak.
COLUMNS
a beszúrási pozíció utáni oszlopok balra mozognak.

A XRangeMovement felület két további metódust biztosít a cellatartományok mozgatásához (moveRange) vagy másolásához (copyRange). A következő példa áthelyezi a B2:C3 tartományt, hogy az az A6 pozícióban kezdődjön:

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 = ThisComponent
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)

A CellRangeAdress struktúrán felül a moveRange metódus egy com.sun.star.table.CellAddress struktúrát is vár, amely megadja a célterület kezdőpozícióját. A CellAddress metódus a következő értékeket használja:

Sheet (rövid egész)
a munkalap száma (a számozás 0-val kezdődik).
Column (rövid egész)
az oszlop száma (a számozás 0-val kezdődik).
Row (rövid egész)
a sor száma (a számozás 0-val kezdődik).

A célterület cellatartományait mindig felülírja a moveRange metódus. Az InsertCells metódustól eltérően a removeRange metódusnál nincs automatikus mozgatást biztosító paraméter.

A copyRange metódus ugyanúgy működik, mint a moveRange metódus, kivéve, hogy a copyRange beszúrja a cella másolatát annak mozgatása helyett.

Documentation note.png Funkcióját tekintve az Apache OpenOffice Basic insertCell, removeRange és copyRange metódusa hasonló, mint a VBA Range.Insert, Range.Delete és Range.Copy metódusa. Míg VBA-ban a metódusok a hozzájuk tartozó Range objektumra vonatkoznak, az Apache OpenOffice Basicben a Sheet objektumra vonatkoznak.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools