在C#

时间:2018-10-22 12:59:16

标签: 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.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文件

  

流必须是可读写的

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

对此有任何帮助!

2 个答案:

答案 0 :(得分:2)

是XLS还是XLSX文件? EPplus无法使用XLS文件。

这就是我简单地使用EPPLUS的方式:

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

答案 1 :(得分:0)

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

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

我使用try catch来找到解决方案,就像我刚刚打开excel文件,然后尝试将该文件从.xls保存为.xlsx格式。

完成此操作后,文件上传成功,并且EPPlus dll没有出现任何错误,并且运行良好!