欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net客户端导出Excel实现代码及注意事项

程序员文章站 2024-03-03 21:22:46
客户端导出excel 复制代码 代码如下: /* * 将datagrid导出为excel文件 * * @param strtitle  文件标题 * @param dgda...
客户端导出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)与方法一相同,还是只能导出当前显示在datagrid里面的数据,无法导出分页的数据。
  --------------------------------------------------------------------------------
  终极解决方案:将datatable导出为excel
  好,让我们快点结束这篇无聊的post。一般来说,页面上的datagrid是以查询得到的一个datatable为数据源的。那么为了把全部数据导入excel中,我们只要把datatable数据源输出为excel就可以了。
复制代码 代码如下:

/**//// <summary>
    /// 把datatable内容导出伟excel并返回客户端
    /// </summary>
    /// <param name="dgdata">待导出的datatable</param>
    /// 创 建 人:陈文凯
    /// 创建日期: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之前要把datatable的列名更改为客户要求的文字,就ok了。因为是从datatable导出的,所以这种方法解决了分页数据的问题,堪称终极解决方案。