Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Migracion a excel (https://www.clubdelphi.com/foros/showthread.php?t=74721)

oscarac 07-07-2011 07:46:55

Migracion a excel
 
buenos dias

tengo que pasar un informacion a excel la caracteristica es que se debe pasar en diferentes hojas dependiendo de los datos
codigos 1 y 2 en una hoja
codigo 3 en otra
codigo 4 en otra

entonces hice algo mas o menos asi

Código Delphi [-]
  _FilaTitulos := 1;
    Excel := CreateOleObject('Excel.Application');
    Excel.DisplayAlerts := False;
    Excel.WorkBooks.Add(xlWBATWorksheet);
    //Agrega una hoja
    Excel.WorkBooks[1].WorkSheets.add;
    Excel.WorkBooks[1].WorkSheets.add;
    //Nombra las hojas
    Excel.WorkBooks[1].WorkSheets[1].Name:='Sheet1';
    Excel.WorkBooks[1].WorkSheets[2].Name:='Sheet2';
    Excel.WorkBooks[1].WorkSheets[3].Name:='Sheet3';
    //Referencia a cada hoja con una variable
    WorkSheet1 := Excel.WorkBooks[1].WorkSheets['Sheet1'];
    WorkSheet2 := Excel.WorkBooks[1].WorkSheets['Sheet2'];
    WorkSheet3 := Excel.WorkBooks[1].WorkSheets['Sheet3'];

    WorkSheet1.cells[_FilaTitulos,1] := 'Empresa';
    WorkSheet1.cells[_FilaTitulos,2] := 'Codigo';
    WorkSheet1.cells[_FilaTitulos,3] := 'Cese';
    WorkSheet1.cells[_FilaTitulos,4] := 'Trabajador';
    WorkSheet1.cells[_FilaTitulos,5] := 'Dcto.Trabajador';
    WorkSheet1.cells[_FilaTitulos,6] := 'Empresa';
    WorkSheet1.cells[_FilaTitulos,7] := 'Total';
    WorkSheet2.cells[_FilaTitulos,1] := 'Empresa';
    WorkSheet2.cells[_FilaTitulos,2] := 'Codigo';
    WorkSheet2.cells[_FilaTitulos,3] := 'Cese';
    WorkSheet2.cells[_FilaTitulos,4] := 'Trabajador';
    WorkSheet2.cells[_FilaTitulos,5] := 'Dcto.Trabajador';
    WorkSheet2.cells[_FilaTitulos,6] := 'Empresa';
    WorkSheet2.cells[_FilaTitulos,7] := 'Total';
    WorkSheet3.cells[_FilaTitulos,1] := 'Empresa';
    WorkSheet3.cells[_FilaTitulos,2] := 'Codigo';
    WorkSheet3.cells[_FilaTitulos,3] := 'Cese';
    WorkSheet3.cells[_FilaTitulos,4] := 'Trabajador';
    WorkSheet3.cells[_FilaTitulos,5] := 'Dcto.Trabajador';
    WorkSheet3.cells[_FilaTitulos,6] := 'Empresa';
    WorkSheet3.cells[_FilaTitulos,7] := 'Total';
    i1:= _FilaTitulos + 1;
    i2:= _FilaTitulos + 1;
    i3:= _FilaTitulos + 1;
    qryConsumos.First;
    while not qryConsumos.Eof do
    begin
      if (Izquierda(qryConsumosOtro.AsString,1) = '1') or (Izquierda(qryConsumosOtro.AsString,1) = '2') Then
      Begin
        WorkSheet1.cells[i1, 1].NumberFormat := '@';
        WorkSheet1.cells[i1, 1] := qryConsumosempresa.AsString;
        WorkSheet1.cells[i1, 2].NumberFormat := '@';
        WorkSheet1.cells[i1, 2] := qryConsumosOtro.AsString;
        WorkSheet1.cells[i1, 3] := qryConsumosFechaCese.AsDateTime;
        WorkSheet1.cells[i1, 4] := qryConsumosTrabajador.AsString;
        WorkSheet1.cells[i1, 5] := qryConsumosDcto.AsFloat;
        WorkSheet1.cells[i1, 6] := qryConsumosEmpresa_1.AsFloat;
        WorkSheet1.cells[i1, 7] := qryConsumosDcto.AsFloat + qryConsumosEmpresa_1.AsFloat;
        inc (i1);
      end;
      if (Izquierda(qryConsumosOtro.AsString,1) = '3') Then
      Begin
        WorkSheet2.cells[i2, 1].NumberFormat := '@';
        WorkSheet2.cells[i2, 1] := qryConsumosempresa.AsString;
        WorkSheet2.cells[i2, 2].NumberFormat := '@';
        WorkSheet2.cells[i2, 2] := qryConsumosOtro.AsString;
        WorkSheet2.cells[i2, 3] := qryConsumosFechaCese.AsDateTime;
        WorkSheet2.cells[i2, 4] := qryConsumosTrabajador.AsString;
        WorkSheet2.cells[i2, 5] := qryConsumosDcto.AsFloat;
        WorkSheet2.cells[i2, 6] := qryConsumosEmpresa_1.AsFloat;
        WorkSheet2.cells[i2, 7] := qryConsumosDcto.AsFloat + qryConsumosEmpresa_1.AsFloat;
        inc (i2);
      end;
      if (Izquierda(qryConsumosOtro.AsString,1) = '4') Then
      Begin
        WorkSheet3.cells[i3, 1].NumberFormat := '@';
        WorkSheet3.cells[i3, 1] := qryConsumosempresa.AsString;
        WorkSheet3.cells[i3, 2].NumberFormat := '@';
        WorkSheet3.cells[i3, 2] := qryConsumosOtro.AsString;
        WorkSheet3.cells[i3, 3] := qryConsumosFechaCese.AsDateTime;
        WorkSheet3.cells[i3, 4] := qryConsumosTrabajador.AsString;
        WorkSheet3.cells[i3, 5] := qryConsumosDcto.AsFloat;
        WorkSheet3.cells[i3, 6] := qryConsumosEmpresa_1.AsFloat;
        WorkSheet3.cells[i3, 7] := qryConsumosDcto.AsFloat + qryConsumosEmpresa_1.AsFloat;
        inc (i3);
      end;
      qryConsumos.Next;
      ProgressBarXls.Position := ProgressBarXls.Position +1;
    end;
    WorkSheet1.Cells.Columns.AutoFit;
    WorkSheet2.Cells.Columns.AutoFit;
    WorkSheet3.Cells.Columns.AutoFit;
  WorkBook.SaveAs(fname);
  WorkBook.Close(fName);
    Excel.Quit;

pero me da error en las ultimas lineas
Código Delphi [-]
 
  WorkBook.SaveAs(fname);

el mensaje dice EVariantInvalidOpError Invalid variant operation

q estoy haciendo mal? :(

LoPiTaL 07-07-2011 09:02:17

Me imagino que te voy a comentar una bobada, que seguramente la hayas omitido por acortar el código, pero en el código que has citado, la variable "Workbook" con la que haces el SaveAs no está inicializada...

Un saludo,
LoPiTaL


La franja horaria es GMT +2. Ahora son las 16:33:33.

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