PDA

Ver la Versión Completa : Agregar hoja a excel usando OLE


lmpadron
30-09-2014, 16:04:09
Saludos

Estoy exportando a excel y todo va bien hasta que necesito pasar de la tercera hoja, cuando se crea el libro por defecto viene con tres hojas y no se como agregar la cuarta. Aqui les dejo el código de la creación del libro que estoy usando


Variant Excel,Libro,Hoja,Celda;
Excel = CreateOleObject("Excel.Application");
Excel.OlePropertySet("Visible", true);
Libro=Excel.OlePropertyGet("Workbooks");
Libro.OleProcedure("Add");
Hoja=Libro.OlePropertyGet("Item",1);
Libro=Hoja.OlePropertyGet("Worksheets");


Imagino que en algún lado se encuentre escrito como comunicarse con Excel usando OLE pero aun no lo he encontrado. Tratando a ciegas solo recibo errores OLE indicando que no se encuentra el parametro o que ocurrio una excepción. Como por ejemplo


---------------------------
Debugger Exception Notification
---------------------------
Project PROJECT.exe raised exception class EOleSysError with message 'Ocurrió una excepción'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------




---------------------------
Debugger Exception Notification
---------------------------
Project PROJECT.exe raised exception class EOleSysError with message 'No se ha encontrado el miembro'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------


Gracias por su tiempo

roman
30-09-2014, 18:31:46
Yo nunca he usado OlePropertyXXX para acceder a las propiedades y métodos de Excel aunque sí lo hago a través de un variant:


var
Excel, Libro, Hojal: OleVariant;

begin
Excel := CreateOleObject('Excel.Application');
Excel.Visible := false;

Libro := Excel.Workbooks.Open(Plantilla); // Plantilla es la ruta a un archivo excel que uso como plantilla
Hoja := Libro.Worksheets[1];
Hoja.Cells[4, 'F'] := 'Hola mundo';

// etcétera
end;


Lso métodos y propiedades los encuentro en la misma ayuda de Excel. En la versión que uso (2007) tienes que ir a la ficha Programador, desde ahí abrir Visual Basic y ahí abrir la ayuda y buscar el tópico Referencia del programador de Excel 2007|Referencia del modelo de objetos Excel.

Ahí, encontrarás, para el caso específico que preguntas, que el objeto Worksheets tiene un método Add:


Hoja := Libro.Worksheets.Add();


que tiene algunos parámetros opcionales para indicar la posición en la que quieres agregar la hoja.

// Saludos

lmpadron
30-09-2014, 20:36:36
No se como llevarlo a BCB ... trate con algo asi
Hoja=Libro.OlePropertyGet("Worksheets","add");

Pero no funciona, alguna idea de como hacerlo ?? este es el error que me devuelve


---------------------------
Debugger Exception Notification
---------------------------
Project VB.exe raised exception class EOleSysError with message 'Nombre desconocido'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

lmpadron
30-09-2014, 20:42:57
ya !!!!!!!!! Gracias roman por la ayuda ... agrego la forma !!!

mirando el codigo de roma me di cuenta que debia llamar a Worksheets la pregunta era como ... y en mi intento anterior trate de hacerlo todo junto !!! leyendo un poco mas arriba note que ya llamaba a Worksheets en esta linea


Libro=Hoja.OlePropertyGet("Worksheets");


por lo que trate de solo agregar el "Add" y quedo de esta manera


Libro.OleProcedure("Add");