0px;WIDTH:
100%;TOP:
0px;HEIGHT:
100%'"
s+="classid=clsid:
00460182-9E5E-11D5-B7C8-B8269041DD57codeBase=DSOFramer.ocx#Version=2,2,0,6'>"
s+=""
document.write(s);
就可以互现如下示的一个控件界面
2打开一个doc文件
-打开本地C盘下的一个33.doc的文件
document.all.DSOFramer1.Open("C:
/33.doc",false,"Word.Document");
-打开远程的word文件
document.all.DSOFramer1.Open("http:
//localhost:
8080/XxShhCtrl-getAttachmentById.pfv?
fjxh=xxfbfj000562",true,"Word.Document","MyUserAccount","MyPassword");
-打开本地的excel文件
document.all.DSOFramer1.Open("C:
/11.xls",false,"Excel.Sheet");
3保存文件到本地
document.all.DSOFramer1.Save("c:
/22.doc");
注意:
这里的文件指的是把控件中展示的doc文件,以22.doc的名称保存到c盘。
4保存文件的服务器
functionfileUpload(){
//document.all.DSOFramer1.style.display="none";
alert('------');
//初始化Http引擎
document.all.DSOFramer1.HttpInit();
//增加Post变量
//document.all.DSOFramer1.HttpAddPostString("RecordID","20060102200");
document.all.DSOFramer1.HttpAddPostString("userid","mrli");
//上传打开的文件
document.all.DSOFramer1.HttpAddPostCurrFile("file1","11.doc");
//执行上传动作
document.all.DSOFramer1.HttpPost("http:
//192.168.0.55:
8082/WordCtrl-test1.pfv");
}
说明:
其中userid相当于表单的name,可以通过这个名字,接收到后面的mrli值。
而11.doc表示被上传的文件名字。
5删除书签
functioncleanMark(){//删除书签
//document.all.DSOFramer1.SetFieldValue("book1","",":
:
ADDMARK:
:
");
document.all.DSOFramer1.SetFieldValue("book1","",":
:
DELMARK:
:
");
}
6循环打印(适用于人名章问题)
functionprintStamp(){
insToTif();//插入传真件
for(i=0;i<2;i++){
cleanMark();//书签内容清除
if(i==0){
document.all.DSOFramer1.SetFieldValue("book1","张三",":
:
ADDMARK:
:
");
}else{
document.all.DSOFramer1.SetFieldValue("book1","李四",":
:
ADDMARK:
:
");
}
document.all.DSOFramer1.printout();
}
}
functioncleanMark(){//删除书签
//document.all.DSOFramer1.SetFieldValue("book1","",":
:
ADDMARK:
:
");
document.all.DSOFramer1.SetFieldValue("book1","",":
:
DELMARK:
:
");
}
7插入传真件
functioninsToTif(){//传真件问题
document.all.DSOFramer1.Open("C:
/44_2.doc",false,"Word.Document");
//document.all.DSOFramer1.SetFieldValue("book1","c:
/cebTest.TIF",":
:
JPG:
:
");//书签中插入图片
//document.all.DSOFramer1.InsertFile("//在当前光标处插入图片
document.all.DSOFramer1.InsertFile("c:
/cebTest.TIF",8);
}
8书签中插入内容
向名称为book1的书签中插入数据
document.all.DSOFramer1.SetFieldValue("book1","test","");//向书签book1中插入文字
functioninsToMark(){
document.all.DSOFramer1.SetFieldValue("book1","test",":
:
ADDMARK:
:
");//新建书签book1,并向其中插入文字
//document.all.DSOFramer1.SetFieldValue("book1","http:
//localhost:
8080/XxShhCtrl-getAttachmentById.pfv?
fjxh=xxfbfj000562",":
:
FILE:
:
");//插入远程图片
//document.all.DSOFramer1.SetFieldValue("book1","c:
/33.doc",":
:
FILE:
:
");//书签中插入本地图片
}
9书签中内容的换行
书签中加入\r即可
vardd="testsss\r\r";
document.all.DSOFramer1.SetFieldValue("book1",dd,"");//书签中插入文字
for(i=0;i<10;i++){
document.all.DSOFramer1.SetFieldValue("book1",dd,":
:
ADDMARK:
:
");
}
如上语句的执行效果如图:
10.获取书签中的内容
functiongetBookMark(){
vardocObj=document.all.DSOFramer1.ActiveDocument;//获取word对象
varvalue_bookmark=docObj.bookmarks("book1").Range;//获取书签“book1”中的内容
alert(value_bookmark);
}
11.隐藏工具栏
//隐藏菜单
functionhidBtn(){
vartt=document.all.DSOFramer1.ActiveDocument;
tt.CommandBars
(1).Visible=false;
tt.CommandBars
(2).Visible=false;
tt.CommandBars(3).Visible=false;
tt.CommandBars(4).Visible=false;
tt.CommandBars(5).Visible=false;
tt.CommandBars(6).Visible=false;
tt.CommandBars(7).Visible=false;
}
如果让某一工具栏的某些按钮隐藏,可以用下面的方法
tt.CommandBars
(1).Controls
(1).Visible=false;//常用工具栏的第一个图标隐藏
tt.CommandBars
(1).Controls(3).Visible=false;//常用工具栏的第二个图标隐藏
tt.CommandBars
(1).Controls
(1).Visible=false;//常用工具栏的第三个图标隐藏
12.隐藏标题栏,菜单栏,工具栏
document.all.DSOFramer1.Toolbars=false;
document.all.DSOFramer1.Menubar=false;
document.all.DSOFramer1.Titlebar=false;
13视图切换
设置文档显示模式HRESULTShowView(longdwViewType,[out,retval]long*pbool);
dwViewType的可取值为:
enumWdViewType
{
wdNormalView=1,
wdOutlineView=2,
wdPrintView=3,
wdPrintPreview=4,
wdMasterView=5,//这个是大纲
wdWebView=6
};
*/
//如大纲模式
document.all.DSOFramer1.ShowView(5);
============================
Java之Word操作-Jacob
2007-07-0311:
01
jacob
Jacob也是基于用java调用dll的一个框架,不过是个开源的,在大名鼎鼎的Sourceforge有一席之地。
下载地址为,可以从上面下载最新的依赖包和dll文件。
我下载的是目前的最新版jacob_1.13-M2,据传,老版本对office2003支持不是很好:
-)。
下载解压后如图:
在AMD64和X86文件加中是对应不同系统的dll,对应windows,就把x86下面的dll拷贝到c:
/Windows/system32下面即可。
--------------------------------------
把doc文件转换为html文件的小例子(参看网友文章而来)
主要代码和注释如下:
ActiveXComponentapp=newActiveXComponent("Word.Application");//启动word
StringdocPath="e:
/temp.doc";//word文件的位置
StringhtmlPath="e:
/ssss.htm";//目标文件的位置,就是把temp.doc转换为ssss.htm文件
app.setProperty("Visible",newVariant(false));//这里的false表示生成过程不显示word的打开过程,而如果是true,则在生成过程中会显示word打开
Objectdocs=app.getProperty("Documents").toDispatch();
Objectdoc=Dispatch.invoke((Dispatch)docs,"Open",Dispatch.Method,newObject[]{docPath,newVariant(false),newVariant(true)},newint[1]).toDispatch();//打开word文件
Dispatch.invoke((Dispatch)doc,"SaveAs",Dispatch.Method,newObject[]{htmlPath,newVariant(8)},newint[1]);//生成html文件
Variantf=newVariant(false);
Dispatch.call((Dispatch)doc,"close",f);
app.invoke("Quit",newVariant[]{});//退出,一般放在finally中
这个我已经测试过了,挺好使的。
呵呵。
--------------------------------------
使用JACO取得书签处的值和向书签处插入变量值
模板文件如图:
下面是我测试的代码。
publicvoidopenWord(){
ActiveXComponentapp=newActiveXComponent("Word.Application");
StringinFile="e:
/temp.doc";//word文件的位置
StringtoFile="e:
/ssss.doc";
Dispatchdocs=app.getProperty("Documents").toDispatch();
Dispatchdoc=Dispatch.invoke(docs,"Open",Dispatch.Method,newObject[]{inFile,newVariant(false),newVariant(true)},newint[1]).toDispatch();//打开word文件
DispatchactiveDocument=app.getProperty("ActiveDocument").toDispatch();
DispatchbookMarks=app.call(activeDocument,"Bookmarks").toDispatch();//Bookmarks是一个关键字
StringbookMarkKey="miji";//书签名称
DispatchrangeItem=Dispatch.call(bookMarks,"Item",bookMarkKey).toDispatch();//Item是关键字
Dispatchrange=Dispatch.call(rangeItem,"Range").toDispatch();//Range是关键字
StringbookMarkValue=Dispatch.get(range,"Text").toString();//获取miji书签处的值
log.debug(">>>>"+bookMarkValue);//输入“miji”书签的值
StringnewMarkValue="新标签值";
StringbookMarkKey_new="fabuchu";//书签名称
DispatchrangeItem_new=Dispatch.call(bookMarks,"Item",bookMarkKey_new).toDispatch();//Item是关键字
Dispatchrange_new=Dispatch.call(rangeItem_new,"Range").toDispatch();//Range是关键字
Dispatch.put(range_new,"Text",newVariant(newMarkValue));
Dispatch.invoke(doc,"SaveAs",Dispatch.Method,newObject[]{toFile,newVariant(0)},newint[1]);
Variantf=newVariant(false);
Dispatch.call(doc,"Close",f);
app.invoke("Quit",newVariant[]{});
}
log.debug(">>>>"+bookMarkValue);输出的内容如图示,通个图可以看到取得的miji名称书签的值。
再看看生成的ssss.doc文件,看看是否把字符串StringnewMarkValue="新标签值";插入到了指定的位置,如图
最让人欣慰搜的是对中文支持很好。
没有中文乱码现象。
jacob文本内容的替换
下面先看看模板文件的截图
下面是详细的代码:
publicvoidopenWord(){
ActiveXComponentapp=newActiveXComponent("Word.Application");
StringinFile="e:
/temp.doc";//模板word文件的位置
StringtoFile="e:
/ssss.doc";//输出的文件
Dispatchdocs=app.getProperty("Documents").toDispatch();
Dispatchdoc=Dispatch.invoke(docs,"Open",Dispatch.Method,newObject[]{inFile,newVariant(false),newVariant(true)},newint[1]).toDispatch();//打开word文件
Dispatchselection=app.getProperty("Selection").toDispatch();//得到一个组件
log.info("Selection"+selection);
Dispatchfind=Dispatch.call(selection,"Find").toDispatch();//查找什么文本
StringoldText="2007";//需要替换的文本内容
StringnewText="2008-欢迎北京奥运";//新的内容
Dispatch.call(find,"ClearFormatting");
Dispatch.put(find,"Text",oldText);
Dispatch.call(find,"Execute");//这一处也是一个很值得注意的地方,如果把这一句去掉或移至Dispatch.put(selection,"Text",newText);的下面,就不会执行替换功能,而是把oldText的内容插入到文档的开头部分。
所以这句话应该是定位oldText位置的作用
Dispatch.put(selection,"Text",newText);
//文件保存
Dispatch.invoke(doc,"SaveAs",Dispatch.Method,newObject[]{toFile,newVariant(0)},newint[1]);
Variantf=newVariant(false);
Dispatch.call(doc,"Close",f);
app.invoke("Quit",newVariant[]{});//一般写在finally结构体中
}
执行后的结果截图:
从截图可以看出文本“2007”被“2008-欢迎北京奥运会”替换掉了。