PDA

Ver la Versión Completa : Excel - Salto de Hoja


shoulder
13-07-2012, 14:27:51
Hola, tengo reportes excel, realizados en delphi, hasta aqui todo bien... Pero me estan pidiendo que controle, por cada salto de hoja, que en el encabezado a la derecha se lea la palabra "Anexo". No encuentro como detectar el salto de hoja para escribir la leyenda. Gracias.

mRoman
15-07-2012, 21:40:00
Para poder ayudarte bien, necesitamos mas informacion....por ejemplo:

Q componentes utilizas para leer los datos?
Q componentes utilizas para exportar los datos a Excel?
Estas utilizando plantillas de excel para exportar los datos?

De entrada te puedo decir q tu problema se puede resolver talvez usando una plantilla, a la cual la configuras desde Excel, el encabezado que necesitas....si meterte al control de páginas desde delphi, eso dejaselo a Excel q lo haga por ti.

Lo anterior q te comento es porque yo he exportado datos a Excel usando plantillas con un diseño especifico, colores, bordes, etc, etc.

Saludos.

shoulder
16-07-2012, 22:48:21
Hola primero gracias por responder, utilizo delphi 7 con mysql, no uso plantilla. Genero desde unos datos de la base, un listado de pagos que cambia en cantidad de registros todos los meses, en el cual con el CreateOleObject, genero el excel con el titulo, columnas, fonts hasta ahi todo perfecto. Lo unico que no se que me estan solicitando es que cuando salte de hoja el listado agregue al principio de cada hoja la palabra "ANEXO".

shoulder
16-07-2012, 23:16:23
Me olvide de comentar algo.

Hola primero gracias por responder, utilizo delphi 7 con mysql, no uso plantilla. Genero desde unos datos de la base, un listado de pagos que cambia en cantidad de registros todos los meses, en el cual con el CreateOleObject, genero el excel con el titulo, columnas, fonts,bordes.. hasta ahi todo perfecto. Ademas genero desde el OleObject, solapas dentro del excel, porque hago dentro de un mismo reporte tantas hojas de calculo como empresas tenga para ese mes, o sea dentro de una hoja la empresa con el nombre en la hoja (en la solapa) y sus pagos con la sumatoria.

Lo unico que no se que me estan solicitando es que cuando salte de hoja el listado agregue al principio de cada hoja la palabra "ANEXO".

mRoman
17-07-2012, 07:33:50
Me olvide de comentar algo.

Hola primero gracias por responder, utilizo delphi 7 con mysql, no uso plantilla. Genero desde unos datos de la base, un listado de pagos que cambia en cantidad de registros todos los meses, en el cual con el CreateOleObject, genero el excel con el titulo, columnas, fonts,bordes.. hasta ahi todo perfecto. Ademas genero desde el OleObject, solapas dentro del excel, porque hago dentro de un mismo reporte tantas hojas de calculo como empresas tenga para ese mes, o sea dentro de una hoja la empresa con el nombre en la hoja (en la solapa) y sus pagos con la sumatoria.

Lo unico que no se que me estan solicitando es que cuando salte de hoja el listado agregue al principio de cada hoja la palabra "ANEXO".

Buenas tardes Shoulder. Ya con lo que me comentas, te puedo sugerir lo siguiente, el archivo es exportado a formato de Excel, entonces solamente haria falta lo siguiente.

En este codigo te defino al momento de dar click en un boton, haria esto:

procedure TfrmExportar2.btnAplicarClick(Sender: TObject);
var
XLS : TXLSFile;
Lin,c,l,Bandera,nHoja,xDia,nMes,nMes2,nLec1, nLec2,nAnio, nTipoContr1, nTipoContr2 : integer;
cMes, cFichero,cProducto : String;
AA,MM,DD,dDia,dMes,dAnio : Word;
dFecha1, dFecha2, dFecha3 : TDateTime;
Dias : Array[1..31] of integer;
begin
//Asignanos a una variable la clase TXLSFile para crear el archivo de Excel;
cProducto:=cbxProducto.KeyValue+' '+cbxProducto.Text;
ModDatos.qryPas.Close;
ModDatos.qryPas.Open;
try
nHoja:=0;
XLS:=TXLSFile.Create;
.
.
.
.


(los puntos significa mas código, que para el caso de ejemplo no lo pongo ya que no es necesario)

Mas adelante en este mismo código, defino lo siguiente:
XLS.OpenFile(ExtractFilePath(Application.ExeName)+'\plantillas\fluida_2010.xlt');
Bar.Step:=1;
Bar.Max:=qryVentasDiarias.RecordCount;
cMes:=cbxMes.Items[cbxMes.itemindex];
// LLENAR EL ENCABEZADO DEL ARCHIVO DE EXCEL Y DATOS GLOBALES
With xls.Workbook.Sheets[nHoja] do
begin
Cells[1,1].Value :='Empresa:'+ModDatos.qryEmpresa.fieldbyname('DESCRIPCION').AsString;
Cells[3,1].Value :='Comportamiento Estadistico Mensual de Ventas correspondiente a: '+cMes+'-'+mskAnio.Text+'.';
Cells[4,1].Value :='Dias de venta';
Cells[4,2].Value :=qryExportar.FieldByName('DIAS_HABILES').AsString;
Cells[5,237].Value:='T O T A L LITROS MES DE '+cMes+' DEL '+mskAnio.Text;
Cells[7,9].Value :='('+qryExportar.FieldByName('DIAS_DISTRIBUCION').AsString+' DIAS DIST).';
Cells[8,9].Value :='('+qryExportar.FieldByName('DIAS_HABILES').AsString+ ' DIAS VENTA).';
Cells[8,10].Value :=IntToStr(cbxMes.ItemIndex+1)+'/'+mskAnio.Text;
end;


En esta parte defino en el encabezado, lo que necesito. Aqui podria quedar lo q tu quieras. Ahora, TU PROBLEMA RADICA en como AGREGAR LA PALABRA "ANEXO" EN CADA PAGINA.....solamente definelo como en el codigo anterior, talvez asi:
.
Cells[1,237].Values:='ANEXO';

y en la parte de impresión pudieras dejárselo al usuario, es decir que el seleccione el encabezado y el rango de impresión.

Por otra parte ignoro, si los usuarios no quieres hacer nada....es decir solo abrir e imprimir...si es asi, entonces lo q te sugiero no te va a servir de mucho.

Por cierto el componente q utilizo es "TXLSFile", tú estas utilizando el que trae Delphi de la paleta de Servers.

Espero haberte ayudado u orientado.

shoulder
17-07-2012, 16:59:49
Primero de todo, muchisimas gracias por tu tiempo y tu respuesta. Pregunte quieren que el usuario no haga nada... por eso estaba buscando una funcion que sea encabezado de pagina del excel. Probe como me has dicho pero me lo hace una sola vez cuando define la Hoja.

shoulder
18-07-2012, 22:09:35
Hola ya lo resolviii!!

//Encabezado
Excel.WorkBooks[1].WorkSheets[y].PageSetup.RightHeader := 'Anexo';
...
Excel.WorkBooks[1].WorkSheets[y].PageSetup.RightMargin := 10 ;
Excel.WorkBooks[1].WorkSheets[y].PageSetup.LeftMargin := 16 ;
Excel.WorkBooks[1].WorkSheets[y].PageSetup.HeaderMargin := 18;
Excel.WorkBooks[1].WorkSheets[y].PageSetup.TopMargin := 136;
//Repito titulos en todas las hojas
Excel.WorkBooks[1].WorkSheets[y].PageSetup.PrintTitleRows := '$3:$7';

//Ordeno la solapa dos por empresa y fecha
Rango : OleVariant;
...
Rango := Excel.WorkBooks[1].WorkSheets[2].Range['A8:F8200'];
Rango.Sort(Excel.WorkBooks[1].WorkSheets[2].Range['E1'],EmptyParam,xlAscending,Excel.WorkBooks[1].WorkSheets[2].Range['B1'], xlAscending);

mRoman
21-07-2012, 01:21:39
Hola ya lo resolviii!!

//Encabezado
Excel.WorkBooks[1].WorkSheets[y].PageSetup.RightHeader := 'Anexo';
...
Excel.WorkBooks[1].WorkSheets[y].PageSetup.RightMargin := 10 ;
Excel.WorkBooks[1].WorkSheets[y].PageSetup.LeftMargin := 16 ;
Excel.WorkBooks[1].WorkSheets[y].PageSetup.HeaderMargin := 18;
Excel.WorkBooks[1].WorkSheets[y].PageSetup.TopMargin := 136;
//Repito titulos en todas las hojas
Excel.WorkBooks[1].WorkSheets[y].PageSetup.PrintTitleRows := '$3:$7';

//Ordeno la solapa dos por empresa y fecha
Rango : OleVariant;
...
Rango := Excel.WorkBooks[1].WorkSheets[2].Range['A8:F8200'];
Rango.Sort(Excel.WorkBooks[1].WorkSheets[2].Range['E1'],EmptyParam,xlAscending,Excel.WorkBooks[1].WorkSheets[2].Range['B1'], xlAscending);


Excelente felicidades ! Shoulder....que bueno q lo resolviste. Y gracias por agregar el código de solución.

Saludos !!