使用Syncfusion XlsIO加密Excel后读取报错:不支持强加密算法
Excel加密文件读取报错:Strong encryption algorithms are not supported
问题背景
创建Excel文件时,通过以下代码设置工作表和工作簿保护密码,并指定版本为Excel97-2003:
workbook.Worksheets[1].Protect("123"); workbook.Protect(false, true, "123"); workbook.Version = ExcelVersion.Excel97to2003;
读取该加密文件时,使用初始代码:
ExcelEngine excelEngine = null; IApplication application = null; IWorkbook workbook = null; IWorksheet sheet = null; // 省略其他初始化代码 excelEngine = new ExcelEngine(); application = excelEngine.Excel; workbook = excelEngine.Excel.Workbooks.Open(fileLocation, ExcelOpenType.Automatic);
运行时抛出错误:Strong encryption algorithms are not supported(不支持强加密算法)
已尝试的无效方案
- 带密码参数的Open方法调用:
workbook = excelEngine.Excel.Workbooks.Open(fileLocation,ExcelParseOptions.Default,false,"123",ExcelOpenType.Automatic);
- 绑定
OnPasswordRequired事件传递密码:
application.OnPasswordRequired += application_OnPasswordRequired; void application_OnPasswordRequired(object sender, PasswordRequiredEventArgs e) { e.NewPassword = "123"; }
解决方法
1. 调整创建时的加密兼容设置
问题出在创建文件时的workbook.Protect调用,默认参数可能触发了Excel97-2003不支持的强加密。替换为明确指定兼容旧版本的保护方式:
// 用指定保护类型的重载替代原调用,确保加密兼容Excel97-2003 workbook.Protect(ExcelProtectionType.All, "123", "123"); // 保持工作表保护和版本设置不变 workbook.Worksheets[1].Protect("123"); workbook.Version = ExcelVersion.Excel97to2003;
2. 读取时强制指定旧版本打开类型
读取文件时,明确指定打开类型为Excel97to2003,让引擎使用对应版本的加密解析逻辑:
workbook = excelEngine.Excel.Workbooks.Open( fileLocation, ExcelParseOptions.Default, false, "123", ExcelOpenType.Excel97to2003 );
3. 升级Syncfusion Excel库版本
如果使用的是旧版Syncfusion组件,可能存在加密兼容bug,升级到最新稳定版通常能解决这类版本兼容问题。
内容的提问来源于stack exchange,提问作者the-a-monir
相关产品推荐
相关产品推荐

