2015-01-21 4 views
3

나는 이전에이 질문을했지만 파일 다운로드를 시작하는 데 여전히 어려움이 있습니다.Excel 파일 다운로드

var fileName = "ExcelData.xlsx"; 
var file = new FileInfo(fileName); 
using (var package = new OfficeOpenXml.ExcelPackage(file)) 
{ 
    var worksheet = package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Employee Data"); 
    if (package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Employee Data") == null) 
    { 
     worksheet = package.Workbook.Worksheets.Add("Employee Data"); 
    } 
    else 
    { 
     package.Workbook.Worksheets.Delete(1); 
     worksheet = package.Workbook.Worksheets.Add("Employee Data"); 
    } 
    worksheet.Cells[1, 1].Value = "Date start"; 
    worksheet.Cells[1, 2].Value = "Name"; 

    var rowCounter = 2; 
     foreach (var v in users) 
     { 
     string dt = v.DateAdded.ToString(); 
     worksheet.Cells[rowCounter, 1].Value = dt; 
     worksheet.Cells[rowCounter, 2].Value = v.Name; 
     rowCounter++; 
     } 
     package.Workbook.Properties.Title = "Employee Data"; 

     System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
     response.Clear(); 
     response.Buffer = true; 
     response.Charset = ""; 
     response.ContentType = "application/vnd.openxmlformats-  officedocument.spreadsheetml.sheet"; 
     response.AddHeader("content-disposition", "attachment;filename=ExcelData.xlsx"); 
     response.BinaryWrite(package.GetAsByteArray()); 
} 

오류가 발생하지 않았지만 다운로드도 트리거되지 않았습니다.

Response.Flush(); 
Response.Close(); 
Response.End(); 

그것은 바로 결과를 출력 : 생성 된 파일이

+0

response.Clear();를 주석으로 처리하십시오. 선. –

답변

3

FileContentResult을 반환하지 않으시겠습니까?

사용중인 Excel 라이브러리가 시트를 바이트 배열로 반환 할 수 있으므로이 방법을 사용할 수 있습니다.

return File(package.GetAsByteArray(), "application/xlsx", "YourReportName.xlsx"); 

그래서 당신이 코드에서이 블록을 제거 할 수 있습니다 :

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
    response.Clear(); 
    response.Buffer = true; 
    response.Charset = ""; 
    response.ContentType = "application/vnd.openxmlformats-  officedocument.spreadsheetml.sheet"; 
    response.AddHeader("content-disposition", "attachment;filename=ExcelData.xlsx"); 
    response.BinaryWrite(package.GetAsByteArray()); 

을 그냥 위와 같이 파일을 반환 컨트롤러에서

, 당신은이 같은 FileContentResult을 반환 할 수 있습니다.

System.Web.Mvc에 대한 컨트롤러에 using 문을 추가해야합니다.

2

시도 코드 후 기본 다운로드 폴더에 저장되도록 나는 다운로드를 실행하려면 어떻게합니까.

관련 문제