Java 操作Word Excel Outlook.
来源:互联网 发布:网络诈骗案多久能破案 编辑:程序博客网 时间:2024/04/30 06:35
配置您的开发和运行环境
我们的例子是一个基于 Eclipse 的 Java 工程。首先,使用 JACOB 来“搭桥”,您需要下载最新的 JACOB 相关类库,包括 Jacob.jar 和 Jacob.dll,将 jar 文件添加到您的 Eclipse 工程的构建路径。
图 1. 配置
解壓jacob-1.15.zip
里面有四個文件jacob.jar、jacob-1.15-x64.dll、jacob-1.15-x86.dll、JacobVersion.properties
當JDK 為32位時,應使用 acob-1.15-x86.dll。如果是64位時acob-1.15-x64.dll
jacob-1.15-x64.dll
應部署在系統環境變量path中,能夠找到目錄下。其部署位置:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Windows\System32\其中%JAVA_HOME%就是JDK 的安裝目錄
图 2. 修改工程的构建路径
由于我们要通过 JNI 调用 DLL 文件,所以您需要把 DLL 文件添加到系统的 PATH 环境变量中,或者您也可以在程序中设置运行时的 PATH 变量。
图 3. 将 DLL 文件添加到 PATH 变量中
下面这段代码是測試
package org.compiere.model;// 注意导入的包的路径import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;public class TestMail {public static void main(String[] args) throws Exception {/* * String body = "<div style='color:red;'>This is a Test !</div>"; * Runtime.getRuntime().exec( * "D:\\Program Files\\Microsoft Office\\Office14\\OUTLOOK.EXE mailto:KO@techson.com.hk?subject=Chinese New Year backup arrangement" * + "&cc=Ko@techson.com.hk&body="+body); */System.out.println(System.getProperty("java.library.path"));// System.out.println(System.getProperty("java.library.path"));ActiveXComponent axOutlook = new ActiveXComponent("Outlook.Application");// Dispatch ds = axOutlook.getObject();/* * Dispatch namespace = Dispatch.call(axOutlook, "GetNamespace", * "MAPI").toDispatch() ; String path = new * File("F:/test.htm").getAbsolutePath(); Dispatch mailItem = * Dispatch.call(namespace, "OpenSharedItem", path).toDispatch(); */Dispatch mailItem = Dispatch.call(axOutlook, "CreateItem", 0).getDispatch();// Dispatch mailItem = Dispatch.call(axOutlook, "Open",// "F:/test.htm").toDispatch();// Dispatch body = Dispatch.call(mailItem, "Body").getDispatch();;// Dispatch.call(body, "Copy");Dispatch inspector = Dispatch.get(mailItem, "GetInspector").getDispatch();// 收件人Dispatch recipients = Dispatch.call(mailItem, "Recipients").getDispatch();Dispatch.call(recipients, "Add", "467915818@qq.com");// 邮件主题Dispatch.put(mailItem, "Subject", "Test5!");// 抄送//Dispatch.put(mailItem, "CC", "sunyuqi@secuunion.net");// Dispatch.put(mailItem, "CC", "cry@163.com");// Dispatch.put(mailItem, "ReadReceiptRequested", "false");String body = "<html><body><div style='color:red;'>This is a Test !</div></body></html>";// Dispatch.put(mailItem, "HTMLBody", body);// File file = new File("C:/test.htm");// FileOutputStream f = new FileOutputStream("F:/test.htm");// f.write(body.getBytes());// f.close();BufferedReader bf = new BufferedReader(new FileReader(new File("F:/Ro.htm")));String html = "";String str = "";while ((str = bf.readLine()) != null) {html += str;}Dispatch.put(mailItem, "HTMLBody", html);// Dispatch bodyDis = Dispatch.get(mailItem, "Body").toDispatch();// Dispatch.call(bodyDis, "Add" , "F:/test.htm");// Dispatch.put(mailItem, "Body", new Variant("F:/test.htm"));// Dispatch.put(mailItem, "Body", body);// Dispatch.call(mailItem, "InsertAfter",body );//插入一个段落// Dispatch selection = Dispatch.get(axOutlook,// "Selection").toDispatch();// Dispatch inHtmleditor = Dispatch.call(inspector,// "HTMLEditor").getDispatch();// Dispatch.call(inHtmleditor, "Paste").getDispatch();// Dispatch.invoke(inHtmleditor, "Paste", Dispatch.Method, new// Object[]{false}, new Variant(false));// 附件// Dispatch attachments = Dispatch.call(mailItem,// "Attachments").getDispatch();// Dispatch.call(attachments, "Add" , "D:\\20110127.txt");// Dispatch.call(attachments, "Add" , "D:\\20110128.txt");// 显示新邮件窗口Dispatch.call(mailItem, "Display");Dispatch.call(mailItem, "Send");}}
更多例子:http://uule.iteye.com/blog/1195597
实现业务逻辑
完成上面的准备工作后,就开始实现具体的业务逻辑了。
首先,要获取邮件您需要登录到指定邮箱,Outlook profile 中存储了您的邮箱的基本信息,下面的例子是如何登录特定 profile:
public void logon(String profile, String password) { // 登录到指定 Profile,并获取一个会话 ActiveXComponent session = new ActiveXComponent("Redemption.RDOSession"); Dispatch.call(session, "Logon", profile, password, false, true); }
现在已经能够访问用户邮箱,我们要做的是获取收件箱中的标题以“ORDER NO:”开始的邮件,把信息存储到订单管理系统之中
Dispatch items = Dispatch.call(folder, "Items").toDispatch(); int count = Dispatch.call(items, "Count").getInt(); // 轮询所有邮件,并检查符合标准的邮件for (int x = 1; x <= count; x++) { Dispatch item = Dispatch.call(items, "_Item", new Integer(x)).toDispatch(); ActiveXComponent sMail = new ActiveXComponent("Redemption.SafeMailItem"); sMail.setProperty("Item", item); Variant vSubj = Dispatch.get(sMail, "Subject"); String subj = vSubj.getString(); if (subj.startWith(“ORDER NO”)){ // 将获取的定单信息存储到订单处理队列之中 OrderMail mail = new OrderMail(item); mail.persistToOrderQueue(); } }
获取订单之后,将订单标记为已处理,这里我们通过操作命名属性的方式来标记状态,然后移动邮件到放置已处理邮件的目录:
// 获取命名属性的 ID ActiveXComponent utils = new ActiveXComponent("Redemption.MAPIUtils"); Variant namedPropID = Dispatch.call(utils, "GetIDsFromNames", orderMail, GUID_OF_USERPROP, ORDER_STATE_DONE, true ); // 将邮件标记处理状态ActiveXComponent utils = new ActiveXComponent("Redemption.MAPIUtils"); Dispatch.call(utils, "HrSetOneProp", orderMail, namedPropID, "Done", true ); // 将处理过的邮件移出现在的目录Dispatch.call(orderMail, "Move", folderForProcessedMsg);
您可以看到,无需关注太多类库的细节,只需要知道要使用的对象名称、方法和输入变量,就可以轻松的调用 COM 组件。JACOB 的准备工作非常简单,并且只需要非常有限的编码,就完成了现有业务系统和新应用的无缝集成。
- Java 操作Word Excel Outlook.
- Java操作Word,Excel,Access,Outlook
- Java com bridge 操作Word Excel Outlook.
- apache提供的Java操作excel、word、xml、Outlook、Visio等jar包资源
- Java操作Excel,Word
- Java操作Excel,Word
- RCP中整合Office (excel 、word、outlook)
- Java操作Word,Excel,Access,Pdf
- java对word、excel、pdf的操作
- Java如何操作Word, Excel, PDF文档
- Java如何操作Word, Excel, PDF文档
- Java如何操作Word, Excel, PDF文档
- Java如何操作Word, Excel, PDF文档?
- Java如何操作Word, Excel, PDF文档?
- Java操作MS Word和Excel文档
- jacob操作word excel
- c#操作 word excel
- python操作Excel word
- KoaHub平台基于Node.js开发的Koa的get/set session插件代码详情
- jquery attr()方法
- 学习成长之旅,共勉!
- 如何优化正则项为2-1范数的问题
- leetcode(E)two sumII
- Java 操作Word Excel Outlook.
- 无法导入android.os.Handler
- js定时器
- JNI的使用
- JAVA面试 不使用API情况下,把数字字符串转换成int类型
- js中=,==和===的区别
- Java内存泄露原因详解
- MediaPlayer 视频播放
- 使用PyQt来编写第一个Python GUI程序