Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Automatizacion OLE para OpenOffice

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Automatizacion OLE para OpenOffice Responder citando

Hola.

Ya he conseguido abrir una hoja de Calc de OpenOffice.
Este es el código:

Código:

Variant ServiceManager,Desktop,Document,Sheets,FilePath,NewSheetName,Sheet,MyStruct;
Variant vEmptyParam(OPENARRAY(int, (0, -1)), varInteger); //Un array vacío
Variant VariantArray(OPENARRAY(int, (0, 2)), varVariant);

ServiceManager = CreateOleObject("com.sun.star.ServiceManager");
if(VarType(ServiceManager) == varDispatch)
  Desktop = ServiceManager.OleFunction("CreateInstance","com.sun.star.frame.Desktop");

MyStruct = ServiceManager.OleFunction("Bridge_GetStruct","com.sun.star.beans.PropertyValue");
MyStruct.OlePropertySet("name","Hidden");
MyStruct.OlePropertySet("value",false);
VariantArray.PutElement(MyStruct, 0);

//Así se abre una instancia de Calc con una hoja en blanco
//Document = Desktop.OleFunction("loadComponentFromURL", "private:factory/scalc", "_blank", 0, vEmptyParam);
//Así se abre una instancia con el documento
//El "File:///" es para que se convierta en una dirección URL"
//Document = Desktop.OleFunction("loadComponentFromURL", "File:///D:\\MiCarpeta\\MiHoja.XLS", "_blank", 0, vEmptyParam);

//En esta línea falla
Document = Desktop.OleFunction("LoadComponentFromURL","File:///D:\\MiCarpeta\\MiHoja.xls", "_blank", 0, VariantArray);

VariantArray = Unassigned();



El problema es que cuando intento abrir el documento con un array de variant, donde se supone que están los parametros que permiten abrir este documento "oculto" (intento importar datos desde OOo) me da un error "Ocurrió una excepción".
¿Alguien sabe de que puede ir esto?. ¿Puedo estar haciendo mal lo de asignar los datos al array de variant?.
En fin, estoy un poco saturado ya. A ver si hay suerte y alguno habeis hecho algo con esto y me podeis echar una mano.
Gracias Mil.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Prueba cambiando los limites del array por:

Código:
Variant VariantArray(OPENARRAY(int, (0, 0)), varVariant);
                                        ^

Al decirle 0, 2 quiere decir que contendra 3 elementos (desde 0 a 2).
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

OK. Gracias _Leo. Así funciona.
Pero hay una cosa que no acabo de entender.
Si le pongo (0,0) estaré definiendo un array con 0 dimensiones ¿no?.

Entonces ¿VariantArray.PutElement(MyStruct, 0); le asigna dinámicamente las dimensiones y el espacio a utilizar?.

Código:

MyStruct = ServiceManager.OleFunction("Bridge_GetStruct","com.sun.star.beans.PropertyValue");
MyStruct.OlePropertySet("name","Hidden");
MyStruct.OlePropertySet("value",true);
VariantArray.PutElement(MyStruct, 0);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

laremi400 escribió:
Si le pongo (0,0) estaré definiendo un array con 0 dimensiones ¿no?.

No, de 1. Y con 0,2 seria de 3 (0, 1 y 2).

laremi400 escribió:
Entonces ¿VariantArray.PutElement(MyStruct, 0); le asigna dinámicamente las dimensiones y el espacio a utilizar?.

Eso es.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo escribió:
laremi400 escribió:
Si le pongo (0,0) estaré definiendo un array con 0 dimensiones ¿no?.

No, de 1. Y con 0,2 seria de 3 (0, 1 y 2).

laremi400 escribió:
Entonces ¿VariantArray.PutElement(MyStruct, 0); le asigna dinámicamente las dimensiones y el espacio a utilizar?.

Eso es.


Gracias _Leo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.