Cellák és tartományok

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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