Necesito pasar un array 2D a Excel.
Al ejecutar este test, no se copia nada en el excel.
PROCEDURE TestMatriz()
LOCAL oExcel, oWorkbook, oSheet
LOCAL aDatos := {}
oExcel := CreateObject( "Excel.Application" )
oExcel:Visible := .T.
oWorkbook := oExcel:Workbooks:Add()
oSheet := oExcel:ActiveSheet
aDatos := { ;
{ "Producto A", 120.50, 10 }, ;
{ "Producto B", 85.00, 22 }, ;
{ "Producto C", 45.15, 15 } ;
}
oRange := oSheet:Range( "A1:C3" )
oRange:Value := aDatos
RETURNSi funciona esto:
oRange:Value := aDatos[1]Pero ejecutarlo en un loop no es eficiente para arrays grandes, como es mi caso.
Consultando con la IA me responde:
En las versiones recientes de FiveWin para Harbour (no xHarbour), Antonio Linares añadió soporte para escribir arrays completos mediante SAFEARRAY COM. Sin embargo, en xHarbour 123_10120 ese soporte suele ser limitado o inexistente.
Por eso, aunque encuentres ejemplos en Internet como:
oRange:Value := aMatrix
muchos funcionan en Harbour puro y no necesariamente en xHarbour.
...
...
El problema es que ni xHarbour ni FiveWin exponen públicamente una función tipo ArrayToVariant() para matrices 2D, pero sà puedes construir el SAFEARRAY mediante:SafeArrayCreate()
SafeArrayPutElement()
VariantInit()y luego pasarlo como VARIANT al objeto COM.
Antonio, me das alguna pista sobre los SAFEARRAY ?
Lima PERU
Fwh 24.07, xHb123_10193, MySQL 8.x, BCC 7.3