.net 클라이언트 Excel 구현 코드 내보내기 및 고려 사항

4181 단어
클라이언트에서 excel 내보내기
 
  
/*
* DataGrid Excel
*
* @param strTitle  
* @param dgData     DataGrid
* @param iStartCol  
* @param iEndCol  
*
* :  calvin
* : 2005-10-08
* :  
* :
**/
function DataGrid2Excel(strTitle, dgData, iStartCol, iEndCol)
{
   // Excel Applicaiton Object
   var appExcel = null;
   //
   var currentWork = null;
   var currentSheet = null;
   
   try
   {
     // application
     appExcel = new ActiveXObject("Excel.Application");
     appExcel.Visible = true;
   }
   catch(e)
   {
     window.alert("Please Install Excel First");
     
     return;
   }
   
   //
   currentWork = appExcel.Workbooks.Add();
   currentSheet = currentWork.ActiveSheet;
 
   // excel
   //
   currentSheet.Cells(1,1).Value = strTitle;
   currentSheet.Cells(1,1).Value = dgData.innerText;
   window.alert(dgData.innerHTML);
 
   //
   for (var iRow = 0; iRow < dgData.rows.length - 1; iRow++)
   {
     //
     for (var iCol = iStartCol; iCol <= iEndCol; iCol++)
     {
       currentSheet.Cells(iRow + 2, iCol + 1).Value = 
         dgData.rows[iRow].cells[iCol].innerText;
     }
   }
}

/**************************************************************************/
/**
*dgData에서 0-3열의 데이터를 excel 파일로 내보내기
**/
function ToExcel()
{
DataGrid2Excel("javascript를 사용하여 excel을 내보내는 예",document.getElementsById("dgData"), 0,3);
} 이 방법의 단점은 다음과 같습니다.
(1) 클라이언트에서 Excel을 호출할 수 있습니다.Application, IE의 보안 수준을 낮게 설정해야 합니다.
(2) 방법과 마찬가지로 현재 데이터grid에 표시된 데이터만 내보낼 수 있고 페이지의 데이터를 내보낼 수 없습니다.
  --------------------------------------------------------------------------------
최상의 솔루션: DataTable을 excel로 내보내기
자, 우리 이 지루한 포스터를 빨리 끝내자.일반적으로 페이지의 데이터grid는 조회된 데이터테이블을 데이터 원본으로 한다.그러면 모든 데이터를 excel에 가져오기 위해서 DataTable 데이터 원본을 excel로 출력하면 됩니다.
 
  
/**////
    /// DataTable excel
    ///

    /// DataTable
    /// :
    /// :2005 10 08
    /// :
    /// :
    public static void DataTable2Excel(System.Data.DataTable dtData)
    {
      System.Web.UI.WebControls.DataGrid dgExport = null;
      //
      System.Web.HttpContext curContext = System.Web.HttpContext.Current;
      // IO excel
      System.IO.StringWriter strWriter = null;
      System.Web.UI.HtmlTextWriter htmlWriter = null;
      if (dtData != null)
      {
        //
        curContext.Response.ContentType = "application/vnd.ms-excel";
        curContext.Response.ContentEncoding =System.Text.Encoding.UTF8;
        curContext.Response.Charset = "";
        
        // excel
        strWriter = new System.IO.StringWriter();
        htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
        // dgData , DataGrid
        dgExport = new System.Web.UI.WebControls.DataGrid();
        dgExport.DataSource = dtData.DefaultView;
        dgExport.AllowPaging = false;
        dgExport.DataBind();
        //
        dgExport.RenderControl(htmlWriter);  
        curContext.Response.Write(strWriter.ToString());
        curContext.Response.End();
      }
    }

주의해야 할 것은 excel을 내보내기 전에 데이터테이블의 열 이름을 고객이 요구하는 문자로 바꾸면 ok입니다.DataTable에서 도출된 것이기 때문에 이런 방법은 페이지 데이터의 문제를 해결하여 궁극적인 해결 방안이라고 할 수 있다.

좋은 웹페이지 즐겨찾기