.net客户端导出Excel实现代码及注意事项
程序员文章站
2024-03-05 09:56:36
客户端导出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导出的,所以这种方法解决了分页数据的问题,堪称终极解决方案。
复制代码 代码如下:
/*
* 将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导出的,所以这种方法解决了分页数据的问题,堪称终极解决方案。