2012-01-25 6 views
0

DataTable을 XLS 파일로 변환하려고합니다. 코드DataTable을 변환 할 수 없습니까?

Snippet1

Response.Clear(); 
     Response.Buffer = true; 

     Response.AddHeader("content-disposition","attachment;filename=New.xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.ms-excel"; 

     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 

     for (int i = 1; i < gvGridView.HeaderRow.Cells.Count; i++) 
     { 
      gvGridView.HeaderRow.Cells[i].Text = Table.Columns[i - 1].ColumnName; 
     } 

     for (int i = 0; i < gvGridView.Rows.Count; i++) 
     { 
      //Apply text style to each Row 
      gvGridView.Rows[i].Attributes.Add("class", "textmode"); 
     } 
     gvGridView.RenderControl(hw); 

     //style to format numbers to string 
     string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
     Response.Write(style); 
     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 

아래이 코드는 잘 보인다. xls 파일을 생성했습니다. 그리고 그것은 정확하게 열릴 수 있습니다. 그러나이 과정을 리버스 엔지니어링하려고했습니다. 즉,이 특정 xls 파일을 다시 datatable로 변환합니다. 아래 코드 :

Snippet2

int idx = filen.IndexOf("."); 
     string tf = filen.Remove(idx, 4); 

     OleDbConnection MyConnection = null;  
     DataSet DtSet = null;  
     OleDbDataAdapter MyCommand = null; 
     //Connection for MS Excel 2003 .xls format 
     MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties=Excel 8.0;");  
     MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [table$]", MyConnection);  
     DtSet = new System.Data.DataSet();  
     MyCommand.Fill(DtSet);   
     dt = DtSet.Tables[0];   
     MyConnection.Close();    
     if (dt.Rows.Count > 0)   
     {    
      theGridView.DataSource = dt;   
      theGridView.DataBind();  
     }   
     if(System.IO.File.Exists(path))  
     {    
      System.IO.File.Delete(path);  
     } 

오류 발생이 코드. 그것은 말한다 :

외부 파일 형식이

를 지원하지 난 당신이 잘못된 OLEDB 공급자를 사용할 때이 오류가 비슷합니다 나타났습니다. 하지만 제 경우에는 .xls (2003) 형식으로 Microsoft.Jet.OLEDB.4.0을 사용하고 있으므로 아무 문제가 없습니다. 그러나 어떻게 든 그것은 아직도 일어났다.

이 코드는 테스트 한 다른 .xls 파일에서도 작동합니다. # Snippet1을 사용하여 변환하여 생성 된 파일에만 작동하지 않습니다. 그러나 # Snippet1을 사용하여 파일을 만든 다음 모든 셀을 새로운 .xls 파일로 복사한다고 가정합니다. # Snippet2는이 새 파일에 대해 작동합니다. 즉, # Snippet1에서 직접 제작 한 파일 만 작동하지 않습니다.

나는 뭔가 잘못했다고 생각했습니다. 그래서 누군가가 나를 도울 수 있기를 바랍니다.

답변

1

Excel 출력물 조각 Excel 파일을 생성하지 않는 OS. 그것은 HTML 테이블을 생성하고 컴퓨터에 Excel로 열도록 내용 유형을 설정합니다.

라이브러리를 사용하여 실제 Excel 파일을 생성하거나 Excel 데이터 interop (둘 다에 많은 기사가 있음)를 사용하여 직접 소비 할 수 있습니다.

대신에 .csv 파일을 생성하고 엑셀 콘텐츠 형식을 유지하면 엑셀이 열리지 만 서식을 잃을 수 있습니다. 그런 다음 가져 오기를 통해 확장 프로그램을 검사하여 Excel 또는 일반 텍스트로 읽을 수 있습니다.

+0

어떻게 할 수 있습니까? 너라면 그렇게 될거야. – rofans91

+0

나는 그 문제를 혼자서 해결할 수 있었다. 너의 설명이 옳았다. .xls 파일을 만드는 것은 나쁜 방법이었습니다. – rofans91

관련 문제