Js 复制页面内容到Word中或使用模板导出(有替换标签的功能)

时间:2024-03-10 18:49:10
/**
* 说明
* 导出Word文档

*/
function Export2Word( ) {
}

Export2Word.prototype
= {

/**
* 说明
* 从模板导出
* 参数
* strTemplatePath 导出路径
* fnInitData 初始化回调函数
* 示例
* ExportFromTemplate("
http://localhost/js/tools/template.doc",function(e){
* e.SetBookMark("ProjName","企业名称");
* });
*/
ExportFromTemplate: function (strTemplatePath, fnInitData) {
this.__Export(function (e) {
e.__Document
= e.__Appliction.Documents.Open(strTemplatePath);
if (fnInitData) {
fnInitData(e);
}
});
},
/**
* 说明
* 从剪贴板中复制到Word
* 参数:sElementID 要复制内容的表单元素
* 示例
* ExportFromClipboard("table1");
*/
ExportFromClipboard: function (sElementID) {
this.__Export(function (e) {
//增加工作簿
e.__Document = e.__Appliction.Documents.Add("", 0, 1);
//创建Word区域用于接受粘贴的数据
var __Range = e.__Document.Range();
//创建文本区域
var TextRange = document.body.createTextRange();
//获取包含数据的元素
var oEelement = document.getElementById(sElementID);
//把table中的数据移到textRange中
TextRange.moveToElementText(oEelement);
//选中textRange中所有数据
TextRange.select();
//复制数据到剪贴板
TextRange.execCommand("Copy");
//粘贴到Word中
__Range.Paste();
});

},
__Export: function (fnAction) {
try {
//创建Excel 处理对象
this.__Appliction = new ActiveXObject("Word.Application");
}
catch (e) {
var sErrorMessage
= "使用导出功能\n1、您必须安装Mircosoft office Word文档软件.\n2、设置浏览器(IE)选项[安全]将此网站加入可信站点\n" +
"3、并启动该自定义级别中的\'对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本选项,最后刷新页面"
alert(sErrorMessage);
return;
}
//移动焦点,以便清除之前选中的文本区
ClearFocus();
try {
if (fnAction) {
fnAction(
this);
}
this.__Appliction.Visible = true;

}
catch (e) {
this.__Document.Close(savechanges = false);
this.__Appliction.Quit();
this.__Appliction = null;
alert(e.message);

}
finally {
//内存清理
idTmr = window.setInterval(function () {
window.clearInterval(idTmr);
CollectGarbage();
},
1);
}
function ClearFocus() {
var el
= document.getElementById("txtClearFocus");
if (el == null) {
el
= document.createElement("<input id=\'txtClearFocus\' type=\'text\' style=\'width:0;height:0\'>");
document.body.appendChild(el);
}
el.focus();
}
}
,
/**
* 说明
* 设置书签值(并指定是否替换模式)
* 参数
* strBookMarkName 书签名称
* strValue 书签内容
* bIsReplace 是否替换书签(替换后就不能再次赋值了)
* 示例
* SetBookMark("书签名称","书签内容",)
*/
SetBookMark: function (strBookMarkName, strValue, bIsReplace) {
try {
var oBookMark
= this.__Document.BookMarks(strBookMarkName);
if (!oBookMark) {
alert(
"Word 模板中不存在名称为:\"" + strBookMarkName + "\"的书签!");
}
var oRange
= oBookMark.Range;
oRange.Text
= strValue;
if (!bIsReplace) {
this.__Document.Bookmarks.Add(strBookMarkName, oRange);
}
}
catch (e) {
alert(e.Message);
}
}
}