Cellák és tartományok
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.
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.
Content on this page is licensed under the Public Documentation License (PDL). |