现在的位置: 首页 > 综合 > 正文

用jawin动态生成word

2014年09月05日 ⁄ 综合 ⁄ 共 3732字 ⁄ 字号 评论关闭

最近一个项目要用JAVA动态生成WORD,采用了几种方案,如POI等,最终选择了jawin,这是一个在java环境下操作dll或lib的工具,其实就是把VBA写的脚本改在JAVA下能运行的.经过几天的试验,终于可以生成图片,生成表格,文字对齐,设置字体和颜色了,实际的项目中又对它进行了封装,我这里只把简化的版本发布出来,希望对大家有些帮助.

package ww.examples.jawin;

import java.util.Calendar;

import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;

public class testwordnew {
public static void main(String[] args) {

  
   try {
    Ole32.CoInitialize();
//    初始化
    DispatchPtr app = new DispatchPtr("Word.Application");
//    创建word对象
    app.put("Visible", true);
//    使word 可见
    DispatchPtr docs = (DispatchPtr)app.get("Documents");
//    取得document对象集合(Documents)
    DispatchPtr doc = (DispatchPtr) docs.invoke("Add");
//    新增一个文档
    app.invoke("Activate");
//    激活当前文档
    DispatchPtr docSelection = (DispatchPtr)app.get("Selection");
   
   
    DispatchPtr objTextFont = (DispatchPtr)docSelection.get("Font");
//    取得Font对象
    objTextFont.put("Name","黑体");
//    设置字体
    objTextFont.put("Size","15");
    objTextFont.put("Bold", "1");
//    设置字号
    DispatchPtr paragraphFormat = (DispatchPtr)docSelection.get("ParagraphFormat");
//    取得Selection对象
    paragraphFormat.put("Alignment", "0");
    docSelection.invoke("TypeText","Jawwin test text!Jawin测试文本。111111111111111111111111");
    docSelection.invoke("TypeParagraph");
    paragraphFormat = (DispatchPtr)docSelection.get("ParagraphFormat");
    paragraphFormat.put("Alignment", "1");
    docSelection.invoke("TypeText","AAAAAAAAAAAAA");
    docSelection.invoke("TypeParagraph");
   
   
    DispatchPtr objTextFont1 = (DispatchPtr)docSelection.get("Font");
//    取得Font对象
    objTextFont1.put("Name","黑体");
//    设置字体
    objTextFont1.put("Size","30");
   
    objTextFont1.put("Color", "3904870");
    objTextFont1.put("Bold", "0");
    //docSelection.invoke("Style","Heading 3");
    paragraphFormat = (DispatchPtr)docSelection.get("ParagraphFormat");
    paragraphFormat.put("Alignment", "2");
    docSelection.invoke("TypeText","/nBBBBBBBBBBBBBBBB");
    docSelection.invoke("TypeText","llllllllllllllll");
    docSelection.invoke("TypeParagraph");

    DispatchPtr inlineShapes = (DispatchPtr)docSelection.get("InlineShapes");
   
    inlineShapes.invokeN("AddPicture",new Object[]{"C://Program Files//Microsoft Office//media//cagcat10//j0088542.wmf",false,true});
   
    docSelection.invoke("TypeParagraph");
   
   
    DispatchPtr stylehead = (DispatchPtr)doc.get("Styles");
    DispatchPtr stylehead1 = (DispatchPtr)stylehead.invokeN("Item",new Object[]{"Heading 1"});
    docSelection.put("Style", stylehead1);
    docSelection.invoke("TypeText","/ntest heading 1/n");
    docSelection.invoke("TypeParagraph");
   
   
    DispatchPtr styleNormal = (DispatchPtr)stylehead.invokeN("Item",new Object[]{"Heading 1"});
    docSelection.put("Style", styleNormal);
    DispatchPtr range = (DispatchPtr)docSelection.get("Range");
   
    DispatchPtr tables = (DispatchPtr) doc.get("Tables");
    tables.invokeN("Add",new Object[]{range,5,5});
   
    docSelection.invoke("TypeParagraph");
    DispatchPtr table1 = (DispatchPtr) tables.invokeN("Item",new Object[]{"1"});
   
    DispatchPtr colume = (DispatchPtr) table1.get("Columns");
   
    DispatchPtr colume1 = (DispatchPtr) colume.invokeN("Item",new Object[]{"1"});
   
    colume1.put("Width", 200);
   
   
   
    DispatchPtr rows = (DispatchPtr) table1.get("Rows");
   
    DispatchPtr row1 = (DispatchPtr) rows.invokeN("Item",new Object[]{"1"});
   
    row1.put("Height", 200);
   
    DispatchPtr cell = (DispatchPtr) table1.invokeN("Cell",new Object[]{"1","1"});
   
    DispatchPtr cellrange = (DispatchPtr) cell.get("Range");
    cellrange.put("Text", "cell value");
   
    doc.invoke("SaveAs","c://jawintest"+Calendar.getInstance().getTime().getMinutes()+""+Calendar.getInstance().getTime().getSeconds()+".doc");
//    保存文档(保存在C盘根目录下)
//    doc.invoke("Close");
//    关闭当前文档,去掉前面的注释符并重新编译后可生效
//    app.invoke("Quit");
//    退出Word,去掉前面的注释符并重新编译后可生效
    Ole32.CoUninitialize(); //释放对象
    } catch (Exception e) {
    e.printStackTrace();
    }
    

  
  
  
}
}

抱歉!评论已关闭.