| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3136 人关注过本帖
标题:VFP对EXCEL读操作,如何防止用户另外启动EXCEL而造成错误。
只看楼主 加入收藏
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
代码是直接复制过来的,忘了修改
看下面的
程序代码:
Clear
Declare integer CreateToolhelp32Snapshot in win32api integer,integer
Declare integer Process32First in win32api integer,string @
Declare integer Process32Next in win32api integer,string @
Declare integer CloseHandle in win32api integer
CLEAR
lnHand = 0
lnHand = CreateToolhelp32Snapshot(3,0)
If lnHand>0
    lctitle=SPACE(256)
    If Process32First(lnHand,@lctitle) > 0
        tln = 0
        Do while Process32Next(lnHand,@lctitle)> 0
            m.lnval=SUBSTR(lctitle,37,256)
            m.lnval=left(m.lnval,AT(CHR(0),m.lnval) - 1)
            If Lower(m.lnval) == 'excel.exe'
                tln = tln + 1
                If tln == 1
                    Exit
                Endif
            Endif
        Enddo
        If tln == 1
            Messagebox("Excel进程正在运行",4096,"Message")
            CloseHandle(lnHand)
            Clear Dlls 

        Endif
    Endif
    CloseHandle(lnHand)
Endif


个性太多,无法显示
2012-05-12 14:47
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
感谢楼上的积极参与!不过我的问题是:在VFP对EXCEL文件进行读操作的过程中,如果用户又打开了任意的EXCEL文件,就会导致读入的数据错误。并不是事先检查用户有无打开EXCEL文件的问题。
在VFP中建立EXCEL对象时,操作系统是建立了一个新的进程,与原来用户打开的EXCEL文件不会共用一个进程。问题是VFP在自己建立的EXCEL进程中操作时,倘若用户又打开EXCEL文件时,操作系统可能就会用VFP建立的进程(也是最新的进程),从而导致读数据出错。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-12 15:27
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
刚才又测试了一下,先打开一个EXCEL文件进行操作,然后运行VFP程序对另一个EXCEL文件进行读操作,再对先打开的EXCEL文件进行修改、保存、退出等操作,都不会影响到VFP程序的读操作。证实了VFP建立的EXCEL进程不与原来用户已经建立的进程有关系这个判断。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-12 15:43
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
待我仔细测试一下

个性太多,无法显示
2012-05-12 16:19
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
事实上用户先打开一个EXCEL文件,在没有关闭的前提下,VFP程序又打开同一个EXCEL文件时,操作系统会自动以只读的方式打开副本,不会对先前的文件有影响,也不会影响VFP的读操作。只是用户先关闭这个文件时,系统会提示。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-12 16:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 35楼 hu9jj
你试试不同的vfp进程是否启动不同的excel进程?

授人以渔,不授人以鱼。
2012-05-12 16:44
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
操作系统不允许用户选择用哪个进程来打开EXCEL文件的。
假设用户先打开的EXCEL进程为进程1,VFP再建立的EXCEL对象为进程2。此时用户若再打开EXCEL文件,操作系统不会用进程1来打开,而是用进程2来打开,以至影响到VFP程序的读操作。
不知道VFP建立EXCEL对象时能否申请到独占的进程么,用户再要使用EXCEL进程,只能用进程1,或者新建进程。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-12 17:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你用newobject()建立excel对象还是直接通过文档文件带起excel?

授人以渔,不授人以鱼。
2012-05-12 17:10
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
在VFP中是用CREATEOBJECT("Excel.application")建立对象,然后打开特定的EXCEL文件。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-12 18:46
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
无论是CREATEOBJECT还是GETOBJECT,在创建了excel对象的时候,如果双击了excel文件,来打开另外的excel文件,则默认使用已存在的excel进程来打开文件
1. vfp操作excel的时候提示用户不要操作excel,否则将导致vfp对excel操作失败
2.“禁止”用户打开excel。要说做到绝对禁止,我也不知道能不能做到,没有深究,最简单的方式是通过修改excel的默认打开程序。比如修改成用txt(记事本)来打开
缺点:不太好玩,而且用户也能用右键-打开方式来选择excel打开
3.vfp操作excel前先检测有没有excel

个性太多,无法显示
2012-05-15 11:19
快速回复:VFP对EXCEL读操作,如何防止用户另外启动EXCEL而造成错误。
数据加载中...
 
   



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

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