标题:请教:复制EXCEL表的部分内容到另一个EXCEL表中
只看楼主
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:226
专家分:42
注 册:2019-3-8
结帖率:96.55%
已结贴  问题点数:20 回复次数:5 
请教:复制EXCEL表的部分内容到另一个EXCEL表中
问题:复制EXCEL表的部分内容,粘贴(追加)到另一个EXCEL表中。具体要求是:打开化生政4951.xlsx,A1单元格中有“提醒:与你最匹配的位置:第 58 行”,就取第58行的前后10行A48:H68的内容复制,然后粘贴到结果表的B到I列,A列为表名化生政4951。再打开第二张理地技120360.xlsx,复制A1270:H1290的内容追加到结果表的B22:I42,A22:A42为表名理地技120360。以此类推。有500多张表,需要一个循环。
麻烦各位大佬啦!
样表.rar (220.53 KB)
搜索更多相关主题的帖子: EXCEL 复制 表中 结果 内容 
2022-11-03 10:13
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
过程就是:
循环打开表文件---选择表---选单元格---复制---选择表---选单元格---粘贴
这些动作搜索一下“EXCEL”都有好多,逐个动作分别动手练练再组合一下就OK

2022-11-03 11:43
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:226
专家分:42
注 册:2019-3-8
得分:0 
吹版,搜到过您的代码,很精致,还在消化中
2022-11-03 12:24
fyyylyl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:16
帖 子:287
专家分:676
注 册:2006-5-22
得分:18 
WorkPath=GETDIR("","","请选择文件夹:")
IF !EMPTY(WorkPath)
    IF FILE(WorkPath+"结果表.XLSX")
        nFiles=Adir(MyArray,WorkPath+'*.xlsx')
        IF nFiles>1
            FOR i=1 TO 2 nFiles
                         cWaitmesg="正在处理数据 ,请稍候...... "+ALLTRIM(STR(I))+"/"+ALLTRIM(STR(nFiles))
                Wait Window cWaitmesg  Nowait At srow()/2,(scol()-len(cWaitmesg))/2
                xlsfile=MyArray(i,1)
                IF !"结果表"$xlsfile
                    eole=CREATEOBJECT("Excel.application")
                    eole.Workbooks.Open(WorkPath+xlsfile)   
                    nRow=VAL(CHRTRAN(SUBSTR(eole.cells(1,1).value,ATC('第',eole.cells(1,1).value)+2,ATC('行',eole.cells(1,1).value)-ATC('第',eole.cells(1,1).value)-2),Chr(161),""))
                    IF nRow>0
                        eole.ActiveSheet.Range("A"+ALLTRIM(STR(nRow-10))+":H"+ALLTRIM(STR(nRow+10))).Copy        &&拷贝指定区域
                        eole.Workbooks.Open(WorkPath+"结果表.XLSX")   
                        nRowCounts=eole.SHEETS(1).UsedRange.Rows.Count        &&已有行数
                        eole.ActiveSheet.Range("B"+ALLTRIM(STR(nRowCounts+1))).PasteSpecial        &&粘贴
                        FOR j=nRowCounts+1 TO eole.SHEETS(1).UsedRange.Rows.Count
                            eole.Cells(j,1).value=JustStem(xlsfile)
                        ENDFOR
                        eole.ActiveWorkbook.Save()
                    ENDIF

                    eole.Workbooks.Close
                    eole.quit
                ENDIF
            ENDFOR
            WAIT CLEAR
            MESSAGEBOX("共处理 "+ALLTRIM(STR(nFiles-1))+" 个文件!",0+48+0,"提示:")
        ENDIF
    ENDIF
ENDIF
是这意思吗?

[此贴子已经被作者于2022-11-3 16:24编辑过]


2022-11-03 16:07
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:226
专家分:42
注 册:2019-3-8
得分:0 
fyyylyl大侠,复制代码,执行,直接出理想的结果!非常非常感谢!!
2022-11-04 09:12
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:226
专家分:42
注 册:2019-3-8
得分:0 
经测试,EXCEL已用行数的计算可能有问题。第一次打开结果表(空表)的时候,显示已用行数是1,粘贴在B2单元格(21条记录);粘贴第二张表的时候,显示已用行数是21,其实应该是22,少计了一行,结果粘贴在了B22(应该在B23),把前面粘贴的最后一条记录覆盖了。
是不是EXCEL默认空表就已经使用了一行,但后续又没把这条计入呢?
我现在是加了一个 if nRowCounts=1 的判断来解决的。
各位能否测试一下,是不是存在这个情况?
win10,vfp9,EXCEL2007。
2022-11-09 10:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510523-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053360 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved