2010-12-10 3 views
1

현재 DataSet/DataGrid에서 특정 Excel 파일 내보내기에 대한 날짜의 서식을 지정하고 있습니다.
날짜는과 같이 포맷 :C#에서 DataGrid에서 Excel로 내보낼 때 자동 완성 서식 지정

public static void ExportDStoExcel(DataSet ds, string filename) 
    { 
     HttpResponse response = HttpContext.Current.Response; 
     response.Clear(); 
     response.Charset = ""; 

     response.ContentType = "application/vnd.ms-excel"; 
     response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); 

     using (StringWriter sw = new StringWriter()) 
     { 
      using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
      { 
       DataGrid dg = new DataGrid(); 
       dg.DataSource = ds.Tables[0]; 
       dg.DataBind(); 
       dg.RenderControl(htw); 
       response.Write(sw.ToString()); 
       response.End(); 
      } 
     } 

    } 

내 유일한 문제는 일단 데이터 집합을 만드는

DateTime date = Convert.ToDateTime(entry.Date); 
string formatdate = String.Format("{0:yyyy/MM/dd}", date); 

말했다되고, 수행, 내가 Excel 파일에 데이터 집합을 내보내려면 다음 코드를 사용하여 Excel로 내보내기하면 Excel에서 YYYY/MM/DD 대신 MM/DD/YYYY와 같은 날짜를 자동으로 형식 지정합니다.

Excel에서 열어 수동으로 수행 할 수 있지만 내보내기가 자동화 된 시스템에 내장되어 있으며 하드 코딩해야한다는 것을 알고 있습니다.

Excel의 DateTime 자동 서식 지정을 우회 할 수있는 방법이 있습니까?

답변

1

지금은 HTML 표를 출력하는 중입니다. Excel에서는 Excel 표기법을 사용하여 HTML 표를 출력합니다. 열의 속성을 지정할 수 있으려면 Excel의 수준으로 스스로를 끌어 올렸을 것입니다 (일반이 아닌 텍스트로 유형 설정). 이것은 실제 xls 파일을 생성해야한다는 것을 의미합니다 (거기에는 다양한 라이브러리가 있습니다). 또는 (Office 2010에 대한 제한이 허용되는 경우) 일반 .NET API로 작성할 수있는 Open XML 형식이 있습니다.

+0

는 마이크로 소프트의 오픈 XML의 SDK 2.0을 사용하여 오픈 XML 경로를 갈, 그것은 트릭을해야 할 것 같습니다! 저를 올바른 방향으로 가리켜 주셔서 감사합니다! – Lando

3

나는 똑같은 문제가있어서 텍스트 앞에 비 단호 공백 (& nbsp)을 추가하여 해결했습니다. 자동 서식 지정에서 Excel을 중지했습니다. 아니 가장 깨끗한 해결책하지만 나를 위해 속임수를 썼는지 ...

0

당신은 스타일

mso-number-format:"\\@"

\@ 텍스트 형식으로 만 모든 데이터를 처리하는 엑셀 말할 것이다 MSO 번호 - 형식 세포를 능가 할 수 있습니다. 따라서 자동 형식은 발생하지 않습니다.

과 같은 코드를 업데이트하십시오 :

response.ContentType = "application/vnd.ms-excel"; 
response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); 
response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"); 
response.Write("<head><style> td {mso-number-format:\\@;} </style></head><body>"); 

using (StringWriter sw = new StringWriter()) 
{ 
    using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
    { 
     DataGrid dg = new DataGrid(); 
     dg.DataSource = ds.Tables[0]; 
     dg.DataBind(); 
     dg.RenderControl(htw); 
     response.Write(sw.ToString()); 

     response.Write("</body></html>"); 
     response.End(); 
    } 
} 

또는

당신이 특정 날짜 형식이 시도 할 수 있습니다. 참조 : http://cosicimiento.blogspot.in/2008/11/styling-excel-cells-with-mso-number.html

mso-number-format:"yyyy\/mm\/dd"

관련 문제