用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.在写入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();
} }
这方面做的少,不过楼主可以去网上看看,在细心的调试一下,应该能解决的。
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=
我看你里面的代码 和我想实现的功能有些相识啊
我所要实现的功能:根据客户提供的合同模板打印!我只需要把合同里面可能变化的信息替换成特殊字符
经查询数据库 再替代里面的信息 这样就得到我想要的真实合同了 再打印 就OK啦!!
但是 我不会 java如何操作word 并且是比较复杂的操作word
由于一个合同可能会携带多个产品明细【多少又不确定】,所以模板里面肯定只有一条产品明细了 查询数据库有N条明细 我就再动态操作word生成N条
恳请 希望楼主 能够给我发份完整 代码
非常感谢!!!!!!!本人菜鸟 还望不吝赐教,,,,,,,
谢谢
[email protected]
我的提示:[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 + "列");