2015-01-20 17 views
5

Tôi đang sử dụng thư viện EPPlus để tạo tệp excel mà tôi lưu thành công trong một thư mục trên máy chủ.Tải xuống tệp Excel sau khi tạo bằng EPPlus

Làm cách nào để tải tệp này xuống máy cục bộ của tôi?

Đây là mã của tôi

public void CreateExcelFirstTemplate() 
{ 
    var fileName = "C:\ExcelDataTest\ExcellData.xlsx"; 
    var file = new FileInfo(fileName); 
    using (var package = new OfficeOpenXml.ExcelPackage(file)) 
    { 
     var worksheet = package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Attempts"); 
     worksheet = package.Workbook.Worksheets.Add("Assessment Attempts"); 
     worksheet.Row(1).Height = 20; 

     worksheet.TabColor = Color.Gold; 
     worksheet.DefaultRowHeight = 12; 
     worksheet.Row(1).Height = 20; 

     worksheet.Cells[1, 1].Value = "Employee Number"; 
     worksheet.Cells[1, 2].Value = "Course Code"; 

     var cells = worksheet.Cells["A1:J1"]; 
     var rowCounter = 2; 
     foreach (var v in userAssessmentsData) 
     { 
     worksheet.Cells[rowCounter, 1].Value = v.CompanyNumber; 
     worksheet.Cells[rowCounter, 2].Value = v.CourseCode; 

     rowCounter++; 
     } 
     worksheet.Column(1).AutoFit(); 
     worksheet.Column(2).AutoFit(); 


     package.Workbook.Properties.Title = "Attempts"; 
     package.Save(); 
    } 
} 
+0

Bạn có muốn lưu tập tin này trên máy chủ hoặc bạn chỉ muốn tạo ra nó mỗi thời điểm đó người dùng yêu cầu tải xuống? –

+0

Tôi muốn tạo tệp mỗi lần người dùng yêu cầu tải xuống – Arianule

Trả lời

10

Nếu bạn đang tạo ra tập tin này trên mỗi yêu cầu bạn không cần phải lưu nó trên máy chủ:

public void CreateExcelFirstTemplate() 
{ 
     var fileName = "ExcellData.xlsx"; 
     using (var package = new OfficeOpenXml.ExcelPackage(fileName)) 
     { 
      var worksheet = package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Attempts"); 
      worksheet = package.Workbook.Worksheets.Add("Assessment Attempts"); 
      worksheet.Row(1).Height = 20; 

      worksheet.TabColor = Color.Gold; 
      worksheet.DefaultRowHeight = 12; 
      worksheet.Row(1).Height = 20; 

      worksheet.Cells[1, 1].Value = "Employee Number"; 
      worksheet.Cells[1, 2].Value = "Course Code"; 

      var cells = worksheet.Cells["A1:J1"]; 
      var rowCounter = 2; 
      foreach (var v in userAssessmentsData) 
      { 
      worksheet.Cells[rowCounter, 1].Value = v.CompanyNumber; 
      worksheet.Cells[rowCounter, 2].Value = v.CourseCode; 

      rowCounter++; 
      } 
      worksheet.Column(1).AutoFit(); 
      worksheet.Column(2).AutoFit(); 


      package.Workbook.Properties.Title = "Attempts"; 
      this.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      this.Response.AddHeader(
        "content-disposition", 
        string.Format("attachment; filename={0}", "ExcellData.xlsx")); 
      this.Response.BinaryWrite(package.GetAsByteArray()); 
     } 
}   
+0

Tôi đang sử dụng mã mẫu do bạn cung cấp .. Nhưng tôi gọi điện này bằng cách sử dụng cuộc gọi ajax và khi tôi thực thi nó, lỗi này sẽ bị lỗi ajax và không thể tải xuống excel tập tin. Cảm ơn trước. –

+0

Bạn không cần sử dụng ajax để tải xuống tệp. Thực hiện nhận/đăng thường xuyên. Do Nội dung được định hướng mà chúng tôi đã đặt, trình duyệt sẽ biết cách xử lý phản hồi chính xác (tải xuống tệp đính kèm). Bạn có thể đọc về tiêu đề này tại đây: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition –

1

Đây là hành động mẫu để tải về tập tin. Hãy sửa đổi nó theo yêu cầu của bạn.

public FileActionResult DownloadMyFile() 
{ 
    var filePath = "C:\ExcelDataTest\ExcellData.xlsx"; 
    var fileName = "ExcellData.xlsx"; 
    var mimeType = "application/vnd.ms-excel"; 
    return File(new FileStream(filePath, FileMode.Open),mimeType, fileName); 
} 
5

Thay vì sử dụng package.Save() bạn có thể sử dụng package.GetAsByteArray() mà sẽ trả về một mảng byte mà sau đó bạn có thể sử dụng dòng FileResult hoặc FileContentResult từ hành động MVC để kích hoạt tải xuống tập tin. Phương pháp này sẽ cho phép bạn tải xuống tệp mà không lưu tệp vào máy chủ trước.

Các vấn đề liên quan