Excel互操作阻止显示密码对话框
我正在写一个程序清理空行和列的Excel文件,我从我自己的问题开始最快速的方法来删除空行和列从Excel文件使用互操作 ,一切都很好。
问题是,我想防止excel显示密码对话框,当工作簿是密码保护,并抛出一个exception,而不是 。
我正在使用以下代码使用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
我试图通过一个空的密码,build议一些链接
m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="")
或者使用
m_xlWrkb.Unprotect("")
但没有运气。
有什么build议么?
我find了一个解决scheme,但我会接受其他工作的答案
问题
当传递一个空string作为密码时,excel认为它没有任何意义。 所以它要求input密码并显示对话框。
解
解决的办法是把一个单引号作为密码 ,excel会认为它是空string。 如果工作簿没有密码保护,它将打开,否则会抛出以下exception
您提供的密码不正确。 确认大写locking键已closures,并确保使用正确的大小写
代码将是:
m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="'")
注意
在Microsoft Excel中,值的开头使用单引号强制文本格式。
例; '0
被作为值为0
的文本
不要为你不想提供的方法参数使用Nothing
。
代替:
m_xlWrkb = m_xlWrkbs.Open(strFile, Nothing, Nothing, Nothing, "", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)
使用下列任何一项:
m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="")
要么
m_xlWrkb = m_xlWrkbs.Open(strFile, , , , "", , , , , , , , , , )
要么
Dim missing As System.Reflection.Missing = System.Reflection.Missing.Value m_xlWrkb = m_xlWrkbs.Open(strFile,missing, missing, missing, "", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing)
如果工作簿受密码保护,则执行此操作将导致出现COMException
,并显示以下消息:
“您提供的密码不正确,请确认CAPS LOCK键已closures,并确保使用正确的大小写。”
如果工作簿没有密码保护,假定文件是可访问的,则不会抛出exception。
你也可以像这样定义上面显示的“缺失”对象:
Dim missing As Object = Type.Missing
Type.Missing
和System.Reflection.Missing
指的是同一个对象。
关于你的解决scheme,你确定它不会与任何东西,这不是密码? 像这样的东西:
Public Function wb_get_workbook(ByVal sFullName As String) As Workbook Dim sFile As String Dim wbReturn As Workbook sFile = Dir(sFullName) On Error Resume Next Set wbReturn = Workbooks(sFile) If wbReturn Is Nothing Then Application.AskToUpdateLinks = False Set wbReturn = Workbooks.Open(sFullName, , , , "ThisIsDefinitelyAPasswordThatNooneHasUsed681") End If On Error GoTo 0 Set wb_get_workbook = wbReturn End Function
也会抛出一个错误,如果它是密码保护,如果不是,那么它不会在意你提供的密码。 我想在VBA
,但在C#
使用Excel Application object
,所以它不应该是不同的。