C# 检查Excel文件在.NET Core中是否受密码保护

C# 检查Excel文件在.NET Core中是否受密码保护,c#,excel,asp.net-core-2.0,exceldatareader,C#,Excel,Asp.net Core 2.0,Exceldatareader,技术: C# ASP.NET核心2.0 Excel(主要是OpenXml,但偶尔是遗留文档) 当前正在使用ExcelDataReader读取文件 场景: 我需要将一些文件存储在服务器上,以后再访问它们以进行工作。用户通过web API上传文件,并进行调用,请求以相同的方式完成工作 一些用户使用密码保护其Excel文件,并且要求这些文件在服务器上保持密码保护 问题: 我需要检测文档是否受密码保护,以便使用适当的配置访问它 我在谷歌上搜索了一下,但大部分都是使用Workbook.HasPasswor

技术:

C#

ASP.NET核心2.0

Excel(主要是OpenXml,但偶尔是遗留文档)

当前正在使用ExcelDataReader读取文件

场景:

我需要将一些文件存储在服务器上,以后再访问它们以进行工作。用户通过web API上传文件,并进行调用,请求以相同的方式完成工作

一些用户使用密码保护其Excel文件,并且要求这些文件在服务器上保持密码保护

问题:

我需要检测文档是否受密码保护,以便使用适当的配置访问它

我在谷歌上搜索了一下,但大部分都是使用Workbook.HasPassword(我认为这是Excel.Interop的一部分,我不想添加它)。我还发现了一个关于Office文档的类似问题,在这个问题中,解决方案是通过文件流对各种头数据进行检查

理想情况下,我想要一个核心友好的解决方案,不需要我打开文件。我不经常处理文档,所以我不知道下一步该去哪里看


有什么建议吗?

如果不打开文件,就无法确定该文件是否受密码保护。该信息在文件中(据我所知);它不在文件系统中公开


您应该能够使用OpenXMLSDK快速获得它。创建一个不受保护的文件。复制它。打开副本,设置密码并保存。然后使用openXml“生产力工具”来区分这两个文件(工具栏上的“比较文件”)。它应该能很快找到查找的位置。

如果不打开该文件,您将无法确定该文件是否受密码保护。该信息在文件中(据我所知);它不在文件系统中公开


您应该能够使用OpenXMLSDK快速获得它。创建一个不受保护的文件。复制它。打开副本,设置密码并保存。然后使用openXml“生产力工具”来区分这两个文件(工具栏上的“比较文件”)。它应该很快找到查找的位置。

由于您已经在使用ExcelDataReader,请在try-catch子句中打开该文件并处理
InvalidPasswordException

bool ExcelFileRequiresPassword(Stream stream) {
    try {
        using (ExcelReaderFactory.CreateReader(stream)) { }
    } catch (InvalidPasswordException) {
        return true;
    }
    return false;
}

就性能而言,这并不太糟糕。在幕后,它只检查文件中的相关标题,并处理所有血淋淋的BIFF、ZIP和版本控制细节。如果没有密码,则不会读取任何数据

由于您已经在使用ExcelDataReader,请在try-catch子句中打开该文件并处理
InvalidPasswordException

bool ExcelFileRequiresPassword(Stream stream) {
    try {
        using (ExcelReaderFactory.CreateReader(stream)) { }
    } catch (InvalidPasswordException) {
        return true;
    }
    return false;
}

就性能而言,这并不太糟糕。在幕后,它只检查文件中的相关标题,并处理所有血淋淋的BIFF、ZIP和版本控制细节。如果没有密码,则不会读取任何数据

多谢各位!这似乎和密码检查一样快。我删除了“finally”捕获,因为它为我当前的流抛出了一个对象处理错误,但总体来说它工作得很好。非常感谢!这似乎和密码检查一样快。我删除了“finally”捕获,因为它为我当前的流抛出了一个对象处理错误,但总体来说效果很好。