Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 Re: Calc » setDataArray hází chybu CannotConvertException » 23. 9. 2021 18:23:32

Neutr:
VBScript, ve kterém píši je podmnožina VBA, a nenabízí všechny vymoženosti jako u Visual Basic a VBA. Čistý VBScript nemůže přistupovat k paměti počítače ani vytvářet nebo pracovat se soubory na disku. Prakticky všechny příkazy, které byly nějakým způsobem "nebezpečné" (to znamená, že mohly být použity k vytvoření viru), byly odstraněny.

K LibreOffice jsem byl nucen přejít nedávno a ještě se v něm některé věci učím. Jinak Excel mi přijde tolerantnější a sežere mi i klidně tento zápis:

Dim nRow, nCol, aData(10,1000) 'deklarace pole, jen ukázka bez naplnění hodnot
nRow  = UBound(aData,1)
nCol  = UBound(aData,2)
oSheet.Range("A1").Resize(nRow, nCol).Value = aData 'Od buňky A1 vloží pole

Díky jinak za velice podrobné vysvětlění wink

#2 Re: Calc » setDataArray hází chybu CannotConvertException » 23. 9. 2021 14:13:42

ludviktrnka - "A1:A4" byl pouze test, následně chci použít pro proměnlivou velikost pole právě jak říkáte getCellRangeByPosition. Cyklus for lze použít, ale zpozdí vlákno (thread) procesu. Budu operovat s desetitísícemi buňkami proto lepší SetDataArray.

kamlan - pole polí opravdu zafungovalo, tak vám velice děkuji wink

A přeji všem krásný den.

#3 Re: Calc » setDataArray hází chybu CannotConvertException » 23. 9. 2021 13:18:53

Zdravím,
Pole = Array(0,1,2,3).getDataArray bohužel není funkcí mého VBScriptu, takže zde skončí chybou.
Smazáním "Oblast=" se nestala žádná změna, respektive hází stále stejnou chybu o konverzi. Budu mezitím hledat a zkoušet nějaká řešení wink
Bohužel definice zdroj = listCSV.getCellRangeByName("A1:B99").getDataArray je pro mě zbytečná, protože vkládané pole bude pokaždé jiného rozměru a vždy bude vytvořen nový soubor, zápis do stávajícího nikoliv.
Každopádně díky wink

#4 Calc » setDataArray hází chybu CannotConvertException » 23. 9. 2021 12:09:15

ogast
Odpovědí: 7

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.

'__error_________________________________________________________________________________________________
[automation bridge]com.sun.star.script.CannotConvertException in UnoConversionUtilities<T>::variantToAny! Message: conversion not possible!


'_skriptík ______________________________________________________________________________________
Dim oSM, oCR, oDesk, oDoc, oSh, oCell, s, sPath, sFilePath, bDone, Oblast, Pole, args(), arg()

sPath = Pm.DiscGetPath("app:Excel/")
s = Pm.StringReplace(sPath, "\", "/")
sFilePath = s & sFileName & ".ods"

'The service manager is always the starting point
'If there is no office running then an office is started up
Set oSM = Pm.AxGetObject("new", "com.sun.star.ServiceManager")

'Create the CoreReflection service that is later used to create structs
Set oCR = oSM.createInstance("com.sun.star.reflection.CoreReflection")

'Create the Desktop
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")

'Open a new empty calc document
Set oDoc = oDesk.loadComponentFromURL("private:factory/scalc", "_blank", 0, args)

'Create a sheet object
Set oSh = oDoc.getSheets()
Set oSheet = oSh.GetByIndex(0)

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)

Zápatí

Používáme FluxBB