以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  EXCEL文件 操作问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=88894)

--  作者:凡夫俗子
--  发布时间:2016/8/11 10:42:00
--  EXCEL文件 操作问题
D:\\123.xls

要求:判断 D:\\123.xls文件是否打开,如果已打开 则强行 直接关闭 D:\\123.xls文件 ,关闭过程中无需任何提示(比如保存)

--  作者:大红袍
--  发布时间:2016/8/11 10:50:00
--  

http://www.foxtable.com/webhelp/scr/2126.htm

 

http://www.foxtable.com/webhelp/scr/2713.htm

 


--  作者:凡夫俗子
--  发布时间:2016/8/11 11:17:00
--  
Dim wjm As String ="123.xls"
Dim wkm As String = "D:\\" & wjm
Output.Show(wkm)

If FileIsOpened(wkm)= True Then
    Output.Show("文件已打开")
    ShowAppWindow(wjm,5)
Else
    Output.Show("未打开")    
    Dim proc As new Process
    proc.File = wkm
    proc.Start   
End If

这测试代码 其它的所有 都执行正常,唯独这一句   ShowAppWindow(wjm,5) 要关闭 这个文件的代码 没能达到效果。

--  作者:大红袍
--  发布时间:2016/8/11 11:18:00
--  

红色代码,要写的是你窗口的标题,标题正确,肯定能关闭。

 

ShowAppWindow("123",5)


--  作者:凡夫俗子
--  发布时间:2016/8/11 11:27:00
--  
谢谢 ,是这个问题 如果 123.xls 在打开后 有所修改,则用 ShowAppWindow("123",5) 这个关闭窗口,会有 提示保存窗口出现,如何不让其 出现这个提示窗口,就直接关闭。
--  作者:大红袍
--  发布时间:2016/8/11 11:33:00
--  

这样写

 

Dim wkm As String = "D:\\test.xls"
If FileIsOpened(wkm)= True Then
    Output.Show("文件已打开")
    Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("excel")
    For Each p As System.Diagnostics.Process In ps
        msgbox(p.MainWindowTitle)
        If p.MainWindowTitle.contains("test.xls") Then  p.kill
    Next
Else
    Output.Show("未打开")
    Dim proc As new Process
    proc.File = wkm
    proc.Start
End If


--  作者:凡夫俗子
--  发布时间:2016/8/11 12:23:00
--  
Dim wkm As String = "D:\\123.xlsx"
If FileIsOpened(wkm)= True Then
    Output.Show("文件已打开")
    Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("excel")
    For Each p As System.Diagnostics.Process In ps
        msgbox(p.MainWindowTitle)
        If p.MainWindowTitle.contains("123") Then  p.kill
    Next
Else
    Output.Show("未打开")
    Dim proc As new Process
    proc.File = wkm
    proc.Start
End If


这代码 尚有缺点

一,如果是 先打开 123.xlsx 文件 再打开了其它EXCEL 文件 ,即123.xlsx 文件 非当前活动 EXCEL窗口,则不能关闭123这个WORKBOOK。
二,如果打开了多个 EXCEL WORKBOOK 则本程序 直接杀了 EXCEL程序 其它用户 已打开 的 EXCEL 文件 也会直接杀掉,这是万万不可的。

那么请教一下 写法:

  • Dim App As New MSExcel.Application
    Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("D:\\123.xlsx")
如果123.xlsx 文件已打开了,如何将 123.xlsx这个WORKBOOK 赋值给 Wb了


--  作者:大红袍
--  发布时间:2016/8/11 12:26:00
--  
 不行,没办法。
--  作者:凡夫俗子
--  发布时间:2016/8/11 16:30:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160811162741.png
图片点击可在新窗口打开查看

---------------------------
提示
---------------------------
文件"c:\\reports\\test.xls"已经被打开,请先关闭之!
---------------------------
确定   
---------------------------


唉这个问题居然 无解!!!!!!!!!

--  作者:大红袍
--  发布时间:2016/8/11 16:33:00
--  
 没办法啊。