用jacob操作word文档,出现如下问题:
1.在写入word文档的时候,总是提示出现副本,必须要修改名字,写入副本才可以
2.我在关闭的时候,报错信息如下:
com.jacob.com.ComFailException: Can't map name to dispid: CloseDocument doc = null; 
    try { 
     addList();
      doc = new Document();
      doc.open(newPath);//打开文件 
      doc.insertAtBook("userName",ujl.getjlName()); 
      doc.insertAtBook("describe",ujl.getdescirbe()); 
      doc.insertAtBook("eMail",ujl.getjlMail()); 
      doc.insertAtBook("english",(String)mapEnglish.get(ujl.getenglish())); 
      doc.insertAtBook("jianliStatus",(String)mapJlStatue.get(ujl.getjlStatue())); 
      doc.insertAtBook("juZhuDi",(String)mapAddress.get(ujl.getresidonce())); 
      doc.insertAtBook("renYuanStatus",(String)mapJlType.get(ujl.getjlType())); 
      doc.insertAtBook("sex",(String)mapSex.get(ujl.getsex())); 
      doc.insertAtBook("telPhone",ujl.getjlPhone()); 
      doc.insertAtBook("workTime",(String)mapworkTime.get(ujl.getworkTime())); 
      doc.insertAtBook("xueLi",(String)mapXueLi.get(ujl.getxueLi())); 
      doc.insertAtBook("zhiWei",(String)mapCateType.get(ujl.getcateType())); 
      //判断行业经验
      String level = "";
      if(ujl.getjlLevel() != null && ujl.getjlLevel().length() > 0){
       String levels[] = ujl.getjlLevel().split(";");
       for (int i = 0; i < levels.length; i++) {
       level = (String)mapJlLevel.get(levels[i])+"\n";
}
      }
      doc.insertAtBook("HangyeJingyan",level); 
      //判断技术特长,对应关键字
      String keyWord = "";
      if(ujl.getkeyword() != null && ujl.getkeyword().length() > 0){
       String keyWords[] = ujl.getkeyword().split(" ");
       for (int i = 0; i < keyWords.length; i++) {
       keyWord = (String)mapJlLevel.get(keyWords[i])+"\n";
}
      }
      doc.insertAtBook("KeyWord",keyWord);
      //判断擅长语言,对应擅长技术
      String jishu = "";
      if(ujl.gettechnology() != null && ujl.gettechnology().length() > 0){
     String jishus[] = ujl.gettechnology().split(";");
     for (int i = 0; i < jishus.length; i++) {
      jishu = (String)mapTechnology.get(jishus[i])+"\n";
 }
  }
      doc.insertAtBook("shanChangJishu",jishu); 
    } 
    catch (Exception e) { 
     //log.debug("复制模板的时候出错!");
        //throw new ServiceException("在生成标准模板简历的时候发生错误!"); 
     e.printStackTrace();
    } finally { 
      try { 
        if(doc!=null){
           Thread.interrupted();
           doc.close(true); 
        } 
      } catch (Exception e) { 
     //  log.debug("复制模板的时候出错!");
          //throw new ServiceException("在生成标准模板简历的时候发生错误!"); 
     e.printStackTrace();
      }      } 

解决方案 »

  1.   

    http://www.blogjava.net/lusm/archive/2007/03/27/106737.html
    这方面做的少,不过楼主可以去网上看看,在细心的调试一下,应该能解决的。
    http://www.google.com.hk/search?hl=zh-CN&lr=lang_zh-CN&newwindow=1&safe=strict&tbs=lr%3Alang_1zh-CN&q=com.jacob.com.ComFailException%3A+Can%27t+map+name+to+dispid%3A+Close&aq=f&aqi=&aql=&oq=&gs_rfai=
      

  2.   

    楼主 你能给我发份你的代码吗?还有对于架包和dll
     我看你里面的代码 和我想实现的功能有些相识啊
      我所要实现的功能:根据客户提供的合同模板打印!我只需要把合同里面可能变化的信息替换成特殊字符 
    经查询数据库 再替代里面的信息 这样就得到我想要的真实合同了 再打印 就OK啦!!
      但是 我不会 java如何操作word  并且是比较复杂的操作word
       由于一个合同可能会携带多个产品明细【多少又不确定】,所以模板里面肯定只有一条产品明细了 查询数据库有N条明细 我就再动态操作word生成N条 
       恳请 希望楼主 能够给我发份完整  代码 
        非常感谢!!!!!!!本人菜鸟  还望不吝赐教,,,,,,,
                  谢谢
      [email protected]
      

  3.   

    最后怎么解决的~??
    我的提示:[INFO ] [09:38:16]  - 执行服务前置链接:leap.outputDocPersoninfo[loginValidate]
    com.jacob.com.ComFailException: Can't map name to dispid: Selection代码:    
        Dispatch.put((Dispatch) wordObject, "Visible", new Variant(true));// new Variant(true)表示word应用程序可见     
        Dispatch documents = objWord.getProperty("Documents").toDispatch(); //documents表示word的所有文档窗口,(word是多文档应用程序)
        Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档
        
    //     Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容
        
    //     Dispatch tables = Dispatch.get(document, "Tables").toDispatch();//创建表格
    //             Dispatch range = Dispatch.get(document, "Range").toDispatch();
                int numRows = 6;
    // Dispatch newTable = Dispatch.call(tables, "Add", range,
    //                     new Variant(numRows), new Variant(6)).toDispatch();//设置表格行和列
    //             Dispatch.call(document, "MoveRight");
    //             
        Dispatch selection = Dispatch.get(document, "Selection").toDispatch(); // 输入内容需要的对象
            Dispatch.call(selection, "TypeText", "人事信息管理系统人员列表"); // 写入标题内容 // 标题格行
            Dispatch.call(selection, "TypeParagraph"); // 空一行段落
            Dispatch.call(selection, "TypeParagraph"); // 空一行段落
            Dispatch.call(selection, "MoveDown"); // 游标往下一行         // 建立表格
            Dispatch tables = Dispatch.get(document, "Tables").toDispatch();         Dispatch range = Dispatch.get(selection, "Range").toDispatch();// /当前光标位置或者选中的区域         Dispatch newTable = Dispatch.call(tables, "Add", range,
                    new Variant(numRows), new Variant(6), new Variant(1))
                    .toDispatch(); // 设置row,column,表格外框宽度
            Dispatch cols = Dispatch.get(newTable, "Columns").toDispatch(); // 此表的所有列,
            int colCount = numRows;// 一共有多少列 实际上这个数==column
    //         System.out.println(colCount + "列");
      

  4.   

    我在向word的表格里插入数据时也会有这个问题,不知怎么解决,郁闷中