都说懒人推动社会进步。
我的出发点是,想做个自动生成工作日志的工具。思路是读取google日历中我每日的工作记录,填充生成公司规定格式的word文件,然后再调用邮件函数发送邮件到领导的信箱里面去。
这其中一环就是Java读写doc文件。网上找了不少资料,初步选用了Apache POI,可以读写整个Office系列的各种文档,并且不依赖Office的任何库,纯JAVA代码。直接读写doc的二进制文件,我最喜欢了。相对的有个Java com 桥的方法,用Java来操作com对象,后台运行隐藏的word程序,甚为不喜。
POI API Documentation 的文档写的太差了,没有例子,Apache 的 POI 项目主页也没有代码,直接说想看代码,请去svn下载代码,阅读他的单元测试用例,TestCase。
最后磕磕绊绊写了下面的一个测试的例子。基本可以看清这个POI的hwpf库,读写word doc 文件的方法。代码、注释都是原创,高手飘过去就行了。
import java.io.*;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
public class Main {
public static void main(String[] args) {
try {
//新建 HWPFDocument 对象,读入doc文件
HWPFDocument doc = new HWPFDocument(new FileInputStream("c:\\test.doc"));
//得到整个doc文档的Range,可以理解为文档对象
Range r = doc.getRange();
System.out.println("Example you supplied:");
System.out.println("---------------------");
String text = new String("");
//得到整个文档里面的所有纯文字,包含回车换行。一段是一行
text = r.text();
//System.out.println(text);
//得到整个文档的分节数。一般只有一节,排版很漂亮的word文档一般分为多节
System.out.println("numSections: " + r.numSections());
//得到倒数第一节的Section对象
Section section = r.getSection(r.numSections() - 1);
//得到该节里面的段落数
System.out.println(section.numParagraphs());
System.out.println("numParagraphs: " + section.numParagraphs());
String searchText = "${Ryan}";
String replacementText = "Apache Software Foundation";
//循环得到每一段落的文字。这个跟Range.text()是不同的。
for (int np = 0; np < section.numParagraphs(); np++) {
Paragraph para = section.getParagraph(np);
//得到该段落的文字
text = para.text();
//System.out.println(Integer.toString(np) + ":" + text);
int offset = text.indexOf(searchText);
if (offset >= 0) {
System.out.println(Integer.toString(np) + ":" + para.text());
//如果找到了,就进行文字的替换。replaceText只能针对段落
para.replaceText(searchText, replacementText);
break;
}
}
//写入到新的doc文件
OutputStream outdoc = new FileOutputStream("c:\\test2.doc");
doc.write(outdoc);
outdoc.flush();
outdoc.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
编译运行很顺利,但是悲剧的是,最后调用write方法写入的doc文件打不开了,报格式错误,用Notepad++打开这个doc文件对比原来的,发现文字确实替换成功了,但是文件的尾巴上少了一部分内容,二进制和assic混合的,格式看来是被破坏了。
忙活了半天,最后发现杯具了。应该是兼容性的问题。改天去他们的邮件列表问问。或者路过的看官知道的,指导一下我。
我在写这个文章的时候,又想到一个绝妙的注意。何必绕道这么远呢?
实施工作日志内容来源于google calendar,如果能够利用google app doc 自己本身的宏:google script,的功能,读取日历数据,形成doc文件,调用gmail发送到指定的信箱,不是齐活了吗?费不着用Java了。
其实在决定用java之前,想过用VB,这个做肯定不存在问题,VB操作com对象本身是轻车熟路,顶多再找个发邮件的库,实在不行了没人手工发送。方法还是很多的。
科技以懒人为本。
分享到:
相关推荐
"POI将word转HTML.zip"和"demo1.zip"可能包含具体的Java代码示例,用于演示如何实现Word到HTML的转换以及数据库数据导出到Excel的操作。解压后,开发者可以查看源代码并根据自己的需求进行调整和应用。 总结,Java...
POI 库是一个开放源代码的 Java 库,提供了对 Microsoft Office 文件格式的读写能力。 读取 WORD 文件 在读取 WORD 文件时,需要使用 `org.apache.poi.hwpf` 包下的 `WordExtractor` 类来提取文档内容。下面是一个...
关于压缩包中的"poi读写word模板包",可能包含了一些示例代码或模板文件,帮助开发者理解如何使用Apache POI进行Word模板的读写。解压后,你可以查看这些文件来学习具体实现,包括如何查找和替换模板中的特定字符串...
Java读写Word文件是Java开发中的一个重要技能,尤其在处理文档自动化、数据报告生成等场景中。Java2Word库提供了一种有效的方式,使我们能够方便地在Java应用程序中创建和修改Microsoft Word文档,而避免了使用...
在Java编程环境中,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,包括Word文档。本篇文章将详细讲解如何利用Apache POI库在Java中实现Word文档的数据填充以及多文件合并。 1. *...
在Java编程领域,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,如Word、Excel和PowerPoint。本项目“Java利用poi对word插入文字图片”是一个具体的示例,旨在教给你如何使用...
Java POI 是一个开源的Java库,用于读写Microsoft Office格式的文件,包括Excel和Word。这个"javapoi.rar"压缩包包含了使用JAVAPOI进行Excel和Word操作的示例代码,帮助开发者将数据库数据导出到这些文档格式中。 ...
在Java编程语言中,Apache POI是一个非常流行的库,它允许开发者处理Microsoft Office格式的文件,包括Word(.doc和.docx)文档。本篇将详细介绍如何利用Apache POI库来读取Word文件中的内容。 首先,理解Apache ...
在Java编程领域,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,包括Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。本示例聚焦于使用POI库根据Word模板...
Apache POI 提供了一套API,允许Java开发者读写Microsoft Office格式的文件。它支持HSSF(Horizontally Stored Spreadsheet Format)用于Excel,XSSF(XML Spreadsheet Format)也支持Excel,而HWPF(Horizontally ...
Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和.xlsx)等。在本主题中,我们将深入探讨如何使用Java POI流处理Word模板,插入...
Apache POI 是一个用于读写 Microsoft Office 格式文件(如 .doc、.xls 和 .ppt)的 Java API。本文档将详细介绍如何使用 POI 库来读取 Word 文档(包括 .doc 和 .docx 格式)中的文本内容以及提取其中的图片。 ###...
下面是一个简单的代码示例,展示了如何根据标识替换docx文档中的内容: ```java FileInputStream fis = new FileInputStream("input.docx"); XWPFDocument document = new XWPFDocument(fis); String ...
这个"poi读写office文件样例程序"提供了一系列的源代码示例,帮助开发者理解和实现对这些文件的读取和写入操作。下面将详细介绍其中涉及的关键知识点。 1. **Apache POI 框架** Apache POI 是Apache软件基金会的一...
`poidemo.rar`可能包含了一个使用Apache POI处理Word文档的示例代码,你可以解压后查看。 `--Java导出WordDemo--(4).rar`和`Java导出Doc--97--2003.txt`可能提供了不同版本Word文档(97-2003格式)的导出示例。早期...
"poiDemo"可能包含基本的读写操作,而"poi2word"可能进一步展示了如何将数据从其他格式(如CSV或数据库)导入到Word文档中,或者将Word文档的内容导出到其他格式。 6. **最佳实践** - 使用try-with-resources语句...
2. 只支持DOC不支持DOCX:代码示例仅适用于旧版的Word文档格式(.doc),对于新版的Word文档格式(.docx),需要使用不同的方法或更高版本的POI库。 六、扩展阅读与资源: 为了更深入地理解和应用Apache POI进行...
这个“make-word-by-java.rar”压缩包提供的示例代码(如“make word by java.docx”)应该会展示这些概念的实际应用,帮助开发者更好地理解和实践。记得在实际开发中,确保对Apache POI的使用进行充分的测试,以...
Java2Word是基于Apache POI库的,Apache POI是一个开源项目,用于读写Microsoft Office格式的文件,包括Word(.doc)文档。通过Java2Word,开发者可以利用Java代码来创建、填充模板、格式化文本、插入图片、表格等...
它允许开发者在Java应用程序中创建、修改和显示MS Office文件,包括Word(.doc和.docx)、Excel(.xls和.xlsx)以及PowerPoint(.ppt和.pptx)。在"poi-3.0.2.rar"中,包含了Apache POI的3.0.2版本,这个版本支持对...