[讨论]javascript导出excel

浪漫幕末 2008-08-28 10:23:40
下面是在网上找的一段js导excel代码,我做了一些改动。
function htmlToExcel(elTableOut,elDiv){
try{
//设置导出前的数据,为导出后返回格式而设置
var elDivStrBak = elDiv.innerHTML;
//设置table的border=1,这样到excel中就有表格线
elTableOut.border=1;
//过滤elDiv内容
var elDivStr = elDiv.innerHTML;
elDivStr = replaceHtml(elDivStr,"<A",">");
elDivStr = replaceHtml(elDivStr,"</A",">");
elDiv.innerHTML=elDivStr;
var oRangeRef = document.body.createTextRange();
oRangeRef.moveToElementText( elDiv );
oRangeRef.execCommand("Copy"); //复制内容到剪切板

//返回格式变换以前的内容
elDiv.innerHTML = elDivStrBak;
//内容数据可能很大,所以赋空
elDivStrBak = "";
elDivStr = "";
try {
var oXL = new ActiveXObject("Excel.Application")
}
catch(e) {
alert( "需要安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。");
return "";
}
var oWB = oXL.Workbooks.Add ;
var oSheet = oWB.ActiveSheet ;
oSheet.Paste();
// oSheet.Cells.NumberFormatLocal = "@";#,##0.00
oSheet.Columns("A:A").ColumnWidth=35;
oSheet.Columns("B:B").ColumnWidth=10;
oSheet.Columns("C:C").ColumnWidth=35;
oSheet.Columns("D:D").ColumnWidth=10;
oSheet.Columns(1).NumberFormatLocal="@";
oSheet.Columns(3).NumberFormatLocal="@";
oSheet.Columns(2).NumberFormatLocal="0.00";//设置格式
oSheet.Columns(4).NumberFormatLocal="0.00";
// oXL.Visible = true;
// oXL.UserControl = true;
var fileName;
// do{
fileName = oXL.Application.GetSaveAsFilename("save.xls", "Excel Spreadsheets (*.xls), *.xls");
// }while(fileName==null||fileName=="")
oWB.SaveAs(fileName);

oXL.DisplayAlerts = "False";
oXL.Quit();
oXL = null;
oSheet = null;
oWB = null;
idTmr = window.setInterval("Cleanup();",1000); //回收内存
}catch(e){
oXL = null;
oSheet = null;
oWB = null;
alert(e.description)
oXL.DisplayAlerts = "False";
oXL.Quit();
CollectGarbage();
}
}
function Cleanup() {
window.clearInterval(idTmr);
CollectGarbage();
}
function replaceHtml(replacedStr,repStr,endStr){
var replacedStrF = "";
var replacedStrB = "";
var repStrIndex = replacedStr.indexOf(repStr);
while(repStrIndex != -1){
replacedStrF = replacedStr.substring(0,repStrIndex);
replacedStrB = replacedStr.substring(repStrIndex,replacedStr.length);
replacedStrB = replacedStrB.substring(replacedStrB.indexOf(endStr)+1,replacedStrB.length);
replacedStr = replacedStrF + replacedStrB;
repStrIndex = replacedStr.indexOf(repStr);
}
return replacedStr;
}
在js里用oXL.Application.GetSaveAsFilename("save.xls", "Excel Spreadsheets (*.xls), *.xls");
确实可以调出excel的保存文件对话框,但是这个对话框不是活动的,必须是“显示桌面”,再打开改IE页面,才能看到这个保存对话框。不知道有没有办法让它直接得到焦点。excel进程可以退出,CollectGarbage()回收js内存。
可以直接用SaveAs()方法用固定文件名固定路径保存。只是用户体验不好。欢迎大家讨论。
...全文
380 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪漫幕末 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xocom 的回复:]
可以曲线救国
比如后台写个函数专门导出EXCEL。[重点转移到asp.net操作EXCEL]


然后前台 javascript可以调用某个按钮onclick事件调用后台的函数
[/Quote]
兄弟这个建议很好。用ajax来实现excel导出,不知道可不可行。
flyingfz 2008-08-29
  • 打赏
  • 举报
回复
mark
紫气东来_999 2008-08-29
  • 打赏
  • 举报
回复
可以曲线救国
比如后台写个函数专门导出EXCEL。[重点转移到asp.net操作EXCEL]


然后前台 javascript可以调用某个按钮onclick事件调用后台的函数
浪漫幕末 2008-08-29
  • 打赏
  • 举报
回复
js区貌似没人,移到这里来

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧