|
*!* 創(chuàng)建臨時(shí)表并按表格列的索引號(hào)排序 CREATE CURSOR curTemp (CntSource C(254),ColIndex N(15) UNIQUE) SET ORDER TO ColIndex
cAlias=Thisform.Grid1.RecordSource SELECT (cAlias) FOR i=1 TO Thisform.Grid1.ColumnCount &&讀取要打印的字段信息 IF JUSTSTEM(Thisform.Grid1.Columns(i).Header1.Picture)=\"selected\" INSERT INTO curTemp (CntSource,ColIndex) VALUES ; (Thisform.Grid1.Columns(i).ControlSource,Thisform.Grid1.Columns(i).ColumnOrder) 此句是什么意思? ENDIF ENDFOR
cTmp=\"\" SELECT curTemp SCAN &&生成SQL語句的字段 cTmp=cTmp+ALLTRIM(curTemp.CntSource)+\",\" ENDSCAN
USE IN curTemp cTmp=SUBSTR(cTmp,1,LEN(cTmp)-1) &&刪除尾部的逗號(hào) cSQL=\"SELECT \"+cTmp+\" FROM \"+cAlias+\" INTO CURSOR curPrint\" &&生成SQL語句 &cSQL &&&運(yùn)行提示有問題 SELECT curPrint nCount=AFIELDS(aPrtArray) &&將表結(jié)構(gòu)信息保存在數(shù)組中 IF NOT USED(\"tblPrtSet\") USE tblPrtSet ALIAS tblPrtSet IN 0 ENDIF GO TOP
*!* 設(shè)置EXCEL表格頭 oExl=CREATEOBJECT(\"Excel.Application\") oExl.Workbooks.Add oExl.Worksheets(\"sheet1\").Activate oExl.ActiveSheet.PageSetup.TopMargin=tblPrtSet.TopMarg/0.035 &&設(shè)置上邊距 oExl.ActiveSheet.PageSetup.BottomMargin=tblPrtSet.BottMarg/0.035 &&下邊距 oExl.ActiveSheet.PageSetup.LeftMargin=tblPrtSet.LeftMarg/0.035 &&左邊距 oExl.ActiveSheet.PageSetup.RightMargin=tblPrtSet.RightMarg/0.035 &&右邊距 oExl.ActiveSheet.PageSetup.PrintTitleRows =\"$1:$2\" &&設(shè)置頂端標(biāo)題行 oExl.ActiveSheet.PageSetup.PaperSize=tblPrtSet.PaperSize &&紙張大小 oExl.ActiveSheet.PageSetup.Orientation=tblPrtSet.Orientate &&紙張方向 oExl.ActiveSheet.PageSetup.RightHeader=\"第&P頁 共&N頁\" oExl.ActiveSheet.PageSetup.HeaderMargin=tblPrtSet.HeaderMarg/0.035 &&頁眉 oExl.ActiveSheet.PageSetup.FooterMargin=tblPrtSet.FooterMarg/0.035 &&頁腳 oExl.ActiveSheet.PageSetup.Zoom=tblPrtSet.Zoom &&縮放比例 oExl.Cells(1,1).Value=Thisform.Text1.Value oExl.Cells(1,1).Font.Name=\"黑體\" oExl.Cells(1,1).Font.Size=14 oExl.Cells(1,1).HorizontalAlignment=3 &&水平居中 oExl.Range(To26(1)+\"1:\"+To26(nCount)+\"1\").Merge &&合并列
*!* 循環(huán)生成表格頭 FOR i=1 TO nCount oExl.ActiveSheet.Columns(i).Font.Size=9 oExl.ActiveSheet.Columns(i).ColumnWidth=10 oExl.Cells(2,i).Value=aPrtArray(i,1) oExl.Cells(2,i).HorizontalAlignment=3 &&水平居中 ENDFOR
*!* 生成表內(nèi)容 SELECT curPrint nRow=3 SCAN FOR nColumn=1 TO nCount cField=aPrtArray(nColumn,1) oExl.Cells(nRow,nColumn).Value=&cField ENDFOR nRow=nRow+1 ENDSCAN oExl.Range(\"A2:\"+To26(nCount)+ALLTRIM(STR(nRow-1))).Borders.LineStyle=1 &&細(xì)線 oExl.Range(\"a2:\"+To26(nCount)+ALLTRIM(STR(nRow-1))).Borders.Weight=2 &&線粗細(xì) oExl.Visible=.T. &&顯示Excel *!* oExl.ActiveSheet.PrintOut &&直接打印輸出
這其實(shí)是一條INSERT - SQL 命令分成兩行來寫而已,這條命令的意思應(yīng)該不用我說了吧,真不懂就查查幫助文件
INSERT INTO curTemp (CntSource,ColIndex) VALUES (Thisform.Grid1.Columns(i).ControlSource,Thisform.Grid1.Columns(i).ColumnOrder)
至于 &cSQL 為什么會(huì)出錯(cuò),是因?yàn)樽兞縞Tmp里面是空串,也就是說curTemp里面沒有記錄,為什么會(huì)沒有記錄呢?請(qǐng)?jiān)诘谝粋€(gè)for循環(huán)里面找原因。我看大概是運(yùn)行的時(shí)候你一個(gè)表頭都沒有選擇,而這個(gè)FOR循環(huán)就是要將表單中的表格控件里所選擇的表頭所代表的字段名存入臨時(shí)表curTemp。
所以這個(gè)示例程序還是有待完善的,比如它必須通過那個(gè)“打開表”的按鈕來選擇表,這樣才會(huì)應(yīng)用自定義表頭,如果你運(yùn)行表單的時(shí)候當(dāng)前工作區(qū)有表打開它里面的表格也會(huì)顯示,但是這時(shí)沒有應(yīng)用自定義表頭,后面輸出就會(huì)出錯(cuò);而你一個(gè)表頭都沒有選擇的時(shí)候,curTemp里面就沒有實(shí)際的內(nèi)容,從而變量cSQL就是空串,那么&SQL這句就會(huì)出錯(cuò)。
|