You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取带密码Excel文件报错:已解锁仍需输入密码

问题:带密码Excel文件使用ExcelPackage时,已解锁仍提示需输入密码

我有一个带密码的Excel文件,希望创建ExcelPackage实例来存储并获取其工作表。以下是我的C#代码:

private static ExcelPackage _epInstance;
static string password = "password";

using (var package = new ExcelPackage(fileInfo, password))
{
    if (_epInstance == null) // ExcelPackage
    {
        System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        FileInfo templateFile = new FileInfo(filePath);
       
        try                                       
        {                                       
            _epInstance = new ExcelPackage(templateFile);
            _epInstance.Save();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

密码正确,但执行到_epInstance = new ExcelPackage(templateFile);时返回错误:"Can not open the package. Package is an OLE compound document. If this is an encrypted package, please supply the password"。请问为何已解锁仍要求输入密码?


解答

问题出在创建_epInstance的逻辑上:你虽然在外部using块中用密码打开了一个ExcelPackage实例,但内部创建_epInstance时,直接调用new ExcelPackage(templateFile)却没有传入密码参数。这里的templateFile是带密码的原始文件,ExcelPackage尝试打开它时未获取到密码,因此触发了加密文件的报错。

修正方法有两种:

  • 直接传入密码创建实例:修改创建_epInstance的代码,使用带密码的重载方法:
    _epInstance = new ExcelPackage(templateFile, password);
    
  • 复用已解锁的package实例:既然外部已经用密码打开了package,可以直接复用这个已解锁的实例,避免重复打开加密文件。注意如果要保留实例,需调整using块结构(using块结束后实例会被释放),示例如下:
    if (_epInstance == null)
    {
        System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        FileInfo templateFile = new FileInfo(filePath);
        try
        {
            _epInstance = new ExcelPackage(templateFile, password);
            // 后续业务操作
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    

另外,错误信息中的"OLE compound document"是ExcelPackage对加密Excel文件的标识,只要打开加密文件时未提供密码,就会触发该提示,和之前是否打开过该文件无关。


内容的提问来源于stack exchange,提问作者Tuấn Jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:16:09