C# 使用c更改excel密码?
我正在做这个项目,它使用Excel.interop创建工作表,目前它们有密码保护。使用c修改密码的最佳方法是什么?我不熟悉互操作,因此不熟悉所有可用的功能 目前,我使用sheet.unprotectoldpassword使用旧密码解锁工作表,然后调用sheet.protectnewpassword使用新密码将其锁定。但随后出现此问题。它第一次工作正常,但之后当它尝试使用oldpw取消保护时,我得到了异常。所以旧的pw是一次性使用的,我如何在c中实现这个逻辑?另外,我有15个工作表都有密码保护,所以使用计数器时会变得复杂 目前我使用的是这样的try-catch块C# 使用c更改excel密码?,c#,excel,c#-4.0,interop,password-protection,C#,Excel,C# 4.0,Interop,Password Protection,我正在做这个项目,它使用Excel.interop创建工作表,目前它们有密码保护。使用c修改密码的最佳方法是什么?我不熟悉互操作,因此不熟悉所有可用的功能 目前,我使用sheet.unprotectoldpassword使用旧密码解锁工作表,然后调用sheet.protectnewpassword使用新密码将其锁定。但随后出现此问题。它第一次工作正常,但之后当它尝试使用oldpw取消保护时,我得到了异常。所以旧的pw是一次性使用的,我如何在c中实现这个逻辑?另外,我有15个工作表都有密码保护,所
public static void Unprotect_Worksheet(string Name)
{
try
{
//try old pw first, if gets exception, retry using new pw
string strPassword = oldpassword;
Excel.Worksheet wsheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[Name];
wsheet.Unprotect(oldpassword);
}
catch
{
string strPassword = newpassword;
Excel.Worksheet wsheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[Name];
wsheet.Unprotect(strPassword);
}
}
这工作得非常好,但我认为不应该使用catch块来实现业务逻辑。有没有更好的办法解决这个问题
可能是我可以从catch块内部将0返回给调用方法,然后调用其他方法以使用新密码取消对工作表的保护。但这将是代码复制。任何专业知识???免责声明:我不做Office互操作编程。也就是说,我做了很多其他的编程,所以这可能是一个有用的建议 首先,我在上面的评论中给Tim Williams一些建议,建议您在更熟悉代码后重新访问它。在花一些时间处理现有代码之前,重做逻辑是不明智的 现在:如果当您指定错误的密码时,调用Worksheet.Unprotect(COM接口)产生异常,那么您必须尝试/捕获异常。这似乎是处理错误的唯一方法。所以,要回答你的一个问题,你需要尝试/抓住这一块 根据您提供的代码,我可能会这样重新编写:
string strPassword = oldpassword;
Excel.Worksheet wsheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[Name];
try {
// try the old password first (throws a COM exception if it fails)
wsheet.Unprotect(oldpassword);
} catch {
// ideally we should make sure we're only handling an invalid password error here
try {
// couldn't unprotect with the old password - try the new password
strPassword = newpassword;
wsheet.Unprotect(strPassword);
} catch(Exception ex) {
// TODO neither password worked - what do we do now? [insert code here...]
}
}
为什么不在创建工作表的同一操作中更改密码呢?在那之后,你可以依靠使用新密码。我不知道怎么做。请出示一个示例代码或其他东西。您说您的应用程序创建了工作表:这是您的代码,所以您可能已经知道如何创建这些工作表了?这不是我的代码,我刚开始在这家公司工作,代码的所有者去世了。你指的是这一行吗?Excel.Worksheet wsheet=Excel.WorksheetGlobals.ThisAddIn.Application.ActiveWorkbook.Worksheets[Name];如果您对代码不太熟悉,并且您的try-catch即使不理想也能正常工作,那么我现在就不会担心了。如果你花了更多的时间在应用程序上,并且更好地了解了它是如何组合在一起的,那么也许可以再次访问。