2014-07-08 4 views
0

MVC에서 응용 프로그램을 개발 중이며 데이터를 Excel 시트로 내보내려고합니다. 현재 내가 제대로MVC에서 시트를 엑셀로 내보내기하는 방법

public ActionResult ExportToExcel(int id) 
     { 
      string UserName = (string)HttpContext.Session["loggedUserName"]; 

      PurchaseOrderService purchaseOrderService = new PurchaseOrderService(); 
      PurchaseOrderDTO PurchaseOrder = purchaseOrderService.GetById(Convert.ToInt32(id)); 

      StringBuilder sb = new StringBuilder(); 
      sb.Append("<table border=`" + "1px" + "`b>"); 

      sb.Append("<tr>"); 
      sb.Append("<td><b><font face=Calibri size=3>Created By : " + UserName + "</font></b></td>"); 
      sb.Append("</tr>"); 

      sb.Append("<tr>"); 
      sb.Append("<td><b><font face=Calibri size=3>Purchase Order No. :" + PurchaseOrder.Id.ToString() + "</font></b></td>"); 
      sb.Append("</tr>"); 

      sb.Append("<tr>"); 
      sb.Append("<td><b><font face=Calibri size=3>Vendor Name : " + PurchaseOrder.VendorName.ToString() + "</font></b></td>"); 
      sb.Append("</tr>"); 

      sb.Append("<tr>"); 
      sb.Append("<td><b><font face=Calibri size=3>Purchase Order Date : " + PurchaseOrder.OrderDate.ToString("dd-MMM-yy") + "</font></b></td>"); 
      sb.Append("</tr>"); 

      sb.Append("<tr>"); 
      sb.Append("</tr>"); 

      sb.Append("<tr>"); 
      sb.Append("<td><b><font face=Calibri size=3>SR NO.</font></b></td>"); 
      sb.Append("<td><b><font face=Calibri size=3>PRODUCT CODE</font></b></td>"); 
      sb.Append("<td><b><font face=Calibri size=3>VP CODE</font></b></td>"); 
      sb.Append("<td><b><font face=Calibri size=3>PRODUCT DESCRIPTION</font></b></td>"); 
      sb.Append("<td><b><font face=Calibri size=3>QUANTITY</font></b></td>"); 
      sb.Append("</tr>"); 

      int rowCount = 1; 
      var quantity = 0; 

      foreach (var item in PurchaseOrder.purchaseOrderItemDTOList) 
      { 
       if (PurchaseOrder.purchaseOrderItemDTOList.Count > 1) 
       { 
        sb.Append("<td><font face=Calibri size=" + "11px" + ">" + rowCount.ToString() + "</font></td>"); 
        sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.ProductCode.ToString() + "</font></td>"); 
        sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.VendorProductCode.ToString() + "</font></td>"); 
        sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.Name.ToString() + "</font></td>"); 
        sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Quantity.ToString() + "</font></td>"); 
        quantity = quantity + item.Quantity; 

       } 
       sb.Append("</tr>"); 
       rowCount = rowCount + 1; 
      } 

      sb.Append("<tr>"); 
      sb.Append("<td colspan=3></td>"); 
      sb.Append("<td><b><font face=Calibri size=3>Total Quantity : </font></b></td>"); 
      sb.Append("<td><font face=Calibri size=" + "11px" + ">" + quantity.ToString() + "</font></td>"); 
      sb.Append("</tr>"); 

      sb.Append("</table>"); 
      HttpContext.Response.AddHeader("content-disposition", "attachment; filename=PO NO_" + PurchaseOrder.Id +"_"+ DateTime.Now.ToString("dd-MMM-yy") + ".xls"); 
      this.Response.ContentType = "application/vnd.ms-excel"; 
      byte[] buffer = System.Text.Encoding.UTF8.GetBytes(sb.ToString()); 
      return File(buffer, "application/vnd.ms-excel"); 
     } 

이 코드를이 코드 코드를 작품을 사용하고 있지만 때 나는 그것이 표시하는 엑셀 시트 열려고하고 - 그 작업을 수행하는 다른 방법은

The file you are trying to open is in different format than specified by the file extension. 

거기를?

+0

가능한 중복 (http://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file- [엑셀 (.XLS 및 .XLSX)의 C#에서 파일을 만듭니다] from-c-sharp) – Andreas

답변

0

그래서 당신이 HTML 테이블을 .xls 문서로 열려고하는 것처럼 보입니다. 작동하지 않는 것 같습니다.

Excel (imo)로 가져 오는 가장 쉬운 방법은 데이터를 구분 된 파일 (일반적으로 탭 또는 쉼표)로 내보내는 것입니다.

는 C#에서 CSV 파일을 만들기위한 몇 가지 라이브러리가 있습니다,하지만 당신은 XLS 파일을 만드는 방법에 설정하는 경우 가능한 일부 라이브러리도 있습니다 수동 너무

StringBuilder sb = new StringBuilder(); 
//headers 
sb.AppendLine("column1, column2, column3, column4"); 

foreach (var item in dataItemsEnumerable) 
{ 
    sb.AppendFormat("{0},{1},{2},{3}\n", item.value1, item.value2, item.value3, item.value4); 
} 

File.WriteAllText(sb.ToString, "myFile.csv"); 

매우 간단합니다. 또한이 질문은 정말 너무 당신의 옵션에 대해 설명이 하나 https://code.google.com/p/excellibrary/

를 살펴 보자 : Create Excel (.XLS and .XLSX) file from C#

1

을 당신은 엑셀 시트를하지 생성하지만, HTML - 테이블된다. 파일을로드 할 때 오류 팝업이 불가피하기 때문에 모든 Excel 사용자에게 성가신 일입니다. 또한 고급 형식 지정, 수식, 유효성 검사 등은이 방법으로는 불가능합니다.

libls EPPLUS는 xlsx 파일을 읽고 쓰는 데 아주 좋은 (그리고 빠릅니다!) 인터페이스를 제공합니다. 라이브러리에는 좋은 licencse가 있으므로 프로젝트 나 다른 쓰레기 소스를 열 필요가 없습니다.

libary에는 좋은 문서 (샘플 프로젝트)가 있습니다. 의

http://epplus.codeplex.com/

관련 문제