电竞比分网-中国电竞赛事及体育赛事平台

分享

張洪舉權(quán)威指南中用Excel實(shí)現(xiàn)自定義報(bào)表輸出

 Alkaid2015 2013-10-24

*!* 創(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ò)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多