注册 登录
编程论坛 VFP论坛

多个WORD、EXCEL统计数据合并

王咸美 发布于 2022-10-10 10:07, 1756 次点击
如何合并多个WORD、EXCEL到DBF表文件中
同一文件夹下有“ 2月份杂工开支明细帐.doc”、“ 3月份杂工开支明细帐.doc”、“ 4月份杂工开支明细帐.xls”、“ 5月份杂工开支明细帐.xls”。这四个文件字段名不同,只有姓名字段相同,如何将这四个表格文件合并到Zagongtongji.dbf表文件中,请高手赐教,万分感谢!!!
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

最终用VFP代码生成如下表文件:
只有本站会员才能查看附件,请 登录
8 回复
#2
吹水佬2022-10-10 14:07
各自转出DBF或TXT,再APPEND到Zagongtongji.dbf,再再统计:除草 栽树 施肥 修路 粉刷 其他 合计
#3
aqyejun2022-10-11 10:37
建议:首先统一每个月份的杂工开支明细帐的表字段值与Zagongtongji.dbf表一致,再逐个追加到temp表中,最后按照姓名字段分组汇总生成Zagongtongji.dbf表。
#4
fyyylyl2022-10-11 17:33
CLOSE DATABASES
CREATE CURSOR tmp(姓名 C(10),除草 N(10),栽树 N(10),施肥 N(10),修路 N(10),粉刷 N(10),其他 N(10),合计 N(10))
WorkPath=GETDIR("","","请选择待导入文件夹:")
IF !EMPTY(WorkPath)
    nFiles_doc=Adir(docArray,WorkPath+'*.doc')
    IF nFiles_doc>0
        FOR i=1 TO nFiles_doc
                         cWaitmesg="正在提取数据 ,请稍候......"+ALLTRIM(STR(i))+"/"+ALLTRIM(STR(nFiles_doc))+"----DOC"
                Wait Window cWaitmesg  Nowait At srow()/2,(scol()-len(cWaitmesg))/2
            docfile=WorkPath+docArray(i,1)
            dole=CREATEOBJECT("Word.Application")
            doc=dole.Documents.Open(docfile)
            FOR EACH tab IN doc.tables
                nRow=tab.rows.count  &&总行数
                nCol=tab.columns.count  &&总列数
                cstr = 'CREATE Table xxx ('+STRTRAN(STRTRAN(tab.Cell(1,1).Range.Text,CHR(7),'') ,CHR(13),'') + ' C(20)'
                FOR j=2 TO nCol
                    cstr=cstr+','+STRTRAN(STRTRAN(tab.Cell(1,j).Range.Text,CHR(7),'') ,CHR(13),'') + ' N(10)'
                ENDFOR
                cstr = cstr+')'
                &cstr
                FOR k=2 TO nRow        &&逐行读入临时表
                    cStr='INSERT INTO xxx VALUES (STRTRAN(STRTRAN(tab.Cell('+ALLTRIM(STR(k))+',1).Range.Text,CHR(7),""),CHR(13),"")'
                    FOR l=2 TO nCol
                        cStr=cStr+','+ALLTRIM(STR(VAL(tab.cell(k,l).Range.Text)))
                    ENDFOR
                    cstr = cstr+')'
                    &cstr
                ENDFOR
                USE IN xxx
                SELECT tmp
                    APPEND FROM xxx
                ERASE xxx.dbf
            ENDFOR
            doc.Close
            dole.Quit
        ENDFOR
    ENDIF
   
    nFiles_xls=Adir(xlsArray,WorkPath+'*.xls')
    IF nFiles_xls>0
        FOR i=1 TO nFiles_xls
            xlsfile=WorkPath+xlsArray(i,1)
            eole=CREATEOBJECT("Excel.application")
            eole.Workbooks.Open(xlsfile)
                         cWaitmesg="正在提取数据 ,请稍候......"+ALLTRIM(STR(i))+"/"+ALLTRIM(STR(nFiles_xls))+"----XLS"
                Wait Window cWaitmesg  Nowait At srow()/2,(scol()-len(cWaitmesg))/2
            nRow=eole.SHEETS(1).UsedRange.Rows.Count  &&有数据的总行数
            nCol=eole.SHEETS(1).UsedRange.Columns.Count  &&有数据的总列数
            cstr = 'CREATE Table xxx ('+eole.Cells(2,1).text + ' C(20),'
            FOR j=2 TO nCol
                cstr = cstr+eole.Cells(2,j).text + ' N(10),'
            ENDFOR
            cstr = left(cstr,LEN(cstr)-1)+")"
            &cstr
            arr = eole.cells(3,1).resize(nRow-2,nCol).value  &&将数据读入数组
            INSERT INTO xxx FROM ARRAY arr        &&& 将数组中的数据,追加到DBF表中
            USE IN xxx
            SELECT tmp
                APPEND FROM xxx
            ERASE xxx.dbf
            eole.ActiveWorkbook.Close
            eole.quit
        ENDFOR
    ENDIF
ENDIF
WAIT CLEAR
之后再做统计汇总
#5
wxzd1232022-10-11 18:46
#6
schtg2022-10-12 05:27
高!
#7
王咸美2022-10-12 08:29
@fyyylyl 非常感谢!!!
#8
王咸美2022-10-12 15:33
请各位高手指点一下,下列语句提示:函数名缺少),如何修改,请赐教,非常感谢!!!
SELECT 姓名,SUM(除草) as 除草,SUM(栽树) as 栽树,SUM(施肥) as 施肥,SUM(修路) as 修路,SUM(粉刷) as 粉刷,SUM(其他) as 其他, Total(*) as 合计 FROM tmp GROUP BY 姓名 INTO TABLE Zagong
#9
wengjl2022-10-12 16:22
set engi 70
1