提高jacob读写word 速度
jacob处理word简直就是完美,word的什么功能都可以使用。
比纯java实现的包好多了,而且兼容性也很好。
唯一不足的就是比较慢,而且,服务器要安装office。
至于服务器安装office就没什么。
还是说到速度上来。
慢应该是在打开word时加载太多的dll文件导致的,处理完成后又关闭。
就这两项时间可以占据20%-30%以上,xp系统更慢,win7会快点。
因此只要想办法不马上关闭word应该就可以提高一点速度。
就像使用了数据库连接池一样。
使用jacob控制word,将java数据填充到word指定位置,
Jacob解决Word文档的读写问题收藏Jacob是Java-COMBridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。
使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。
Jacob下载的地址为:.Variant;publicclassWordOperate{publicstaticvoidmain(Stringargs[]){ActiveXComponentwordApp=newActiveXComponent("Word.Application");//启动word//Setthevisiblepropertyasrequired.Dispatch.put(wordApp,"Visible",newVariant(true));////设置word可见Dispatchdocs=wordApp.getProperty("Documents").toDispatch();//StringinFile="d:\\test.doc";//Dispatchdoc=Dispatch.invoke(docs,"Open",Dispatch.Method,//newObject[]{inFile,newVariant(false),newVariant(false)},//参数3,false:可写,true:只读//newint[1]).toDispatch();//打开文档Dispatchdocument=Dispatch.call(docs,"Add").toDispatch();//createnewdocumentStringuserName=wordApp.getPropertyAsString("Username");//显示用户信息System.out.println("用户名:"+userName);//文档对齐,字体设置////////////////////////Dispatchselection=Dispatch.get(wordApp,"Selection").toDispatch();Dispatchalign=Dispatch.get(selection,"ParagraphFormat").toDispatch();//行列格式化需要的对象Dispatchfont=Dispatch.get(selection,"Font").toDispatch();//字型格式化需要的对象//标题处理////////////////////////Dispatch.put(align,"Alignment","1");//1:置中2:靠右3:靠左Dispatch.put(font,"Bold","1");//字型租体Dispatch.put(font,"Color","1,0,0,0");//字型颜色红色Dispatch.call(selection,"TypeText","Word文档处理");//写入标题内容Dispatch.call(selection,"TypeParagraph");//空一行段落Dispatch.put(align,"Alignment","3");//1:置中2:靠右3:靠左Dispatch.put(selection,"Text","");Dispatch.call(selection,"MoveDown");//光标标往下一行//表格处理////////////////////////Dispatchtables=Dispatch.get(document,"Tables").toDispatch();Dispatchrange=Dispatch.get(selection,"Range").toDispatch();Dispatchtable1=Dispatch.call(tables,"Add",range,newVariant(3),newVariant(2),newVariant(1)).toDispatch();//设置行数,列数,表格外框宽度//所有表格VarianttableAmount=Dispatch.get(tables,"count");System.out.println(tableAmount);//要填充的表格Dispatcht1=Dispatch.call(tables,"Item",newVariant(1)).toDispatch();Dispatcht1_row=Dispatch.get(t1,"rows").toDispatch();//所有行intt1_rowNum=Dispatch.get(t1_row,"count").getInt();Dispatch.call(Dispatch.get(t1,"columns").toDispatch(),"AutoFit");//自动调整intt1_colNum=Dispatch.get(Dispatch.get(t1,"columns").toDispatch(),"count").getInt();System.out.println(t1_rowNum+""+t1_colNum);for(inti=1;i
java怎么实现在线打开word时给word加水印?
package com.ymo.word; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class TestJacobWord { private ActiveXComponent wrdCom = null; private Dispatch doc = null; private Dispatch activeDoc = null; private Dispatch docSelect = null; private Dispatch docs = null; private static TestJacobWord instance = null; private String docName = ""; public static TestJacobWord getInstance() { if (instance == null) { instance = new TestJacobWord(); } return instance; } private boolean initWord() { boolean flag = false; ComThread.InitSTA(); wrdCom = new ActiveXComponent("word.Application"); try { docs = wrdCom.getProperty("Documents").toDispatch(); wrdCom.setProperty("Visible", new Variant(false)); flag = true; } catch (Exception e) { flag = false; e.printStackTrace(); } return flag; } private void createNewDocument() { doc = Dispatch.call(docs, "Add").toDispatch(); docSelect = Dispatch.get(wrdCom, "Selection").toDispatch(); } private void getActiveDoc() { activeDoc = wrdCom.getProperty("ActiveWindow").toDispatch(); System.out.println(activeDoc.getProgramId()); } private void openDocument(String docPath) { if (this.doc != null) { closeDocument(); } this.doc = Dispatch.call(docs, "Open", docPath, new Variant(false),new Variant(false)).toDispatch(); docSelect = Dispatch.get(wrdCom, "Selection").toDispatch(); } private void closeDocument() { if (doc != null) { Dispatch.call(doc, "Save"); Dispatch.call(doc, "Close", new Variant(true)); doc = null; } } private void setImgWaterMark(String waterMarkPath) { Dispatch activePan = Dispatch.get(activeDoc, "ActivePane").toDispatch(); Dispatch view = Dispatch.get(activePan, "View").toDispatch(); Dispatch.put(view, "SeekView", new Variant(9)); Dispatch headfooter = Dispatch.get(docSelect, "HeaderFooter").toDispatch();// 取得图形对象 Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch(); Dispatch pic = Dispatch.call(shapes, "AddPicture", waterMarkPath).toDispatch(); Dispatch.call(pic, "Select"); Dispatch.put(pic, "Left", new Variant(10)); Dispatch.put(pic, "Top", new Variant(200)); Dispatch.put(pic, "Width", new Variant(150)); Dispatch.put(pic, "Height", new Variant(80)); Dispatch.put(view, "SeekView", new Variant(0)); } public void setTextWaterMark(String waterMarkStr) { Dispatch activePan = Dispatch.get(activeDoc, "ActivePane").toDispatch(); Dispatch view = Dispatch.get(activePan, "View").toDispatch(); Dispatch.put(view, "SeekView", new Variant(9)); Dispatch headfooter = Dispatch.get(docSelect, "HeaderFooter").toDispatch(); Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch(); Dispatch selection = Dispatch.call(shapes, "AddTextEffect",new Variant(9), waterMarkStr, "宋体", new Variant(1),new Variant(false), new Variant(false), new Variant(0),new Variant(0)).toDispatch(); Dispatch.call(selection, "Select"); Dispatch shapeRange = Dispatch.get(docSelect, "ShapeRange").toDispatch(); Dispatch.put(shapeRange, "Name", "PowerPlusWaterMarkObject1"); Dispatch textEffect = Dispatch.get(shapeRange, "TextEffect").toDispatch(); Dispatch.put(textEffect, "NormalizedHeight", new Boolean(false)); Dispatch line = Dispatch.get(shapeRange, "Line").toDispatch(); Dispatch.put(line, "Visible", new Boolean(false)); Dispatch fill = Dispatch.get(shapeRange, "Fill").toDispatch(); Dispatch.put(fill, "Visible", new Boolean(true));// 设置水印透明度 Dispatch.put(fill, "Transparency", new Variant(0.5)); Dispatch foreColor = Dispatch.get(fill, "ForeColor").toDispatch(); Dispatch.put(foreColor, "RGB", new Variant(16711620)); Dispatch.call(fill, "Solid");// 设置水印旋转 Dispatch.put(shapeRange, "Rotation", new Variant(315)); Dispatch.put(shapeRange, "LockAspectRatio", new Boolean(true)); Dispatch.put(shapeRange, "Height", new Variant(117.0709)); Dispatch.put(shapeRange, "Width", new Variant(468.2835)); Dispatch.put(shapeRange, "Left", new Variant(-999995)); Dispatch.put(shapeRange, "Top", new Variant(-999995)); Dispatch wrapFormat = Dispatch.get(shapeRange, "WrapFormat").toDispatch();// 是否允许交叠 Dispatch.put(wrapFormat, "AllowOverlap", new Variant(true)); Dispatch.put(wrapFormat, "Side", new Variant(3)); Dispatch.put(wrapFormat, "Type", new Variant(3)); Dispatch.put(shapeRange, "RelativeHorizontalPositi on", new Variant(0)); Dispatch.put(shapeRange, "RelativeVerticalPosition", new Variant(0)); Dispatch.put...
ASP怎么实现在线浏览word文档
目前想到的方案:1、如果能够保证客户端都安装了Word,那么可以修改一个注册表选项,使得在IE中点击指向Word文档的链接时,不是提示下载,而是直接在IE里面用嵌入Word的方式打开(就是所谓的Active Document方式);2、如果希望让任何客户端即使没有装Word只要有IE就可以查看Word文档的话,可以考虑购买一些第三方的转换器或者ActiveX插件,可以将Word文档转换成图片/网页等。
导出word报错 Can't map name to dispid: Close
我在做Jacob的时候遇到过这个问题,word宏操作的问题。
出现这种错误应该是你操作的word文档宏被禁用或者宏错误。
不允许Jacob对此文档进行操作。
你只要用一个新的文档就可以了,另存为好像不行,必须新建文档将源文档内容拷贝过去。
你试试吧,我就是这么解决的。
JACOB的callsub如何调用excel的宏
兄弟,word操作是难题,JACOB是目前比较成熟的解决方案了,采用桥连的方式间接的操作word,效率不行啊。
如果要操作excel,为什么不用POI呢,这可是非常成熟的,word是没办法才用jacob的,这玩意效率太低,虽然简单。
宏到还真没用过,macroName这个是宏的名字吧,String subname = "RenameSheet";Dispatch.call(workbook, subname);这里你填个页签名干吗?
jacob excel转PDF报未发现可以打印内容的错误
启动word的例子: import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Variant; import com.jacob.com.Dispatch; app = new ActiveXComponent( "Word.Application ");//启动word docs = app.getProperty( "Documents ").toDispatch();
转载请注明出处51数据库 » jacob word