2013-09-06 2 views
0

이것은 내 코드이지만 예기치 않은 형식 오류가 발생합니다. MIME 형식에 문제가있어 야합니다. 그러나이 형식은 원래 공식 MIME 형식 인 것으로 확인되었습니다.Excel로 Gridview 내보내기 - 외부 테이블이 예상 된 형식이 아닙니다.

무엇이 누락 되었습니까? 이 메서드로 만드는 모든 문서를 열려고 할 때마다 "손상"것으로 보이지만 멀리 메시지를 클릭하면 모든 것이 제대로 작동합니다.

메시지 : 열려고하는 파일 'name.ext'의 형식이 파일 확장명이 아닌 다른 형식입니다. 파일을 열기 전에 파일이 손상되지 않았고 신뢰할 수있는 출처인지 확인하십시오. 지금 파일을 열시겠습니까?

그러나 유효하지 않기 때문에 파일을 가져올 수 없으므로이 경고를 제거해야합니다. 파일을 2003-2007 형식 .xls로 저장하면 문제가 해결 된 것으로 보입니다. 그러나 이것은 효과적인 해결책이 아닙니다.

protected void ExportToExcel(string fileName) 
    { 
     var cmd = new SqlCommand(query); 
     var dt = GetData(cmd); 

     var writer = new StringWriter(); 

     var gridview = new GridView(); 
     gridview.AllowPaging = false; 
     gridview.DataSource = dt; 
     gridview.DataBind(); 

     Response.Clear(); 

     var hw = new HtmlTextWriter(writer); 
     gridview.RenderControl(hw); 
     Response.ContentType = "application/vnd.ms-excel"; 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); 
     // this.EnableViewState = false; 

     Response.Write(writer.ToString()); 
     // Response.Flush(); 
     Response.End(); 
    } 

답변

2

직접 수행하면 내보내기를 수행하지 않습니다. 가짜 응답 헤더가있는 html 표를 보내 브라우저에서이 내용을 Excel로 열어 보도록하십시오.

사실 여러 가지 방법으로 실패 할 수 있습니다. 사실 악의적 인 행동으로 해석 될 수 있습니다. 나는이 길로가는 것이 단지 문제를 요구할 뿐이라고 생각한다.

더 나은 방법은 기본 Excel 라이브러리를 사용하여 내보내는 것입니다. 여기에 실제 파일 (2007 이상)을 능가하는 DataTable에 수출의 예를

https://stackoverflow.com/a/9569827/351383

1

생각 나는 나중에 참조 할 수 있도록 주석을 추가 할 것입니다. TransferSpreadsheet (내보내기)를 수행하는 매크로 중 하나가 실패하여 "외부 테이블이 예상 된 형식이 아닙니다."라고 표시됩니다. 오류 창. 대상 파일의 경로로 이동하여 열었습니다. 마지막으로 만든 파일에 '쓰레기'문자가 있음을 알았습니다. Excel 파일을 삭제하고 문제없이 매크로를 다시 실행했습니다.