ogast napsal(a)Ahoj, níže mám skriptík psaný v Basic Scriptu (softwaru třetí strany), úplně na konci zaremované getCellByPosition(1, 1) mi funguje bezproblému. Problém nastane, když chci uložit pole pomocí setDataArray. Hlásí, že konverze není možná, už jsem zkoušel do arraye vkládat stringy, longy, hledal jsem na cizích fórech, opravdu už nemám řešení, jak to vyřešit. Díky moc za tipy.
.......
Pole = Array(0,1,2,3)
Oblast = oSheet.getCellRangeByName("A1:A4").setDataArray(Pole)
'níže zaremované mi funguje bezproblému
'oSheet.getCellByPosition(1, 1).Value = 222
'uložení
bDone = oDoc.storeAsURL("file:///" & sFilePath, arg)
______________________________________________________________________
Tady jde o nejméně 2 různé záležitosti.
1. Buňka
'níže zaremované mi funguje bezproblému
'oSheet.getCellByPosition(1, 1).Value = 222
Toto je deklarace jedné buňky. To lze udělat různými zúůsoby :
Sub DeklaraceBunky_1
Dim oSheet
Sheets = ThisComponent.getSheets()
oSheet = Sheets.getByName("List1")
'n = oSheet.getCellByPosition(48,1).Value
'oSheet = thisComponent.Sheets(0)
oSheet.getCellByPosition(48,1).Value = 4
oSheet.getCellRangeByName("A1").String = "Input Data"
oSheet.getCellRangeByName("A2").Value = 4
oSheet.getCellRangeByName("A3").Value = 5
oSheet.getCellRangeByName("A4").Formula = "=A2*A3"
End Sub
Sub Deklaracebunky_2
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
End Sub
2. pole
Pole = Array(0,1,2,3)
Oblast = oSheet.getCellRangeByName("A1:A4").setDataArray(Pole)
Pole jsou celkem dost různá a celkem i exotická.
Příklad : Pole = Array(0,1,2,3) je pole jednoho řádku (1D) které se častěji deklaruje například
Dim Pole(4), nebo Pole(0 to 4). Postup výše už přímo vkládá hodnoty do pole ve formě "stringů". A to je další věc, pole může být daklarováno podle typu. například string, integer, ale nejčastěji se doporučuje Variant - to umí vše, ale speciály na stringy, nebo čísla jsou rychlejší.
Dobrým počinem je "split" a "Merge" když je potřeba například ubrat, nebo přidat prvek doprostřed pole. Jinak se musí vkládat pouze nakonec a data přehazovat vidlemi po jednom.
Příklad pro pole jednoho sloupce (1D) není popsán přehledně. Běžně se deklaruje pro jeden sloupec takto :
Dim Pole(0,4), nebo podobně. Jde přesně o jeden sloupec.
Pokud se zadeklaruje Více například Pole(3,4), jde o matici 4 x 5.
Pokud se uvádí "Pole polí", tak to má ten efekt, že jednotlivá pole nemusí být stejně dlouhá příklad :
Dim Pole(0,array()) as variant
Pole(0)(0) = array(1, 2, 3)
Pole(1)(0) = array("a", "b", "c", "d", "f")
Pole(2)(0) = array(1 To 31)
Pole(2)(1) = array(7) - tohle už chápeme jako 3. dimenzi (3D), přestože "pravé" 3D by mělo vypadat takto :
Dim Pole(0,0,Array()), nebo Pole(array(),array(),array()).
Pokud jsou uvedy rozměry, jde o fixní velikost 2D (3D) (x,y), respektive (x,y,z). Pole mohou být i vícerozměrná, ale nevím jestli s tím má problém StarBasic, nebo uživatel. Z pohledu na kód vypadá vše jako řádky, ale grafická představa je zřejmá jen u 1D a 2D, kterou umíme vlepit jako řádek a sloupec, nebo dvojrozměrnou tabulku. Trojrozměrné pole už si nikdo v sešitě nedovede představít, nebo ano, ale každý jinak.
Já už ze zadání vidím, že někdo namíchal kód VB, nebo VBA a zřejmě kód Starbasic, nebo jiného Basicu. MS používalo kdysi ještě obecný Basic, ale nevím jaká by byla dnes podpora. Takže ten kód může být starý a z jiného, nežli StarBasicu.