>TEXT to m.lcSQL noshow >Select c.cust_id, c.company, ; > o.order_id, o.order_date, ; > e.First_Name-(' '+e.Last_Name) As Employee, ; > oi.line_no, p.prod_name,; > oi.unit_price, oi.quantity; > FROM testdata!customer c ; > INNER Join testdata!orders o; > ON c.cust_id = o.cust_id ; > INNER Join testdata!Employee e ; > ON o.emp_id = e.emp_id ; > INNER Join testdata!orditems oi; > ON o.order_id = oi.order_id ; > INNER Join testdata!products p ; > ON oi.product_id = p.product_id ; > order By p.prod_name >ENDTEXT >m.lcSQL = Chrtran(m.lcSQL,';'+Chr(13)+Chr(10),'') > >lcPivotTableName = 'myCustomers' >lcConnPath = Sys(5)+Curdir() >lcConnStr = [Provider=VFPOLEDB.1;Data Source=]+lcConnPath > >Alines(laRowFields,'prod_name') >Alines(laColumnFields,'Employee') >Alines(laPageFields,'cust_id') > >#include xlConstants.h >oExcel = Createobject('Excel.Application') >With oExcel > With .Workbooks.Add > _CreatePivotTable(.ActiveSheet.Range('A3'),; > m.lcPivotTableName,m.lcSQL,; > m.lcConnStr) > With .ActiveSheet.PivotTables(lcPivotTableName) > .DisplayErrorString = .T. > .MergeLabels = .T. > .SmallGrid = .F. > _AddPivotFields(@laRowFields, @laColumnFields, @laPageFields) > .PivotFields('Quantity').Orientation = xlDataField > Endwith > Endwith > .Visible = .T. >Endwith > >Function _CreatePivotTable >Lparameters toDestination,tcPivotTableName, tcSQL,tcConnStr >With .PivotCaches.Add(xlExternal) > .Connection = 'OLEDB;'+m.tcConnStr > .CommandType = 2 && xlCmdSQL > .CommandText = m.tcSQL > .Maintainconnection = .F. > .EnableRefresh = .F. > .BackGroundQuery = .T. > .CreatePivotTable(m.toDestination, m.tcPivotTableName) >Endwith >Endfunc > >Function _AddPivotFields >Lparameters taRowFields, taColumnFields, taPageFields >If !Empty(taPageFields[1]) > .AddFields( @taRowFields, @taColumnFields, @taPageFields ) && Fields added >Else > .AddFields( @taRowFields, @taColumnFields ) >Endif >Endfunc >>Cetin
>>>* Pivottable sampling for VFP3-5 - Excel97 >>>* Current wizard doesn't work for Excel97 >>>* VFP6 users probably don't need this >>>* This is a simple sample and dummy with regard to >>>* data choosen for pivot table >>>* Pivot tables are kind of a crosstab tables >>>* Data choosen is testdata!orditems >>>* First a cursor is constructed having order_date, prod_name, >>>* employee_name, customer.company and quantity >>>* Cursor is copied to an XL5 file - faster then using ODBC >>>* from Excel or writing directly to Excel with datatoclip() >>>* Unless data is huge >>>* XLS is opened >>>* company set as page field >>>* employee set as column field >>>* Product and Dates are set as row field to demonstrate multipl fields setting >>>* When you remove dates you get sum() grouped by product >>> >>>SET safety off >>>SET century on >>>#DEFINE DataPath "" >>> >>>SELECT b.emp_id ,a.company, b.order_date, d.prod_name, c.quantity ; >>> FROM (DataPath+"customer") a; >>> INNER JOIN (DataPath+"orders") b; >>> INNER JOIN (DataPath+"orditems") c; >>> INNER JOIN (DataPath+"products") d; >>> ON d.product_id = c.product_id ; >>> ON c.order_id = b.order_id ; >>> ON b.cust_id = a.cust_id; >>> order by 1,2,3 ; >>> into cursor myCursor ; >>> nofilter >>> >>>SELECT a.first_name + a.last_name as Employee, ; >>> b.company, b.prod_name, b.quantity, b.order_date as "dates" ; >>> from (DataPath+"employee") a; >>> INNER join myCursor b; >>> on a.emp_id = b.emp_id ; >>> into cursor pivotdata >>> >>>COPY to pivotdata type xl5 && Copied to xls file >>>lcRows = ltrim(str(reccount()+1)) && Including header line >>>lcCols = ltrim(str(fcount())) >>>* Pivot sample >>>oExcel = createobject("Excel.application") >>>#DEFINE xlDatabase 1 >>> >>>#DEFINE xlRowField 1 >>>#DEFINE xlColumnField 2 >>>#DEFINE xlPageField 3 >>>#DEFINE xlDataField 4 >>> >>>WITH oExcel >>> .visible = .t. >>> .workbooks.open(sys(5)+curdir()+"pivotdata.xls") && Open saved xls >>> WITH .ActiveWorkBook >>> .Sheets("Pivotdata").activate >>> .ActiveSheet.PivotTableWizard(xlDatabase, ; >>> "pivotdata!R1C1:R"+lcRows+"C"+lcCols,"", "PivotTable1") >>>&& Wizard sets Range and name >>> WITH .ActiveSheet.PivotTables("PivotTable1") >>> dimension flist[2] >>> flist[1]="prod_name" >>> flist[2]="dates" >>> .AddFields( @flist, "employee","company" ) && Fields added >>>* Add rowfields w/o an array >>>* .AddFields( "prod_name", "employee", "company" ) && Fields added >>>* .PivotFields("dates").Orientation = xlRowField >>>&& Dates added as second row field >>>* Add rowfields w/o an array >>> .PivotFields("quantity").Orientation = xlDataField >>>&& Quantity set as data field >>> .PivotFields("company").Subtotals(1) = .t. >>> .PivotFields("company").Subtotals(1) = .f. >>> ENDWITH >>> ENDWITH >>>ENDWITH >>>>>>Cetin