C# 在c中使用epplus读取受密码保护的excel#

C# 在c中使用epplus读取受密码保护的excel#,c#,asp.net-web-api,asp.net-core-webapi,epplus,C#,Asp.net Web Api,Asp.net Core Webapi,Epplus,我正在使用epplus库下载带有密码的excel文件。下载部分工作正常 public ActionResult DownloadExcel() { string sFileName = string.Empty; using (ExcelPackage package = projectBL.DownloadExcel(ID, id1, id3, id4, id5)) { System.Net.Mime.ContentDisposition cd = new System.N

我正在使用epplus库下载带有密码的excel文件。下载部分工作正常

public ActionResult DownloadExcel()
{

string sFileName = string.Empty;

using (ExcelPackage package = projectBL.DownloadExcel(ID, id1, id3, id4, id5))
   {
     System.Net.Mime.ContentDisposition cd = new System.Net.Mime.ContentDisposition
        {
            FileName = package.File.Name,
        };

        Response.Headers.Add("Content-Disposition", cd.ToString());

        return File(package.GetAsByteArray("password"), "application/vndopenxmlformats-officedocument.spreadsheetml.sheet");

    }
}
但每当我试图上传这个受密码保护的文件时,就会出现以下错误

该文件不是有效的包文件。如果文件是加密的, 请在构造函数中提供密码

因此,我已解决了上述错误,并提供了读取文件所需的密码。下面是相同的代码

public ActionResult UploadExcel()
{
  if (Request.Form.Files != null && Request.Form.Files.Count > 0)
   {
     var fileObject = Request.Form.Files[0];

     string fileName = ContentDispositionHeaderValue.Parse(fileObject.ContentDisposition).FileName.Trim('"');

     var Stream = fileObject.OpenReadStream();

     ExcelPackage package = new ExcelPackage(Stream,"password");

     projectBL.SaveData(package);

     return Json("Records Saved Succesfully.");
    }
}
但是,在提供密码后,由于以下错误,我仍然无法读取/上传excel文件

流必须是读/写的

所以我的问题是如何使用流读取受密码保护的文件。我正在web api中使用此代码


在此感谢您的帮助

是XLS还是XLSX文件?EPplus无法处理XLS文件

以下是我如何简单地使用ePlus:

using (ExcelPackage xlPackage = new ExcelPackage(new FileInfo(fileName), "password"))
{}

它是XLS还是XLSX文件?EPplus无法处理XLS文件

以下是我如何简单地使用ePlus:

using (ExcelPackage xlPackage = new ExcelPackage(new FileInfo(fileName), "password"))
{}

当我试图上传excel文件时,它显示了错误代码 “该文件不是有效的包文件。如果该文件已加密,请在构造函数中提供密码。”

但是我的excel文件没有加密,也没有密码保护

我通过使用try-catch找到了一个解决方案,就像我刚刚打开excel文件一样,然后尝试将该文件从.xls保存为.xlsx格式


完成此操作后,文件上载成功,EPPlus dll未出现任何错误,工作正常

当我试图上传excel文件时,它显示了 “该文件不是有效的包文件。如果该文件已加密,请在构造函数中提供密码。”

但是我的excel文件没有加密,也没有密码保护

我通过使用try-catch找到了一个解决方案,就像我刚刚打开excel文件一样,然后尝试将该文件从.xls保存为.xlsx格式


完成此操作后,文件上载成功,EPPlus dll未出现任何错误,工作正常

我不是专家,但是'var stream=fileObject.OpenreadStream()'正按照它所说的那样,打开一个只读流,其中作为'new ExcelPackage(stream,“password”);'需要读/写流。您能改为“var stream=fileObject.OpenStream()”吗?我不确定它是什么类型的,但可能它有一个类似的方法。@dub不,只有一个方法可以读取文件,没有其他可用的方法fileObject的类型是什么?如果保存了文件,那么可以使用下面答案建议的方法。如果不能,那么您将需要使用fileObject.CopyTo()方法,该方法将该文件的内容复制到流中。请看这里:我可能建议尝试几种不同的方法,内存流可能是您想要采用的方法,因此创建一个本地MemorySteam,然后调用fileObject.CopyTo(MemoryStream),然后尝试用该流创建Excel包。@DubDub谢谢您的解决方案。。成功了!我不是专家,但是'var stream=fileObject.OpenreadStream()'正按照它所说的那样,打开一个只读流,其中作为'new ExcelPackage(stream,“password”);'需要读/写流。您能改为“var stream=fileObject.OpenStream()”吗?我不确定它是什么类型的,但可能它有一个类似的方法。@dub不,只有一个方法可以读取文件,没有其他可用的方法fileObject的类型是什么?如果保存了文件,那么可以使用下面答案建议的方法。如果不能,那么您将需要使用fileObject.CopyTo()方法,该方法将该文件的内容复制到流中。请看这里:我可能建议尝试几种不同的方法,内存流可能是您想要采用的方法,因此创建一个本地MemorySteam,然后调用fileObject.CopyTo(MemoryStream),然后尝试用该流创建Excel包。@DubDub谢谢您的解决方案。。成功了!我已经试过这个了。问题是如果我使用FileInfo类,那么该文件不可用。当我从本地路径上传文件时,这就是为什么我使用流来读取文件。api托管在azure上。我已经尝试过使用此api。问题是如果我使用FileInfo类,那么该文件不可用。当我从本地路径上传文件时,这就是为什么我使用流来读取文件。api托管在azure上。