Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Agregar hoja a excel usando OLE (https://www.clubdelphi.com/foros/showthread.php?t=86772)

lmpadron 30-09-2014 16:04:09

Agregar hoja a excel usando OLE
 
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

Código:

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

Código:

---------------------------
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 
---------------------------


Código:

---------------------------
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:

Código Delphi [-]
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:

Código Delphi [-]
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
Código:

Hoja=Libro.OlePropertyGet("Worksheets","add");
Pero no funciona, alguna idea de como hacerlo ?? este es el error que me devuelve

Código:

---------------------------
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

Código:

Libro=Hoja.OlePropertyGet("Worksheets");
por lo que trate de solo agregar el "Add" y quedo de esta manera

Código:

Libro.OleProcedure("Add");


La franja horaria es GMT +2. Ahora son las 05:08:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi