如何在MS excel中停止删除已打开的文件/工作簿



我们为使用VB.net编写的MS Excel和Word 2019设计了Microsoft加载项。在那里,我们设计了一个选项卡,单击此选项卡,我们将打开一个任务窗格。加载此任务窗格时,我们执行一段代码以启动另一个Excel文件/Word文件。

因此,当我在MS Word中删除一个已经打开的文件时,它会显示一个异常。文件"Filename"已经存在。下面是我用来删除一个已经存在的名为processFile 的打开文件的代码片段

My.Computer.FileSystem.DeleteFile(processFile(

现在,当我在MS Excel中运行相同的代码片段时,它不会显示此异常并删除该文件。

我无法理解这种行为。如果有人了解,请建议

以下是关于我工作的环境的更多信息:

操作系统:Microsoft Windows 10 Pro

代码编辑器:Visual Studio 2019

技术:Vb.net(.net Framework 4.8(

MS Office版本:2019(32位(:Microsoft Windows 10 Pro

如果文件正在使用,则应抛出IOException。您需要先关闭所有编辑器,然后删除文件。

检查文件是否打开。我下面有一个代码可能会有所帮助。

作为导入文件,请使用带有文件名的完整路径。(例如"C:\Windows\test.txt"(文件打开时返回True,文件未打开时返回false。

俞需要;Imports System.IO";

Public Function IsFileInUse(sFile As String) As Boolean
Try
If File.Exists(sFile) Then
Using f As New IO.FileStream(sFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
End Using
End If
Catch Ex As Exception
Return True
End Try
Return False
End Function

根据注释部分中的信息,文件在"保护模式";你说它正在删除,而它仍然对用户开放

所以,是的,如果文件被某个程序占用并删除,它应该抛出一个异常,而不是删除。但如果没有出现异常,即Windows/MS Excel已经进行了一些特定的处理,因此文件已被删除,同时仍保留在缓冲区中并处于打开状态。只有微软才能给出答案。

一个解决方案,我可以建议关闭";受保护对象";然后删除该文件,使得不会向用户打开任何文件并且该文件将被安全地删除。

打开加载项(VSTO(文件的代码段:

Dim objProtectedMode As String objProtectedMode = Globals.Connect.Application.ProtectedViewWindows.Open(fileLocation, , False, False)

安全删除文件的代码段:

If Not (objProtectedMode Is Nothing) Then
objProtectedMode.Close()
End If
My.Computer.FileSystem.DeleteFile(objProtectedMode)

注意:-解决方案可能因其他加载项而异。为VSTO加载项提供的代码段