> Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(5), _ > Replace:=True, PageBreaks:=True, SummaryBelowData:=True >>I have
> >oExcel=CREATEOBJECT("Excel.Application") >oExcel.visible= .T. > >oW=oExcel.Workbooks.Add(lcTemplate) >ow.Worksheets[1].select > >oRange = oExcel.ActiveSheet.Range("A7:F"+TRANSFORM(6+lnRecCount)) > >oExcel.ActiveSheet.paste(oRange) >** now I want excel to subtotal by column a > > > ****Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(5), _ > Replace:=True, PageBreaks:=True, SummaryBelowData:=True >>
Select Cust_id, o.Order_id, Product_Id, Unit_price, Quantity ; from orders o inner join orditems oi on o.order_id = oi.order_id ; order by cust_id, o.order_id ; into Cursor crsTemp lcXLSFile = Sys(5)+Curdir()+'myOrders1.xls' Copy To (lcXLSFile) Type Xls Close Databases all Dimension laSubtotal[3] laSubtotal[1] = 4 && Unit_price laSubtotal[2] = 5 && Quantity laSubtotal[3] = 6 && Will use later #include "xlConstants.h" oExcel = Createobject("excel.application") With oExcel .Workbooks.Open(lcXLSFile) With .ActiveWorkbook.ActiveSheet lnRows = .UsedRange.Rows.Count && Get current row count lcFirstUnusedColumn = _GetChar(laSubtotal[3]) && Get column in Excel A1 notation * Instead of orders order_net field use Excel calculation for net prices .Range(lcFirstUnusedColumn+'2:'+; lcFirstUnusedColumn+Transform(lnRows)).FormulaR1C1 = ; "=RC[-2]*RC[-1]" .Range(lcFirstUnusedColumn+'1').Value = 'Extended Price' && Place header .Range('D:'+lcFirstUnusedColumn).NumberFormat = "$#,##0.0000" && Format columns * Subtotal grouping by customer then by order .UsedRange.Subtotal(1, xlSum, @laSubtotal) .UsedRange.Subtotal(2, xlSum, @laSubtotal,.f.,.f.,.f.) .UsedRange.Columns.Autofit && Autofit columns Endwith .Visible = .T. Endwith * Return A, AA, BC etc noation for nth column Function _GetChar Lparameters tnColumn && Convert tnvalue to Excel alpha notation If tnColumn = 0 Return "" Endif If tnColumn <= 26 Return Chr(Asc("A")-1+tnColumn) Else Return _GetChar(Int(Iif(tnColumn % 26 = 0,tnColumn - 1, tnColumn) / 26)) + ; _GetChar((tnColumn-1)%26+1) EndifCetin