| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 613 人关注过本帖
标题:咨询如何判断WORD或EXCEL中某个文档是否已被打开
只看楼主 加入收藏
shschy
Rank: 2
等 级:论坛游民
帖 子:87
专家分:20
注 册:2022-3-13
结帖率:33.33%
收藏
已结贴  问题点数:3 回复次数:11 
咨询如何判断WORD或EXCEL中某个文档是否已被打开
VFP在生成、修改DOCX或XLSX文档时,会有提示,文档已被打开。
请问如何在打开某文档前,实现先判断同名文件(比如ABCD0001.docx或ABCD0001.xlsx)是否已被打开。
谢谢!
搜索更多相关主题的帖子: 判断 是否 打开 文档 WORD 
2024-05-26 23:47
shizi0
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:142
专家分:411
注 册:2012-10-2
收藏
得分:1 
hFile=FOPEN([ABCD0001.docx],12)
if hFile>0
    未被打开
    =FCLOSE(hFile)   
else
    已被打开
endif

2024-05-27 00:49
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:309
专家分:711
注 册:2021-11-24
收藏
得分:1 
这个代码好像不行,比如:打开前判断一下,然后关闭,再判断,前后结果一样
2024-05-27 11:01
shschy
Rank: 2
等 级:论坛游民
帖 子:87
专家分:20
注 册:2022-3-13
收藏
得分:0 
希望在VFP建立DOCX前,先检查对应的DOCX都没被打开,使用fopen()有时不准确?
&&新建d:\VFP_OPEN.docx后,使用WPS打开,再关闭
?FOPEN("d:\VFP_OPEN.docx",12)    ,返回-1,从WPS打开后,及时WPS关闭5分钟后,执行FOPEN("d:\VFP_OPEN.docx",12)都是返回-1
?FOPEN("d:\VFP_OPEN_new.docx",12),返回35,新建但WPS不打开,就一直会返回35
以下是引用shizi0在2024-5-27 00:49:24的发言:

hFile=FOPEN([ABCD0001.docx],12)
if hFile>0
    未被打开
    =FCLOSE(hFile)   
else
    已被打开
endif

2024-05-27 11:19
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:1 
查找窗口如何?如果文件被打开,标题栏应该有该文件的相应信息
PROCEDURE xlspd
Lpara ctitle,fname
Declare INTEGER GetDesktopWindow IN user32
Declare INTEGER GetWindow IN user32 INTEGER hwnd, INTEGER wFlag
Declare INTEGER GetWindowText IN user32;
    INTEGER hwnd, STRING @lpString, INTEGER cch
Declare INTEGER GetModuleFileNameEx IN psapi;
    INTEGER hProcess,;
    INTEGER hModule,;
    STRING ModuleName,;
    INTEGER nSize
Declare INTEGER GetWindowThreadProcessId IN user32;
    INTEGER   hWnd,;
    INTEGER @ lpdwProcId
Declare INTEGER OpenProcess IN kernel32;
    INTEGER dwDesiredAccessas,;
    INTEGER bInheritHandle,;
    INTEGER dwProcId
Declare INTEGER CloseHandle IN kernel32 INTEGER hObject
Declare integer GetClassName in user32;
    integer hwnd, ;
    string lpClassName, ;
    integer nMaxCount
ctitle=lower(ctitle)
Local hDesktop, hFirstChild, hLastChild, cBuffer, nResult,hwnd,hCurrent,ii,jj,lwin(1)
hCurrent = hDesktop
ii=0
jj=1
lwin(1)=GetDesktopWindow()
hwnd=0
DO whil ii<jj
    ii=II+1
    hCurrent=lwin(ii)
    hFirstChild = GetWindow(hCurrent, 5)
    hLastChild = GetWindow(hFirstChild, 1)
    hCurrent = hFirstChild
    Do WHILE  hCurrent>0
        cBuffer = Space(250)
        nResult = GetWindowText(hCurrent, @cBuffer, Len(cBuffer))
        cBuffer= SUBSTR(cBuffer, 1, nResult)
        If at(ctitle,lower(cBuffer))>0
            HWnd=hCurrent
            ii=jj
            Exit
        ENDIF
        jj=jj+1
        LOCAL lwin(jj)
        lwin(jj)=hCurrent
        If hCurrent = hLastChild
            Exit
        Endif
        hCurrent = GetWindow(hCurrent, 2)
    ENDDO
ENDDO
Retu hwnd

[此贴子已经被作者于2024-5-27 12:24编辑过]

2024-05-27 12:14
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:1 
全路径+文件名

坚守VFP最后的阵地
2024-05-27 12:22
shschy
Rank: 2
等 级:论坛游民
帖 子:87
专家分:20
注 册:2022-3-13
收藏
得分:0 
是按照?xlspd("d:\","VFP_OPEN.docx")来调用吗
(1)是按照?xlspd("d:\","VFP_OPEN.docx")来调用吗?但调用后无任何反馈?
(2)如果返回一个句柄,那么fclose(句柄)可以关闭WPS里打开的docx文档吗?
谢谢!
以下是引用sych在2024-5-27 12:14:34的发言:查找窗口如何?如果文件被打开,标题栏应该有该文件的相应信息PROCEDURE xlspdLpara ctitle,fnameDeclare INTEGER GetDesktopWindow IN user32Declare INTEGER GetWindow IN user32 INTEGER hwnd, INTEGER wFlagDeclare INTEGER GetWindowText IN user32;    INTEGER hwnd, STRING @lpString, INTEGER cchDeclare INTEGER GetModuleFileNameEx IN psapi;    INTEGER hProcess,;    INTEGER hModule,;    STRING ModuleName,;    INTEGER nSizeDeclare INTEGER GetWindowThreadProcessId IN user32;    INTEGER   hWnd,;    INTEGER @ lpdwProcIdDeclare INTEGER OpenProcess IN kernel32;    INTEGER dwDesiredAccessas,;    INTEGER bInheritHandle,;    INTEGER dwProcIdDeclare INTEGER CloseHandle IN kernel32 INTEGER hObjectDeclare integer GetClassName in user32;    integer hwnd, ;    string lpClassName, ;    integer nMaxCountctitle=lower(ctitle)Local hDesktop, hFirstChild, hLastChild, cBuffer, nResult,hwnd,hCurrent,ii,jj,lwin(1)hCurrent = hDesktopii=0jj=1lwin(1)=GetDesktopWindow()hwnd=0DO whil ii<jj    ii=II+1    hCurrent=lwin(ii)    hFirstChild = GetWindow(hCurrent, 5)    hLastChild = GetWindow(hFirstChild, 1)    hCurrent = hFirstChild    Do WHILE  hCurrent>0        cBuffer = Space(250)        nResult = GetWindowText(hCurrent, @cBuffer, Len(cBuffer))        cBuffer= SUBSTR(cBuffer, 1, nResult)        If at(ctitle,lower(cBuffer))>0            HWnd=hCurrent            ii=jj            Exit        ENDIF        jj=jj+1        LOCAL lwin(jj)        lwin(jj)=hCurrent        If hCurrent = hLastChild            Exit        Endif        hCurrent = GetWindow(hCurrent, 2)    ENDDOENDDORetu hwnd
2024-05-27 15:12
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
回复 7楼 shschy
?xlspd("VFP_OPEN")
2024-05-27 16:22
shschy
Rank: 2
等 级:论坛游民
帖 子:87
专家分:20
注 册:2022-3-13
收藏
得分:0 
xlspd("VFP_OPEN")会判断文件的扩展名吗
测试后可用,但对于“项目XXXX.docx”或“项目XXXX.xlsx”,只要有1个打开,打开都返回“》0”的数值
1)由于编辑时,项目文档名分别存为“项目XXXX.docx”和“项目XXXX.xlsx”,可以区分开吗?
2)还是希望能实现“完整目录”+“文件名”,因为无论是xlsx还是docx如果存在不同目录下,都是可以被同时打开的。
谢谢!
以下是引用sych在2024-5-27 16:22:27的发言:

?xlspd("VFP_OPEN")

2024-05-27 16:42
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
窗口句柄已经找出来了,你自己想怎么做可以随意发挥,根据窗口句柄找类名、可执行程序名等等,再加以精准区分
2024-05-27 17:11
快速回复:咨询如何判断WORD或EXCEL中某个文档是否已被打开
数据加载中...
 
   



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

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