Jump to content


Photo

suma cuando se exporta a excel


  • Please log in to reply
13 replies to this topic

#1 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 posts

Posted 31 October 2012 - 12:18 PM

que hay amigoas aqui estoy con una duda ya que esporto un reporte a excel , ahi todo esta bien pero quisiera saber la manera para al final sumar todas las columnas pero no he logrado hacerlo a continuacion anexo mi codigo que utilizo para exportar a excel, esperando me puedan ayudar :



delphi
  1. procedure TForm5.BitBtn6Click(Sender: TObject);
  2. var Excel : Variant;
  3. var Libro : Variant;
  4. var i:integer;
  5. var j:integer;
  6. var _FilaIni: integer;
  7.  
  8. begin
  9.  
  10. Excel := CreateOleObject ('Excel.Application');
  11.  
  12.  
  13. Excel.Visible := True;
  14. // Agrega un libro.
  15. Excel.WorkBooks.Add (-4167);
  16. // Le asigna un nombre al libro
  17. Excel.WorkBooks[1].WorkSheets[1].Name := 'Reporte';
  18. // Hace un puntero al libro del Excel.
  19. Libro := Excel.WorkBooks[1].WorkSheets['Reporte'];
  20. excel.worksheets[1].Range['B1','B1'].ColumnWidth :=45;
  21. excel.worksheets[1].Range['C1','C1'].ColumnWidth :=13;
  22. excel.worksheets[1].Range['D1','E1'].ColumnWidth :=15;
  23. excel.worksheets[1].Range['F1','F1'].ColumnWidth :=16;
  24. excel.worksheets[1].Range['G1','H1'].ColumnWidth :=9;
  25. excel.worksheets[1].Range['I1','I1'].ColumnWidth :=14;
  26. Libro.Cells.Item[1,1].Font.Bold:=True;
  27. Libro.Cells.Item[1,1].font.size:=16;
  28.  
  29. Libro.Cells.Item[2,1]:= ' Inventario en proceso del departamento: '+dep2.Text + '  A  ' +dep3.Text;
  30. Libro.Cells.Item[2,1].Font.Bold:=True;
  31.  
  32. Libro.Cells.Item[3,1].Font.Bold:=True;
  33. Libro.Cells.Item[3,2].Font.Bold:=True;
  34. Libro.Cells.Item[3,3].Font.Bold:=True;
  35. Libro.Cells.Item[3,4].Font.Bold:=True;
  36. Libro.Cells.Item[3,5].Font.Bold:=True;
  37. Libro.Cells.Item[3,6].Font.Bold:=True;
  38. Libro.Cells.Item[3,7].Font.Bold:=True;
  39. Libro.Cells.Item[3,8].Font.Bold:=True;
  40. Libro.Cells.Item[3,9].Font.Bold:=True;
  41.  
  42.  
  43.  
  44. Query.Open;
  45. i:=3;
  46.  
  47. query.SQL.Clear;
  48. query.SQL.Add('SELECT * FROM arm0062 WHERE departamento>=:inidep and departamento<=:findep and tipo_material>=:inimat and tipo_material<=:finmat order by  codigo asc ');
  49.  
  50. query.ParamByName('inidep').Asstring:=inidep.Text;
  51. query.ParamByName('findep').Asstring:=findep.Text;
  52. query.ParamByName('inimat').Asstring:=inimat.Text;
  53. query.ParamByName('finmat').Asstring:=finmat.Text;
  54. query.Open;
  55.  
  56. while not Query.EOF do
  57. begin
  58.  
  59. Libro.Cells [1,1] := ' CLASIC AND BASIC SA DE CV';
  60. Libro.Cells [3,1] := 'codigo';
  61. Libro.Cells [3,2] := 'Nombre';
  62. Libro.Cells [3,3] := 'departamento';
  63. Libro.Cells [3,4] := 'tipo de material';
  64. Libro.Cells [3,5] := 'cantidad piezas';
  65. Libro.Cells [3,6] := 'cantidad material';
  66. Libro.Cells [3,7] := 'unidad';
  67. Libro.Cells [3,8] := 'costo';
  68. Libro.Cells [3,9] := 'total';
  69.  
  70. i :=i+1;
  71.  
  72. Libro.Cells [i,1] := Query.FieldByName ('codigo').AsString;
  73. Libro.Cells [i,2] := Query.FieldByName ('nombre').AsString;
  74. Libro.Cells [i,3] := Query.FieldByName ('departamento').AsString;
  75. Libro.Cells [i,4] := Query.FieldByName ('tipo_material').AsString;
  76. Libro.Cells [i,5] := Query.FieldByName ('cant_piezas').AsString;
  77. Libro.Cells [i,6] := Query.FieldByName ('cant_material').AsString;
  78. Libro.Cells [i,7] := Query.FieldByName ('unidad').AsString;
  79. Libro.Cells [i,8] := Query.FieldByName ('costo').AsString;
  80. Libro.Cells [i,9] := Query.FieldByName ('total').AsString;
  81.  
  82.  
  83. Query.Next;
  84.  
  85. end;
  86.  
  87. Query.Close;
  88. end;


  • 0

#2 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 posts

Posted 31 October 2012 - 12:55 PM

un ejemplo de lo que queiro seria algo asi:


delphi
  1. codigo  nombre      cantidad piezas      costo        total
  2. a01        comoda                    5                100      200
  3. a02          buro                    12                    2              24
  4.  
  5.  
  6.                         total          17                                    224


  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 31 October 2012 - 01:11 PM

puedes hacerlo de dos maneras:

1- Incluir en el código tantas variables como necesites e ir sumando fila por fila los valores y al finalizar el ciclo agregar una fila donde coloques los valores acumulados.

2- agregar una fórmula a excel al final de cada columna de la forma:
80.Libro.Cells [i,9].formula := 'SUM(A2:A50)';

  • 0

#4 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 posts

Posted 31 October 2012 - 01:29 PM

gracias por responder lo hice como la segunda opcion que me diste pero en excel al final donde va la suma me pne: #?NOMBRE? y con solo darle enter de nuevo ya sale la suma correcta:



delphi
  1. Libro.Cells [i+1,9] := '=SUMA(I4:I255)';



sabes que el rango de registros no siempre es el mismo y con este ejemplo el rango es fijo creo que ahi abria problema
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 31 October 2012 - 01:36 PM

no tendría que ser de la manera?

libro.cells[].formula

prueba cambiando sum por suma
  • 0

#6 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 posts

Posted 31 October 2012 - 02:00 PM

con ese cambio ya me hace la  suma ahortia nomas traigo el inconveniente de que cambian los rangos de registros que entran entonces si pongo '=SUMA(I4:I255)'; y son 300 registros ya me pone cero
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 31 October 2012 - 03:09 PM

Si inicias siempre en la línea 4 y tu contador de fila es I, puedes usar I para saber de que celda a que celda debe sumarse... saludos..
  • 0

#8 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 posts

Posted 31 October 2012 - 03:58 PM

si siempre inicio en la fila 4, pero me podrias dar un ejemplo usando I asi como lo mencionas porque no logro comprenderlo bien
  • 0

#9 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 31 October 2012 - 04:16 PM

si siempre inicio en la fila 4, pero me podrias dar un ejemplo usando I asi como lo mencionas porque no logro comprenderlo bien


Tu mismo usas esa i para ir recorriendo tu query e insertando los datos, revisa tu primer hilo  (y)... Al terminar el ciclo i se queda con un valor que te dice la última fila que insertaste y eso te puede ayudar para saber cuál será tu rango a sumar...

Saludox ! :)


  • 0

#10 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 posts

Posted 31 October 2012 - 04:39 PM

que hay,si esa parte si la comprendo lo que no logro saber es como hacerle para que cambie esta parte del rango (SUMA(I4:I255))  usando esa variable ahi es donde la logica no me alcanza jeje
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 31 October 2012 - 04:50 PM

que hay,si esa parte si la comprendo lo que no logro saber es como hacerle para que cambie esta parte del rango (SUMA(I4:I255))  usando esa variable ahi es donde la logica no me alcanza jeje


Que te parece si ponemos en práctica la función format() de la unidad SysUtils.



delphi
  1. libro.cells[X].formula := format( '=SUMA(I4:I%d)', [I+4] );



Saludos
  • 0

#12 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 posts

Posted 31 October 2012 - 05:14 PM

muchas gracias por sus respuestas ya quedo lo hice de la siguiente forma:



delphi
  1. libro.cells[i+1,9].formula:= format( '=SUM(I4:I%d)', [I] );



ya nomas lo que me faltaria para que quede perfecto es para configurar los margenes ya que al ver la hoja en vista previa no esta configurada pero creo que tendre que abrir otro hilo
  • 0

#13 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 31 October 2012 - 05:19 PM

muchas gracias por sus respuestas ya quedo lo hice de la siguiente forma:



delphi
  1. libro.cells[i+1,9].formula:= format( '=SUM(I4:I%d)', [I] );



ya nomas lo que me faltaria para que quede perfecto es para configurar los margenes ya que al ver la hoja en vista previa no esta configurada pero creo que tendre que abrir otro hilo


Yeap !  (y)

Saludox ! :)
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 31 October 2012 - 05:27 PM

muchas gracias por sus respuestas ya quedo lo hice de la siguiente forma:



delphi
  1. libro.cells[i+1,9].formula:= format( '=SUM(I4:I%d)', [I] );



ya nomas lo que me faltaria para que quede perfecto es para configurar los margenes ya que al ver la hoja en vista previa no esta configurada pero creo que tendre que abrir otro hilo


Tengo una duda, si comienzas en le renglón 4 y son 100 registros, me parece que el último registro deberá estar en el renglón 104, por eso es que sume 4 a I.

De cualquier forma, me alegra que éste hilo quede como [RESUELTO] (y)

Edito: Ya vi, I la inicializas con 3. (y) No he dicho nada :)

Saludos
  • 0




IP.Board spam blocked by CleanTalk.