javascript
js html 导出word 不用activexobject,javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页...
javascript下用ActiveXObject控件替換word書簽,將內容導出到word后打印第2/2頁
更新時間:2008年06月21日 22:57:31 ? 作者:
由于時間比較緊,沒多的時候去學習研究上述工具包,現(xiàn)在用javascript操作ActiveXObject控件,用替換word模板中的書簽方式解決。
export2word.js代碼:
/**
*?
?Title:?用word書簽替換的方式將內容導出到word
*?
?Description:?**
*?
?Copyright:?Copyright?(c)?2007-2010?
*?
?Company:?**?
*?@author?zhu
*?@version?1.0
*/
var?baseVoListObj?=?function(){
this.volist?=?new?Array();
this.cols?=?new?Array();
this.widths?=?new?Array();
}
var?WordApp?=?function(wordTplPath){
var?wordObj?=?new?ActiveXObject("Word.Application");
if(wordObj==null){
alert(?"不能創(chuàng)建Word對象!");
}
wordObj.visible=false;
this.wordObj?=?wordObj;
this.docObj?=?this.wordObj.Documents.Open(getRootPath()?+?wordTplPath);
}
WordApp.prototype.closeApp?=?function(){
if?(this.wordObj?!=null){
this.wordObj.Quit();
}
}
WordApp.prototype.replaceBookmark?=?function(strName,content,type){
if?(this.wordObj.ActiveDocument.BookMarks.Exists(strName))?{
if?(type?!=?null?&&?type?==?"pic")?{//圖片
var?objDoc?=?this.wordObj.ActiveDocument.BookMarks(strName).Range.Select();
var?objSelection?=?this.wordObj.Selection;
objSelection.TypeParagraph();
//alert(getRootPath()+content);
var?objShape?=?objSelection.InlineShapes.AddPicture(getRootPath()+content);
}
else?{
this.wordObj.ActiveDocument.BookMarks(strName).Range.Select();
this.wordObj.Application.selection.Text?=?content;
}
}else{
//alert("標簽不存在");
}
}
WordApp.prototype.replaceBookmarkUsevo?=?function(voObj){
if(typeof?voObj?!=?"object"){
alert("請輸入正確的vo對象");
}else{
for(var?i?in?voObj){
this.replaceBookmark(i,voObj[i]);
}
}
}
WordApp.prototype.replaceBookmarkUsepicvo?=?function(voObj){
if(typeof?voObj?!="object"){
alert("請輸入正確的vo對象");
}else{
for(var?i?in?voObj){
this.replaceBookmark(i,voObj[i],"pic");
}
}
}
WordApp.prototype.replaceBookmarkUsevolist?=?function(strName,voListObj){
if(typeof?voListObj?!=?"object"){
alert("參數應為數組類型");
}else{
var?row?=?voListObj.volist.length;
var?col?=?voListObj.cols.length;
var?objDoc?=?this.wordObj.ActiveDocument.BookMarks(strName).Range;
var?objTable?=?this.docObj.Tables.Add(objDoc,row,col)?;//插入表格
for?(var?i?=?0;?i?
for(var?j=0;?j
//todo?列表里面如果有圖片類型不支持,需要判斷
objTable.Cell(i+1,j+1).Range.InsertAfter(voListObj.volist[i][voListObj.cols[j]]);
var?width?=?voListObj.widths[j];
if(width.indexOf("px")!=-1){
objTable.Cell(i+1,j+1).Width?=?(width.substr(0,width.length-2)/100)?*?28.35;//1厘米=28.35磅
}
}
}
//objTable.AutoFormat(16);
objTable.Borders.InsideLineStyle?=?1
objTable.Borders.OutsideLineStyle?=?0;
}
}
WordApp.prototype.getSingleVo?=?function(formName,arrayObj){//第二個參數可以為空,不填時默認為表單里的所有元素
var?formObj?=?document.forms[formName];
if(formObj!=null){
if(arrayObj!=null){
if(arrayObj?instanceof?Array){
var?vo?=?{};
for(var?i=0;i
if(formObj.elements[arrayObj[i]]!=?undefined?){
eval("vo."?+?arrayObj[i]?+?"?=?formObj.elements[arrayObj[i]].value;");
}
}
//alert(objToString(vo));
return?vo;
}else{
alert("弟二個參數應為數組類型");
}
}else{
var?vo?=?{};
for(var?i=0;i
eval("vo."?+?formObj.elements[i].name?+?"?=?formObj.elements[i].value;");
}
return?vo;
}
}else{
alert("第一個參數表示的表單不存在");
return?null;
}
}
WordApp.prototype.getVoList?=?function?(formName,arrayObj){//表單名,屬性數組(可以為空)
//var?formArray?=?document.forms[formName];
var?formArray?=?document.getElementsByName(formName);
if?(formArray?!=?null)?{
if?(arrayObj?instanceof?Array)?{
var?voListObj?=?new?baseVoListObj();
for(var?i=0;i
var?vo?=?{};
for(var?j=0;j
if(formArray[i].elements[arrayObj[j]]!=?undefined?){
eval("vo."+arrayObj[j]+"?=?formArray[i].elements[arrayObj[j]].value;");
if(i==0){//第一次的時候定義有效屬性和寬度
voListObj.cols.push(arrayObj[j]);
voListObj.widths.push(formArray[i].elements[arrayObj[j]].style.width);
}
}
}
voListObj.volist.push(vo);
}
return?voListObj;
}else{
var?voListObj?=?new?baseVoListObj();
for(var?i=0;i
var?vo?=?{};
for(var?j=0;j
eval("vo."+formArray[i].elements[j].name+"?=?formArray[i].elements[j].value;");
if(i==0){//第一次的時候定義寬度
voListObj.cols.push(formArray[i].elements[j].name);
voListObj.widths.push(formArray[i].elements[j].style.width);
}
}
voListObj.volist.push(vo);
}
return?voListObj;
}
}else{
return?null;
}
}
function?objToString(obj){
if(obj?instanceof?Array){
var?str="";
for(var?i=0;i
str+="[";
for(var?j?in?obj[i]){
str+=j+"="+obj[i][j]+"?";
}
str+="]\n";
}
return?str;
}else?if(obj?instanceof?Object){
var?str="";
for(var?i?in?obj){
str+=i+"="+obj[i]+"?";
}
return?str;
}
}
function?getRootPath()
{
var?location=document.location;
if?("file:"?==?location.protocol)?{
var?str?=?location.toString();
return?str.replace(str.split("/").reverse()[0],?"");
}
var?pathName=location.pathname.split("/");
return?location.protocol+"//"+location.host+"/"+pathName[1]+"/";
}
先說到這里吧,以后有更好的再更新,希望對大家有用。
相關文章
本文通過實例給大家介紹了JavaScript中push(),join() 的知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
JavaScript缺少塊級作用域,沒有private修飾符,但它具有函數作用域。作用域的好處是內部函數可以訪問它們的外部函數的參數和變量(除了this和argument2011-12-12
這篇文章主要介紹了js使用Array.prototype.sort()對數組對象排序的方法,實例分析了Array.prototype.sort()的原理與相關的使用技巧,需要的朋友可以參考下2015-01-01
這篇文章主要介紹了javascript基于原型鏈的繼承及call和apply函數用法,結合實例形式較為詳細的分析了javascript中繼承的概念、創(chuàng)建方法以及call和apply函數的功能與使用技巧,需要的朋友可以參考下2016-12-12
這篇文章主要為大家詳細介紹了Bootstrap實現(xiàn)模態(tài)框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09
10個實用的腳本工具,其實就是將代碼拷貝到IE地址欄中運行2010-05-05
多年以來,IE一直都是最難于調試JavaScript 錯誤的瀏覽器。IE給出的錯誤消息一般很短又語焉不詳。而且上下文信息也很少,有時甚至一點都沒有。下面幾小節(jié)將分別探討一些在IE中難于調試的JavaScript 錯誤2016-11-11
項目中經常需要導出Excel文件,不在服務器端處理而是富客戶端采用Javascript腳本處理數據并導出文件2014-05-05
這篇文章主要介紹了webpack 從指定入口文件中提取公共文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
這篇文章主要介紹了JS+html5實現(xiàn)異步上傳圖片顯示上傳文件進度條功能,結合完整實例形式分析了JavaScript前端結合HTML5實現(xiàn)post文件上傳與進度條顯示相關操作技巧,需要的朋友可以參考下2019-11-11
最新評論
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的js html 导出word 不用activexobject,javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果5s现在多少钱了啊?
- 下一篇: 兰州治疗男性精子活力低最好的医院推荐