Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Subtotales de Excel (https://www.clubdelphi.com/foros/showthread.php?t=44509)

adfa76 07-06-2007 21:57:57

Subtotales de Excel
 
Hola gente.
Estoy intentando usar desde un programa hecho en Delphi 7 la función subtotal de Excel.

Código Delphi [-]
excel.range['a2:g50'].Subtotal(1,-4157,4,false,false,true);

Una macro de excel al grabarla haciendo los subtotales hace esto:

Cita:

Sub Macro1()
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(4,6), _
Replace:=False, PageBreaks:=False, SummaryBelowData:=True
End Sub
Este tema por lo que vi fue tratado en este post.
21959
Si bien la solución encontrada por tutuk es funcional me gustaria poder hacerla un poco más elegante (sobre todo porque no es tan sencillo para mi aplicacion el ir recorriendo las celdas para pegar la formula).

El problema radica en el parametro "TotalList" de la funcion que segun la ayuda del Excel recibe un Variant con una matriz adentro.
Si ejecuto el programa tal cual la sentencia que esta arriba funciona, pero no le he encontrado la vuelta para poder totalizar más de una columna.

He provado usar la funcion varArrayOf([4,6]) por ejemplo para totalizar esas 2 columnas pero no he tenido suerte, hay un tema con los tipos y no me doy cuenta que es.

Alguien tiene como hacerlo funcionar.

Saludos

adfa 11-06-2007 17:05:24

Bueno, me contesto yo :) :)
Eso que yo hacia; lo hacia creando un objeto con:
Código Delphi [-]
var
   excel: Variant;
   excel  := CreateOleObject('Excel.Application');
//varias escrituras en celdas
   excel.selection.Subtotal(1,-4157,varArrayOf([4]),false, false,true);
Bien, esto funciona de maravilla.
Ahora esto no funciona, da un error el Excel.
Código Delphi [-]
var
   excel: Variant;
   excel  := CreateOleObject('Excel.Application');
//varias escrituras en celdas
   excel.selection.Subtotal(1,-4157,varArrayOf([4,5]),false, false,true);

Hice la prueba con los componentes de la paleta server.
Código Delphi [-]
var
   hoja : _WORKSHEET;
   libro : _WORKBOOK;
   i: integer;
begin
   libro := ExcelApplication1.Workbooks.Add(NULL, 0);
   Hoja := Libro.Sheets[1] as WORKSHEET;
//varias escrituras en celdas
hoja.Range[hoja.Cells.Item[1,1],hoja.Cells.Item[4,3]].Subtotal(1,xlSum,varArrayOf([4,5]),false,false,xlSummaryBelow);
  ExcelApplication1.Visible[0] := true;
Esto funciona perfecto, ahora bien encontre la solución pero tengo que reescribir casi toda la aplicación para usar los componentes de la solapa server. :(
Pero bueno lo hago, no me da pereza aunque me falta el tiempo.
Lo que no me gusta es quedarme con la intriga, alguien puede decirme porque el varArrayOf en un caso funciona y en otro no??

Saludos y gracias


La franja horaria es GMT +2. Ahora son las 04:00:07.

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