电子表格文档 API 可以打开和保存二进制 (.xls, .xlsb) 和 OpenXml (.xlsx) 格式的密码加密文件。
指定 WorkbookImportOptions.Password 属性以解密加载的文件。下表列出了在未指定 Password 属性或返回无效密码时引发的事件链。
事件
描述
Workbook.EncryptedFilePasswordRequest
如果未指定 Password 属性或返回无效密码,则引发该事件。使用EncryptedFilePasswordRequestEventArgs.Password属性指定新密码。
Workbook.EncryptedFilePasswordCheckFailed
如果EncryptedFilePasswordRequestEventArgs.Password设置为空密码或无效密码,则引发此事件。处理此事件以获取导致此事件的错误(EncryptedFilePasswordCheckFailedEventArgs.Error),并确定是否提示用户输入密码(EncryptedFilePasswordCheckFailedEventArgs.TryAgain)。
Workbook.InvalidFormatException
当EncryptedFilePasswordCheckFailedEventArgs.TryAgain属性设置为 false 时发生。
下面的代码示例演示如何处理
Workbook.EncryptedFilePasswordRequest 和
Workbook.EncryptedFilePasswordCheckFailed 事件,以提示用户输入密码。如果用户取消操作,电子表格文档 API
会显示异常消息并取消加载文件。
Vb.Net
Namespace FormEvents
Public Class Forma8d52889a65d4c7ab16a512621abd710
Inherits FormEventsBase
Public Sub btnOpen_Click(sender As Object,e As System.EventArgs)
Dim workbook As New DevExpress.Spreadsheet.Workbook()
'如果未指定 Password 属性或返回无效密码,则引发该事件
AddHandler workbook.EncryptedFilePasswordRequest, AddressOf Workbook_EncryptedFilePasswordRequest
'如果EncryptedFilePasswordRequestEventArgs.Password设置为空密码或无效密码,则引发此事件
AddHandler workbook.EncryptedFilePasswordCheckFailed, AddressOf Workbook_EncryptedFilePasswordCheckFailed
'当EncryptedFilePasswordCheckFailedEventArgs.TryAgain属性设置为 false 时发生
AddHandler workbook.InvalidFormatException, AddressOf Workbook_InvalidFormatException
workbook.LoadDocument("D:\encrypted.xlsx")
End Sub
Private Sub Workbook_EncryptedFilePasswordRequest(ByVal sender As Object, ByVal e As DevExpress.Spreadsheet.EncryptedFilePasswordRequestEventArgs)
'让用户输入密码
Dim obj As Object=""
If Proj.InputValueBox(obj,"文档密码","请输入文档的密码:",InputValueTypeEnum.SingleString) Then
e.Password = obj.ToString()
e.Handled = True
End If
End Sub
Private Sub Workbook_EncryptedFilePasswordCheckFailed(ByVal sender As Object, ByVal e As DevExpress.Spreadsheet.EncryptedFilePasswordCheckFailedEventArgs)
Select Case e.Error
'如果密码为空,请再次提出请求
Case DevExpress.XtraSpreadsheet.SpreadsheetDecryptionError.PasswordRequired
MessageBox.Show("您没有输入密码!")
e.TryAgain = True
e.Handled = True
'如果密码无效,询问用户是否继续操作:
Case DevExpress.XtraSpreadsheet.SpreadsheetDecryptionError.WrongPassword
Dim Result As DialogResult
Result = MessageBox.Show("密码错误,是否重试?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
e.TryAgain = True
e.Handled = True
'如果用户取消操作,则显示一条异常消息:
End If
End Select
End Sub
Private Sub Workbook_InvalidFormatException(ByVal sender As Object, ByVal e As DevExpress.Spreadsheet.SpreadsheetInvalidFormatExceptionEventArgs)
End Sub
End Class
End Namespace
C# |
namespace FormEvents { public class Forma8d52889a65d4c7ab16a512621abd710 : FormEventsBase { public void btnOpen_Click(object sender, System.EventArgs e) { DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook(); // 如果未指定 Password 属性或返回无效密码,则引发该事件 workbook.EncryptedFilePasswordRequest += Workbook_EncryptedFilePasswordRequest; // 如果EncryptedFilePasswordRequestEventArgs.Password设置为空密码或无效密码,则引发此事件 workbook.EncryptedFilePasswordCheckFailed += Workbook_EncryptedFilePasswordCheckFailed; // 当EncryptedFilePasswordCheckFailedEventArgs.TryAgain属性设置为 false 时发生 workbook.InvalidFormatException += Workbook_InvalidFormatException; workbook.LoadDocument(@"D:\encrypted.xlsx"); } private void Workbook_EncryptedFilePasswordRequest(object sender, DevExpress.Spreadsheet.EncryptedFilePasswordRequestEventArgs e) { // 让用户输入密码 object obj = ""; if (Proj.InputValueBox(obj, "文档密码", "请输入文档的密码:", InputValueTypeEnum.SingleString)) { e.Password = obj.ToString(); e.Handled = true; } } private void Workbook_EncryptedFilePasswordCheckFailed(object sender, DevExpress.Spreadsheet.EncryptedFilePasswordCheckFailedEventArgs e) { switch (e.Error) { case DevExpress.XtraSpreadsheet.SpreadsheetDecryptionError.PasswordRequired: { MessageBox.Show("您没有输入密码!"); e.TryAgain = true; e.Handled = true; break; } case DevExpress.XtraSpreadsheet.SpreadsheetDecryptionError.WrongPassword: { DialogResult Result; Result = MessageBox.Show("密码错误,是否重试?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (Result == DialogResult.Yes) { e.TryAgain = true; e.Handled = true; } break; } } } private void Workbook_InvalidFormatException(object sender, DevExpress.Spreadsheet.SpreadsheetInvalidFormatExceptionEventArgs e) { } } } |
调用 Workbook.SaveDocument 方法重载,以在保存时对文档进行密码保护。使用 EncryptionOptions 对象属性指定密码和保护类型。使用 DocumentSettings.Encryption 属性访问 EncryptionOptions 对象。
Vb.Net |
Dim encryptionOptions As New DevExpress.Spreadsheet.EncryptionSettings() encryptionOptions.Type = DevExpress.Spreadsheet.EncryptionType.Strong encryptionOptions.Password = "12345" workbook.SaveDocument(fileName, documentFormat, encryptionOptions) |
C# |
DevExpress.Spreadsheet.EncryptionSettings encryptionOptions = new DevExpress.Spreadsheet.EncryptionSettings(); encryptionOptions.Type = DevExpress.Spreadsheet.EncryptionType.Strong; encryptionOptions.Password = "12345"; workbook.SaveDocument(fileName, documentFormat, encryptionOptions); |