url: http://blog.csdn.net/yuvmen/article/details/1878996
开发中隔三叉五的就要用到Word,经常被搞得不胜其烦,不过这次找到了不少好例子,干脆将他们都摘了过来,内容如下:
write word
代码
这样写文件有问题,因为不是word格式。
当然这几个jar是少不了的
poi-2.5.1-final-20040804.jar
poi-contrib-2.5.1-final-20040804.jar
poi-scratchpad-2.5.1-final-20040804.jar
java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。
这些服务包括:
打开文档、新建文档、查找文字、替换文字,
插入文字、插入图片、插入表格,
在书签处插入文字、插入图片、插入表格等。
填充数据到表格中读取表格数据
1.1版增强的功能:
@指定文本样式,指定表格样式。如此,则可动态排版word文档。
@填充表格数据时,可指定从哪行哪列开始填充。配合输入数据的大小,你可以修改表中的任意部分,甚至只修改一个单元格的内容。
@合并单元格。
更多激动人心的功能见详细说明: http://www.heavenlake.com/java2word/doc
免费下载:http://dev.heavenlake.com:81/developer/listthreads?forum=8
3. 用java生成word文档
*
* @author [email protected]
*/
public class WordBridge {
Log log = LogFactory.getLog("WordBridgt");
private ActiveXComponent MsWordApp = null;
private Dispatch document = null;
/**
* 打开word
* @param makeVisible, true显示word, false不显示word
*/
public void openWord(boolean makeVisible) {
if (MsWordApp == null) {
MsWordApp = new ActiveXComponent("Word.Application");
}
Dispatch.put(MsWordApp, "Visible", new Variant(makeVisible));
}
/**
* 创建新的文档
*
*/
public void createNewDocument() {
Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
document = Dispatch.call(documents, "Add").toDispatch();
}
/**
* 关闭文档
*/
public void closeDocument() {
// 0 = wdDoNotSaveChanges
// -1 = wdSaveChanges
// -2 = wdPromptToSaveChanges
Dispatch.call(document, "Close", new Variant(0));
document = null;
}
/**
* 关闭word
*
*/
public void closeWord() {
Dispatch.call(MsWordApp, "Quit");
MsWordApp = null;
document = null;
}
/**
* 插入文本
* @param textToInsert 文本内容
*/
public void insertText(String textToInsert) {
Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
Dispatch.put(selection, "Text", textToInsert);
}
/**
* 保存文件
* @param filename
*/
public void saveFileAs(String filename) {
Dispatch.call(document, "SaveAs", filename);
}
/**
* 将word转换成html
* @param htmlFilePath
*/
public void wordToHtml(String htmlFilePath) {
Dispatch.invoke(document,"SaveAs", Dispatch.Method, new Object[]{htmlFilePath,new Variant(8)}, new int[1]);
}
/**
* 保存word的同时,保存一个html
* @param text 需要保存的内容
* @param wordFilePath word的路径
* @param htmlFilePath html的路径
* @throws LTOAException
*/
public void wordAsDbOrToHtml(String text, String wordFilePath, String htmlFilePath) throws LTOAException {
try {
openWord(false);
createNewDocument();
insertText(text);
saveFileAs(wordFilePath);
wordToHtml(htmlFilePath);
} catch (Exception ex) {
log.error("错误 - 对word的操作发生错误");
log.error("原因 - " + ex.getMessage());
throw new LTOAException(LTOAException.ERR_UNKNOWN, "对word的操作发生错误("
+ this.getClass().getName() + ".wordAsDbOrToHtml())", ex);
} finally {
closeDocument();
closeWord();
}
}
/**
* 将word保存至数据库
* @param wordFilePath
* @param RecordID
* @throws LTOAException
*/
public void wordAsDatabase(String wordFilePath, String RecordID) throws LTOAException {
Connection conn = null;
PreparedStatement pstmt = null;
PoolingDataSource pool = null;
File file = null;
String sql = "";
try {
sql = " UPDATE Document_File SET FileBody = ? WHERE RecordID = ? ";
pool = new PoolingDataSource();
conn = pool.getConnection();
file = new File(wordFilePath);
InputStream is = new FileInputStream(file);
byte[] blobByte = new byte[is.available()];
is.read(blobByte);
is.close();
pstmt = conn.prepareStatement(sql);
pstmt.setBinaryStream(1,(new ByteArrayInputStream(blobByte)), blobByte.length);
pstmt.setString(2, RecordID);
pstmt.executeUpdate();
} catch (Exception ex) {
log.error("错误 - 表 Document_File 更新数据发生意外错误");
log.error("原因 - " + ex.getMessage());
throw new LTOAException(LTOAException.ERR_UNKNOWN,
"表Document_File插入数据发生意外错误("
+ this.getClass().getName() + ".wordAsDatabase())", ex);
} finally {
pool.closePrepStmt(pstmt);
pool.closeConnection(conn);
}
}
/**
* 得到一个唯一的编号
* @return 编号
*/
public String getRecordID() {
String sRecordID = "";
java.util.Date dt=new java.util.Date();
long lg=dt.getTime();
Long ld=new Long(lg);
sRecordID =ld.toString();
return sRecordID;
}
/**
* 得到保存word和html需要的路径
* @param systemType 模块类型 givInfo, sw, fw
* @param fileType 文件类型 doc, html
* @param recID 文件编号
* @return 路径
*/
public String getWordFilePath(String systemType, String fileType, String recID) {
String filePath = "";
File file = new File(this.getClass().getResource("/").getPath());
filePath = file.getPath().substring(0, file.getPath().length() - 15);
if(systemType.equalsIgnoreCase("govInfo")) {
if(fileType.equalsIgnoreCase("doc"))
filePath = filePath + "/uploadFiles/govInfo/document/" + recID + ".doc";
else if(fileType.equalsIgnoreCase("htm"))
filePath = filePath + "/HTML/govInfo/" + recID + ".htm";
} else if(systemType.equalsIgnoreCase("sw")){
if(fileType.equalsIgnoreCase("doc"))
filePath = filePath + "/uploadFiles/sw/document/" + recID + ".doc";
else if(fileType.equalsIgnoreCase("htm"))
filePath = filePath + "/HTML/sw/" + recID + ".htm";
} else if(systemType.equalsIgnoreCase("fw")) {
if(fileType.equalsIgnoreCase("doc"))
filePath = filePath + "/uploadFiles/fw/document/" + recID + ".doc";
else if(fileType.equalsIgnoreCase("htm"))
filePath = filePath + "/HTML/fw/" + recID + ".htm";
}
return filePath;
}
}
5. 另一个例子(用jacob包):