2011-07-29 5 views
2

이 모든 내용은 인터넷에 연결하지 않아도되는 로컬 인트라넷에서 발생합니다.단추를 클릭하면 ASP.NET Excel 파일 다운로드

나는 쿼리를 실행 한 데이터베이스가 있으며, 그 후에 사용자가 스프레드 시트를 작성/전송하는 "스프레드 시트 다운로드"버튼을 누릅니다. 스프레드 시트의 생성은 정상적으로 작동하지만 많은 시도 후에 파일을 다운로드 할 수 없습니다. 여기에 내가 무엇을 시도했다입니다 :

  • 는 응답이/헤더
    • 전송 작업
    • 의 WriteFile
    • BinaryStream
    • 리디렉션
  • 자바 스크립트 리디렉션
    • 응답 개체를 수정. 쓰기 (javas) cript 코드) 대부분의 경우

, 결과는 엑셀 파일을 생성한다는 것입니다,하지만 리디렉션/다운로드가 발생하지 않는다. Response.Redirect()의 경우, 웹 사이트라면 위대한 기능을하지만, 파일 : ///로 리디렉션하면 스레드 예외가 발생하지만 자세한 내용은 표시되지 않습니다.

ASP.NET 문서의 수명주기와 관련이 있다고 생각되지만 ASP.NET에 대한 충분한 지식이 없으므로 걱정됩니다.

+0

응답에서 ContentType을 application/vnd.ms-excel로 설정 했습니까? – FlyingStreudel

+0

어떤 버전의 ASP.NET/.NET 프레임 워크를 사용하고 있습니까? –

+0

네, 콘텐츠 형식에 .NET 4 – Itskiddly

답변

14
FileInfo file = new FileInfo(PathToExcelFile); 
if (file.Exists) 
{ 
    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", "attachment; filename=" + fileName); 
    Response.AddHeader("Content-Type", "application/Excel"); 
    Response.ContentType = "application/vnd.xls"; 
    Response.AddHeader("Content-Length", file.Length.ToString()); 
    Response.WriteFile(file.FullName); 
    Response.End(); 
} 
else 
{ 
    Response.Write("This file does not exist."); 
} 
+0

이것은 '적절한'방법으로 보이지만 Response.End()가 스레드 중단 오류를 발생시킵니다. – Itskiddly

+0

흠 ... 나를 위해 일하는 프로덕션 시스템에서 복사 한 코드입니다. 나는 왜 그것이 당신을 위해 일하지 않는지 궁금해. Response.End()에서 무슨 일이 일어나는지 알아 내려고 노력하겠습니다. –

+0

어쩌면 다음을 시도해보십시오. http://support.microsoft.com/kb/312629/ –

-2
ClientScript.RegisterStartupScript(GetType(), "hwa", "window.open('" + System.Configuration.ConfigurationManager.AppSettings["WebSite"].ToString() + "Document/SummaryReport/" + FileName + "','_blank');", true); 

코드가 버튼 클릭에 엑셀 파일로 다운로드 할 수 있다는 점이다. 이제는 C# 코드를 사용하여 Excel 파일을 쉽게 다운로드 할 수 있습니다.

+0

당신의 asnswer에 대해 자세히 설명해 주시겠습니까? 코드 만 게시하는 것만으로는 충분하지 않습니다. –

관련 문제