Foxwx微信公众号管理软件---同心软件 -以高级编程语言进行微信公众号管理,我们一直在努力!

Excel智能导入Grid

*********************************

***Excel智能导入Grid

*!*Create By Alan Hung

*!*Create Date:2016-06-29

**********************************

FUNCTION myExcelToGrid

        LPARAMETERS LoGrid

        IF VARTYPE(LoGrid)<>'O'

                RETURN

        ENDIF


        IF LOWER(LoGrid.BaseClass)<>'grid'

                RETURN

        ENDIF


        IF !USED(LoGrid.recordsource)

                RETURN

        ENDIF


        LcFile=GETFILE('XLS,XLSX,XLSB,XLSM','请选择您要导入的文档')

        IF EMPTY(LcFile)

                RETURN

        ENDIF

        oExcelApp=''


        TRY

                oExcelApp=Createobject("excel.application")

        CATCH

        FINALLY

        ENDTRY


        IF VARTYPE(oExcelApp)<>'O'

                MESSAGEBOX('创建Excel对象失败,程序将中止!',64,'Error')

                RETURN

        ENDIF


        nGridCount=LoGrid.ColumnCount

        OldSelect=SELECT()

        oExcelApp.Application.workbooks.Open(LcFile)

        nExcelRows=oExcelApp.ActiveSheet.UsedRange.Rows.Count

        nExcelCols=oExcelApp.ActiveSheet.UsedRange.Columns.Count


        DIMENSION acol(nGridCount)

        lcAlias=ALLTRIM(LoGrid.recordsource)

        &&智能对列

        Lok=.f.

        FOR i=1 TO nGridCount

                LcHeaderCaption=ALLTRIM(UPPER(LoGrid.columns(i).header1.caption))

                FOR j=1 TO nExcelCols

                        IF ALLTRIM(UPPER(oExcelApp.cells(1,j).Value))==LcHeaderCaption

                                acol(i)=j

                                Lok=.t.

                        ENDIF

                ENDFOR

        ENDFOR

        IF Lok=.f.

                oExcelApp.Quit

                RELEASE oExcelApp

                SELECT (OldSelect)

                RETURN

        ENDIF

        cMessageText ='系统正在导入数据...'

        WAIT WINDOW cMessageText AT srow()/2-2,(scols()-len(cMessageText))/2  NOWAIT NOCLEAR

        LcValue=''

        ZAP IN (lcAlias)

        FOR nRow= 2 TO nExcelRows

                SELECT (lcAlias)

                APPEND BLANK  IN (lcAlias)

                FOR i=1 TO nGridCount

                        IF EMPTY(acol(i))

                                LOOP

                        ELSE

                                LcField=GETWORDNUM(LoGrid.columns(i).controlsource,2,'.')

                               LcValue=ALLTRIM(TRANSFORM(IIF(ISNULL(oExcelApp.cells(nRow,acol(i)).Value),'',NVL(oExcelApp.cells(nRow,acol(i)).Value,''))))

                                LfType=TYPE(LcField)

                                DO CASE

                                        CASE LfType='T'

                                                replace &LcField WITH CTOT(LcValue) IN (lcAlias)

                                        CASE LfType='D'

                                                replace &LcField WITH CTOD(LcValue) IN (lcAlias)

                                        CASE INLIST(LfType,'N','Y','B','I','F')

                                                replace &LcField WITH Val(LcValue) IN (lcAlias)

                                        CASE LfType='L'

                                                replace &LcField WITH IIF(INLIST(UPPER(LcValue),'YES','1','T','.T.'),.t.,.f.) IN (lcAlias)

                                        OTHERWISE

                                                replace &LcField WITH LcValue IN (lcAlias)

                                ENDCASE

                        ENDIF

                ENDFOR

        ENDFOR

        oExcelApp.Quit

        RELEASE oExcelApp

        SELECT (OldSelect)

        GO TOP IN (lcAlias)

        LoGrid.setfocus

        Logrid.autofit

        WAIT CLEAR

ENDFUNC


2018年6月23日 | 发布:admin | 分类:程序开发 | 评论:0

发表留言: