Excel互操作阻止显示密码对话框

Had*_*adi 11 c# vb.net excel excel-interop

我正在编写一个程序来清空空行和列中的excel文件,我从我自己的问题开始使用Interop从Excel文件中删除空行和列的最快方法,一切都很顺利.

问题是我想防止excel在工作簿受密码保护时显示密码对话框并抛出异常而不是那样.

在此输入图像描述

我使用以下代码使用interop打开excel文件:

 m_XlApp = New Excel.Application
 m_XlApp.visible = False
 m_XlApp.DisplayAlerts = False

 Dim m_xlWrkbs As Excel.Workbooks = m_XlApp.Workbooks
 Dim m_xlWrkb As Excel.Workbook
 m_xlWrkb = m_xlWrkbs.Open(strFile)

 m_xlWrkb.DoNotPromptForConvert = true          
Run Code Online (Sandbox Code Playgroud)

我尝试传递一个空密码,因为有些链接建议

m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="")
Run Code Online (Sandbox Code Playgroud)

或使用

m_xlWrkb.Unprotect("")
Run Code Online (Sandbox Code Playgroud)

但没有运气.

有什么建议?

Had*_*adi 8

我找到了解决方案,但我会接受其他工作答案

问题

当传递一个空字符串作为密码时,excel认为它没什么.所以它要求输入密码并显示对话框.

解决方案是将单引号作为密码传递,excel会将其视为空字符串.如果工作簿没有密码保护,它将打开,否则它将抛出以下异常

您提供的密码不正确.验证CAPS LOCK键是否已关闭,并确保使用正确的大小写

代码将是:

m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="'")
Run Code Online (Sandbox Code Playgroud)

注意

在microsoft excel中,值的开头的单引号用于强制文本格式化.

例; '0被视为有价值的文本0