Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2012
edgar_prospero edgar_prospero is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 202
Poder: 13
edgar_prospero Va por buen camino
sumar columna en excel

que hay tengo un problemilla, haber quien mepuede echar la mano estoy exportando una informacion a excel pero no se como hacerle para que me sume una columna ya que no siempre es el mismo rango varia dependiendo la consulta acontinuacion pongo mi codigo para ver donde puedo agregar para que me sume una columna

Código Delphi [-]
procedure TForm5.BitBtn6Click(Sender: TObject);
var Excel : Variant;
var Libro : Variant;
var i:integer;
var j:integer;
begin

Excel := CreateOleObject ('Excel.Application');


Excel.Visible := True;

Excel.WorkBooks.Add (-4167);

Excel.WorkBooks[1].WorkSheets[1].Name := 'Reporte';

Libro := Excel.WorkBooks[1].WorkSheets['Reporte'];
excel.worksheets[1].Range['B1','B1'].ColumnWidth :=45;
excel.worksheets[1].Range['C1','C1'].ColumnWidth :=13;
excel.worksheets[1].Range['D1','E1'].ColumnWidth :=15;
excel.worksheets[1].Range['F1','F1'].ColumnWidth :=16;
excel.worksheets[1].Range['G1','H1'].ColumnWidth :=9;
excel.worksheets[1].Range['I1','I1'].ColumnWidth :=14;
Libro.Cells.Item[1,1].Font.Bold:=True;
Libro.Cells.Item[1,1].font.size:=16;

Libro.Cells.Item[2,1]:= ' Inventario en proceso del departamento: '+dep2.Text + '  A  ' +dep3.Text;
Libro.Cells.Item[2,1].Font.Bold:=True;

Libro.Cells.Item[3,1].Font.Bold:=True;
Libro.Cells.Item[3,2].Font.Bold:=True;
Libro.Cells.Item[3,3].Font.Bold:=True;
Libro.Cells.Item[3,4].Font.Bold:=True;
Libro.Cells.Item[3,5].Font.Bold:=True;
Libro.Cells.Item[3,6].Font.Bold:=True;
Libro.Cells.Item[3,7].Font.Bold:=True;
Libro.Cells.Item[3,8].Font.Bold:=True;
Libro.Cells.Item[3,9].Font.Bold:=True;



Query.Open;
i:=2;

query.SQL.Clear;
query.SQL.Add('SELECT * FROM arm0062 WHERE departamento>=:inidep and departamento<=:findep and tipo_material>=:inimat and tipo_material<=:finmat order by  codigo asc ');

query.ParamByName('inidep').Asstring:=inidep.Text;
query.ParamByName('findep').Asstring:=findep.Text;
query.ParamByName('inimat').Asstring:=inimat.Text;
query.ParamByName('finmat').Asstring:=finmat.Text;
query.Open;

while not Query.EOF do
begin

Libro.Cells [1,1] := 'CLASIC AND BASIC SA DE CV';
Libro.Cells [3,1] := 'codigo';
Libro.Cells [3,2] := 'Nombre';
Libro.Cells [3,3] := 'departamento';
Libro.Cells [3,4] := 'tipo de material';
Libro.Cells [3,5] := 'cantidad piezas';
Libro.Cells [3,6] := 'cantidad material';
Libro.Cells [3,7] := 'unidad';
Libro.Cells [3,8] := 'costo';
Libro.Cells [3,9] := 'total';


i :=i+1;
Libro.Cells [i,1] := Query.FieldByName ('codigo').AsString;
Libro.Cells [i,2] := Query.FieldByName ('nombre').AsString;
Libro.Cells [i,3] := Query.FieldByName ('departamento').AsString;
Libro.Cells [i,4] := Query.FieldByName ('tipo_material').AsString;
Libro.Cells [i,5] := Query.FieldByName ('cant_piezas').AsString;
Libro.Cells [i,6] := Query.FieldByName ('cant_material').AsString;
Libro.Cells [i,7] := Query.FieldByName ('unidad').AsString;
Libro.Cells [i,8] := Query.FieldByName ('costo').AsString;
Libro.Cells [i,9] := Query.FieldByName ('total').AsString;

Query.Next;

end;

Query.Close;
end;
Responder Con Cita
  #2  
Antiguo 12-07-2012
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Yo hice algo similar a lo que tu mencionas de la siguiente manera

Código Delphi [-]
 
Procedure TfrmBalanceGasto.ExportarToExcel(fName: string);
const
  xlWBATworksheet = -4167;
var
  Excel, WorkBook, WorkSheet: OleVariant;
  I, J, _FilaIni, _quiebre, _FilaTitulos: Integer;
  _Campo :String;
  _f, _c :Integer;
  _posiciones :array [1..10] of Integer;
  const _letras :array [1..13] of string = ('C','D','E','F','G','H','I','J','K','L','M','N','O');
begin
  _FilaTitulos := 6;
  _Campo := '';
  Excel := CreateOleObject('Excel.Application');
  Excel.DisplayAlerts := False;
  WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);
  WorkSheet := WorkBook.WorkSheets[1];
  WorkSheet.Name := 'Hoja1';
  WorkSheet.Cells[1,1].font.Bold := True;
  WorkSheet.Cells[1,1] := dmGlobal.g_NombreEmpresa;
  WorkSheet.Cells[2,1] := 'R.U.C. : ' + dmGlobal.g_RUCEmpresa;
  WorkSheet.Cells[3,1].font.Bold := True;
  WorkSheet.Cells[3,1] := 'Consolidado Anual de Gastos';
  WorkSheet.Cells[4,1] := iif (rgRango.ItemIndex = 0, 'Mensual del mes de ','Acumulado al mes de ') +  NombreMes(StrToInt(dmGlobal.g_Mes));
  WorkSheet.Cells[5,1] := 'Cuenta 9' + edtDigito.Text;
  worksheet.range['A3:O5'].HorizontalAlignment := xlHAlignCenterAcrossSelection;
  WorkSheet.cells[_FilaTitulos,1] := 'Cuenta';
  WorkSheet.cells[_FilaTitulos,3] := 'Enero';
  WorkSheet.cells[_FilaTitulos,4] := 'Febrero';
  WorkSheet.cells[_FilaTitulos,5] := 'Marzo';
  WorkSheet.cells[_FilaTitulos,6] := 'Abril';
  WorkSheet.cells[_FilaTitulos,7] := 'Mayo';
  WorkSheet.cells[_FilaTitulos,8] := 'Junio';
  WorkSheet.cells[_FilaTitulos,9] := 'Julio';
  WorkSheet.cells[_FilaTitulos,10] := 'Agosto';
  WorkSheet.cells[_FilaTitulos,11] := 'Setiembre';
  WorkSheet.cells[_FilaTitulos,12] := 'Octubre';
  WorkSheet.cells[_FilaTitulos,13] := 'Noviembre';
  WorkSheet.cells[_FilaTitulos,14] := 'Diciembre';
  WorkSheet.cells[_FilaTitulos,15] := 'Total';
  worksheet.range['A5:O5'].HorizontalAlignment := xlHAlignCenter;
  i:= _FilaTitulos + 1;
  _FilaIni := i;
  _quiebre := 0;
  DBGrid1.DataSource.DataSet.First;
  _Campo := Izquierda(DBGrid1.Fields[0].AsString, StrToInt(edtDigito.Text));
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    for J := 0 to DBGrid1.FieldCount -1 do
      case DBGrid1.Fields[J].DataType of
        ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
          WorkSheet.Cells[I, J +1] := DBGrid1.Fields[J].AsInteger;
        ftBCD, ftFloat, ftCurrency: // Numérico con decimales
          WorkSheet.Cells[I, J +1] := DBGrid1.Fields[J].AsFloat;
        ftDateTime, ftDate, ftTime: // Fecha y Hora
          WorkSheet.Cells[I, J +1] := DBGrid1.Fields[J].AsDateTime;
        else // Todo lo demas caracteres
          WorkSheet.Cells[I, J +1] := DBGrid1.Fields[J].AsString;
      end;
      inc (i);
      ProgressBarXls.Position := ProgressBarXls.Position +1;
      DBGrid1.DataSource.DataSet.Next;
      if edtDigito.Text <> Derecha(dmGlobal.g_NivelCuenta,1) then
        begin
          if (_Campo <> Izquierda(DBGrid1.Fields[0].AsString, StrToInt(edtDigito.Text))) or (DBGrid1.DataSource.DataSet.Eof) Then
            begin
              _Campo := Izquierda(DBGrid1.Fields[0].AsString, StrToInt(edtDigito.Text));
              WorkSheet.cells[i,3] := '=Sum(C' + IntToStr(_Filaini) + ':C' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,4] := '=Sum(D' + IntToStr(_Filaini) + '' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,5] := '=Sum(E' + IntToStr(_Filaini) + ':E' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,6] := '=Sum(F' + IntToStr(_Filaini) + ':F' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,7] := '=Sum(G' + IntToStr(_Filaini) + ':G' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,8] := '=Sum(H' + IntToStr(_Filaini) + ':H' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,9] := '=Sum(I' + IntToStr(_Filaini) + ':I' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,10] := '=Sum(J' + IntToStr(_Filaini) + ':J' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,11] := '=Sum(K' + IntToStr(_Filaini) + ':K' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,12] := '=Sum(L' + IntToStr(_Filaini) + ':L' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,13] := '=Sum(M' + IntToStr(_Filaini) + ':M' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,14] := '=Sum(N' + IntToStr(_Filaini) + ':N' + IntToStr(i-1) + ')';
              WorkSheet.cells[i,15] := '=Sum(O' + IntToStr(_Filaini) + ':O' + IntToStr(i-1) + ')';
              Inc(_quiebre);
              _posiciones [_quiebre] := i;
              Inc(i);
              _FilaIni := i;
            end;
        end;
  end;
  if _posiciones[1] <> 0 then
    Begin
      for _c := 1 to 13 do
        Begin
        _Campo := '';
        for _f := 1 to 10 do
          if _posiciones [_f] <> 0 then
            _Campo := _campo + '+' + _letras[_C]  + IntToStr(_posiciones[_f]);
            WorkSheet.cells [i,2 + _c] := '= Sum( ' + _Campo + ')';
        End;
    End;
  WorkSheet.Cells.Columns.AutoFit;
  WorkBook.SaveAs(fname);
  WorkBook.Close(fName);
  Excel.Quit;
end;


lo que si debes tener cuidado es en la version del excel que tengas.. he visto algunos casos en que se debe colocar =SUMA... en lugar de =SUM
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
sumar columna Memo6015 OOP 11 27-01-2011 02:06:33
sumar columna sql anubis SQL 8 29-12-2010 01:59:44
Sumar Columna en StringGrig carlosh2006 Varios 2 28-08-2007 03:23:53
Sumar columna de un dbgrid Choclito Varios 0 24-07-2006 07:47:08
sumar columna de un dbgrid jpcancino Conexión con bases de datos 4 11-03-2004 16:33:37


La franja horaria es GMT +2. Ahora son las 11:48:43.


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