2017-12-14 4 views
1

저는 C#을 사용하여 GridView 및 BoundFields를 사용하여 Excel 파일을 프로그래밍 방식으로 생성합니다. 지금은 특정 값을 순수 텍스트로 유지하는 것이 아니라 날짜로 변환합니다.Excel에서 텍스트를 날짜로 변환하지 않도록 GridView BoundField 서식 지정

Excel에서 변환하지 않고 DB에서 반환 된 상태로 유지하고 싶습니다. 몇 가지 옵션을 살펴 보았지만이 전환을 해결할 수는 없습니다.

이것은 직접 파일로 연결됩니다.

문제가있는 BoundField는 "ReportNumber"입니다. 모두가 제공 할 수있는 도움에 감사드립니다.

코드 조각 :

[HttpGet] 
public ActionResult AFDOJClosed2Excel(byte[] Data, string Reporting_Year) 
{ 

    try 
    { 
     DataTable dt = GetAFDOJClosed(Reporting_Year);//your datatable 
     DataView dv = dt.DefaultView; 
     dv.Sort = "Case_Number ASC"; 

     DataTable sortedDT = dv.ToTable(); 

     dt = sortedDT; 

     GridView excel = new GridView(); 
     excel.DataSource = dt; 
     excel.AutoGenerateColumns = false; 

     //Explicitly Create bound fields 

     BoundField CaseNumber = new BoundField(); 
     CaseNumber.HeaderText = "Case Number"; 
     CaseNumber.DataField = "Case_Number"; 
     excel.Columns.Add(CaseNumber); 

     BoundField Docket = new BoundField(); 
     Docket.HeaderText = "Docket"; 
     Docket.DataField = "Docket"; 
     excel.Columns.Add(Docket); 

     BoundField AgencyName = new BoundField(); 
     AgencyName.HeaderText = "Agency Name"; 
     AgencyName.DataField = "Agency_Name"; 
     excel.Columns.Add(AgencyName); 


     BoundField ReportNumber = new BoundField(); 
     ReportNumber.HeaderText = "Report Number"; 
     ReportNumber.DataField = "Report_Number"; 
     excel.Columns.Add(ReportNumber); 


     BoundField ClosedDate = new BoundField(); 
     ClosedDate.HeaderText = "Closed Date"; 
     ClosedDate.DataField = "Closed_Date"; 
     ClosedDate.DataFormatString = "{0:d}"; 
     excel.Columns.Add(ClosedDate); 

     BoundField TotalDisbursed = new BoundField(); 
     TotalDisbursed.HeaderText = "Total Disbursed"; 
     TotalDisbursed.DataField = "Total_Disbursed"; 
     TotalDisbursed.DataFormatString = "{0:C}"; 
     excel.Columns.Add(TotalDisbursed); 

     excel.DataBind(); 


     Response.ClearContent(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment; filename=AFDOJClosed" + Reporting_Year + ".xls"); 
     Response.ContentType = "application/ms-excel"; 

     Response.Charset = ""; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     excel.RenderControl(htw); 

     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 

     return null; 
    } 
    catch (Exception ex) 
    { 
     ViewBag.ErrorMessage = ex.Message.ToString(); 

     return View("Error"); 
    } 
} 

답변

0

그 (와 관련된 특정 데이터/서식 메타가없는 경우 Excel에서 셀의 내용에 따라 자신의 서식 규칙을 적용 예를 들어, 형식으로 텍스트, 숫자, 날짜/시간 등).

코드에 GridView이 들어가고 그리드 데이터를 효과적으로 응답 스트림에 쓸 수 있습니다. 생성 된 파일에 관한 한, 날짜는 "일반"유형의 셀에 있으며 Excel은 기본 서식 규칙을 적용합니다.

셀과 관련된 데이터 형식을 제어하려면 위 코드와 같이 변환 메커니즘을 사용하는 대신 Excel 데이터와보다 명확하게 상호 작용하는 라이브러리를 사용해야합니다. NuGet의 상당히 직선적 인 도서관은 EPPlus입니다. 우리는 당신이 위에서 설명한대로 정확하게 사용했습니다.

특정 날짜 형식을 셀에 적용하려면 다음과 같이하면됩니다.

ws.Cells["A3"].Style.Numberformat.Format = "yyyy-mm-dd"; 
+0

답장을 보내 주셔서 감사합니다. 이 예에서 서식을 추가하는 것은 괜찮습니다. 그 정반대의 문제는 제가 원하지 않을 때 포맷팅하는 것입니다. 나는 EPPlus 제안을 시도 할 것이다. –

+0

@J 그랜트 나는 당신이 그것을 포맷하고 싶지는 않지만 코드에서 의도 한 데이터 포맷을 결정할 수 없다는 것을 알게되었다. 샘플은 Excel이 결정하지 않고 원하는 형식으로 설정할 수 있음을 보여줍니다. – DiskJunky

+1

난 그냥 혼자 있기를 바랐다. 그것은 3 자리에 대시가있는 숫자의 문자열이다. Excel은 "0"으로 시작하는 값만 변환합니다. 7 월 7 일을 해석하기 때문에 나는 그것을 안다. 통찰력에 감사드립니다. 나에게는 그저 평범한 텍스트 형식을 나타낼 수 없다는 것이 이상하다. 또는 "스위치를 누르지 마십시오"라고 말하기위한 스위치 –