在服务器上创建Excel文件并发送到浏览器

时间:2014-04-23 12:08:37

标签: c# asp.net-mvc file

我正在使用EPPlus在服务器上创建一个excel文件。问题是,我不想将文件保存在客户端硬盘上,当我在服务器上运行应用程序时,我相信这会将文件保存在服务器硬盘上。

是否可以将此文件发送回客户端/浏览器一些方法?

public void CreateAnnuityExcelSheet(List<Calculation> cList, FormCollection form, int DTCyear)
{
    List<Calculation> newList = new List<Calculation>();
    newList.Add(cList.First()); //Getting the values for the first row
    var StartValue = newList[0].StartValue;
    var radio = form["advanceOrArrears"];
    string fileName = newList[0].CalculationName;
    string path = @"C:\ExcelFiles\" + fileName + ".xlsx"; //Path for the file
    FileInfo info = new FileInfo(path);
    info.Directory.Create(); //If C:\ExcelFiles does not exist, create it
    if (!info.Exists)
    {
        using (ExcelPackage package = new ExcelPackage(info))
        {
            ExcelWorksheet ws = package.Workbook.Worksheets.Add(fileName);
            //Styles for the sheet
            package.Save();
        }
    }
}

3 个答案:

答案 0 :(得分:2)

最简单的方法是将字节作为文件发送到浏览器。如果用于创建Excel文件的库允许您保存到流(例如ClosedXML),那么您可以在MVC操作中执行

var stream = new MemoryStream();
workbook.SaveAs(stream);
stream.Position = 0;

return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", "file.xlsx");

如果您无法将其保存到内存流,则将其保存到服务器的光盘,然后您只需将文件路径和内容类型传递给return File()

答案 1 :(得分:0)

我使用了httphandler将字节文件对象发送到浏览器。

此链接应该有帮助,Generating a file, then launching a secure download

答案 2 :(得分:0)

然后将文件保存在服务器上,然后将其传输给控制器中的用户:

return new FilePathResult(myFilePath, 
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")