PDA

Ver la Versión Completa : Necesito crear un Sheet Oculto en Excel


OxaNet
18-03-2004, 01:52:59
Saludos foro :

Les cuento, estoy desarrollando un sistema de control de minerales, antes los ususrios registraban los analisis en excel, yo desarrolle un form con las caracterisiticas parecidas, pero no le cuadra, no quieren usarlo, y el proyecto esta tambaleando. Por lo tanto necesito hacer q el sisitema interactue con Excel.

Libro : _WORKBOOK;
Hoja : _WORKSHEET;
...
Excel es un compnente TExcelApplication

...
1ro Activo Excel con una Plantilla

Excel.Connect;
Excel.Visible[0] := true;
Libro := Excel.Workbooks.Add(xFile+xPlantilla,0);
Hoja := Libro.Sheets[1] as _WORKSHEET;
Hoja.Name:='Plantilla';

2do Necesito q la Hoja insertada sea oculta y utilizarla como plantilla.

No puedo insertar otra hoja, deberia poder copiar las celdas de "Plantilla ", insertar una nueva hoja, ponerle nombre y luego pegar las celdas copiadas de la hoja de plantillas.

3ro Insertar mas Hojas.

* Segun el trabajo se iran insertando mas hojas con distinto nombre pero copiando las celdas de la plnatilla.

Bueno, es todo lo q se me ocurre.

Vi los ejemplo, pero crean 8 Hojas de golpe, yo necesito ir creandolas una a una y en diferentes tiempos.

Tengo otro problema cuando cierro la aplicaion y dejo Excel abierto, al cargar nuevamente la aplicacion e intentar cargar excel se cuelga, no se como liberar la variable de excel, ya probe con free y nada.

Espero q alguien pueda ayudarme, los usuarios quieren tirar abajo el proyecto.

Agradeceria cualquier sugerencia.


Gracias


Joseph

Lima - Perú

roman
19-03-2004, 07:03:53
No estoy seguro de haber entendido pero te pongo una idea.

Tengo una situación similar en la que debo elaborar listas de alumnos de uno o más grupos. Cada grupo debe ir en una hoja distinta pero todas los hojas son iguales en cuanto al formato.

En lugar de crear una hoja oculta lo que hago es crear la primera hoja a partir de una plantilla (como le haces tú, segun me parece) y lleno los datos.

Cuando tengo que agregar una nueva hoja utilizo algo así:


Hoja := Libro.ActiveSheet as _WORKSHEET;
Hoja.Copy(null, Hoja, 0);

Hoja := Libro.ActiveSheet as _WORKSHEET;
Hoja.Name := 'Hoja' + IntToStr(Libro.Sheets.Count);

LimpiarHoja(Hoja);


Es decir, copio la hoja activa, asigno a la copia un nombre secuencial y finalmente limpio la hoja, es decir, borro sus datos. De esta manera el formato queda igual que la plantilla original pero con celdas vacías.

En el método LimpiarHoja simplemente borro las celdas que me interesen:

Hoja.Cells.Item[Ren, Col] := '';

preservando las que sean comunes como títulos y demás.

En cuanto a lo de que se cuelga quizá te sirva poner

Excel.AutoQuit en true.

// Saludos

OxaNet
20-03-2004, 00:36:35
Gracias por la respuesta Sr. Moderador Roman, me sirvio mucho.

Estuve investigando y probando y probando y bueno, logre encontrar algunos hilos en el foro q me sirvieron. Y desarrolle lo siguiente.

Utilizo : TExelApplication, TExcelWorkBook, TExcelWorkSheet

* Me conecto a Excel
* Abro el Arhivo (File.xls)
* // El Libro de Excel tiene cierto numero de Hojas, q se crean dinamicamente de acuerdo a una condicion "x" en el nombre de la hoja , entonces si no cumple una condicion debo crear una hoja, en base a una de las hojas ya existentes.

* Entonces si voy a crear una nueva hoja, me conecto a la hoja donde esta la plantilla. (la ubico por el nombre)

// xRef : Index de la hoja con la plantilla
// Me conecto
ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[xRef] as _WorkSheet);
// Copio las seldas selecciondas
ExcelWorksheet1.Range['A1', 'DJ220'].Copy(EmptyParam);

// Luego me conecto a la hoja nueva donde pegare las celdas copiadas, estas celdas tienen formulas


ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook As _WorkBook);
ExcelWorkBook1.Sheets.Add(EmptyParam,EmptyParam,1,1,0);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets['Sheet1'] as _Worksheet);
ExcelWorkSheet1.Paste(EmptyParam); // aqui da error

* Tambien da error con :

ExcelWorkSheet1.Paste(EmptyParam,EmptyParam);
ExcelWorkSheet1.Paste(EmptyParam,EmptyParam,EmptyParam);
ExcelWorkSheet1.Paste;
// Me carga Visual Basic con el mensaje "Compile Error : Can't find project or library"


* Espero q alguien pueda ayudarme,
:confused:

Gracias por la ayuda.


Joseph

Lima - Perú