Java操作WORD的相关笔记
- 解决方案
- java2word
- 简介
- 相关问题
- 使用示例
- PageOffice
- 简介
- 相关问题
- 使用示例
解决方案
一些解决方案可以参考这篇文章,懒得再写一遍,况且方案也不是所有的都试过
java2word
简介
java2word其实是java程序中调用 MS Office Word 文档的组件(类库)实现对WORD的简单操作,核心对象就是Document,提供了为数不多的相关函数,但是可以很方便的实现文本的插入、文本替换、文本查找、插入表格等简单的操作,如何即使写个请假条非常合适,但是功能仅限于此,不能调整格式样式(除非在模板中定义好),其次,这种方案不需要客户端下载组件,在服务器端完成全部操作。
相关问题
1、jacob.dll文件拷贝,相关问题可以参阅这篇文章
2、使用问题,java2word需要32位的jdk来运行要不然会报相关错误
使用示例
示例中使用我从数据库中导出的数据作为表格填充,非常容易的就实现了表格生成,但是具体格式比较令人糟心,格式无法调整,所以说可能适合填写个什么模板之类的需求。
if (action.equals("exportword")){
System.out.println("开始导出Word");
List<GuanjiangFX> list = getlist(req);
GuanjiangDaoImpl guanjiangDao = new GuanjiangDaoImpl();
List<Object[]> listcolinfo = guanjiangDao.queryforsheetinfo(); //获取字段信息表
String[] dest = new String[listcolinfo.size()];
for (int i = 0; i < listcolinfo.size(); i++) {
dest[i] = listcolinfo.get(i)[0].toString();
}
Document doc = null;
try {
doc = new Document();
doc.newDoc("C:\\Users\\*****\\Desktop\\test.doc");
List<Object> tableData = new ArrayList<Object>(3);
String[] title = dest;
tableData.add(title);
for (GuanjiangFX guanjiangFX: list) {
String[] fields = {guanjiangFX.getKonghao(),guanjiangFX.getKongxu(),guanjiangFX.getKongshendu(),guanjiangFX.getShuiniyongliang(),guanjiangFX.getGettime()};
tableData.add(fields);
}
doc.insert(tableData);
doc.insert("表格结束","标题 1");
doc.insertln();
doc.insert("文档结束");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(doc!=null) doc.close(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
生成文档效果展示
PageOffice
简介
由卓越软件出品,可以在官网上下载资料进行学习,资料和文档丰富,有问题可以找找客服帮忙。对于这种解决方案本身而言,它可以实现在线的文档编辑,创新性的以弹出式窗口POBrowser的方式调用本地的Office软件进行相关操作,所以本地必须安装Office。相关具体的核心对象介绍和案例教程官网都已经给出,比较容易实现在线的编辑功能。
相关问题
1、根据需求寻找最佳的解决方案,官网介绍说可以实现不显示页面操作文档,我考虑的是使用FileMakerCtrl这个核心对象来实现,结果测试后发现只有IE浏览器才能使用,可能还是因为FireFox和Chrome不是使用插件了,POBrowser使用的就是IE内核,这种方法似乎走不通。
2、使用问题,具体使用根据下载文档中的安装说明来就行了,将servlet映射copy到项目的web.xml文件中,poCtrl1.setServerPage(“poserver.zz”),,这个设置时必须且固定的,web.xml中已经配置了这个后台服务处理路径,
poCtrl1.setSaveFilePage(“savefile.jsp”),这个saveFilePage可以自己指定,可以时jsp,也可以时servlet,在其中使用FileSaver对象接受保存事件相应后的请求,调用saveToFile保存到服务器。
使用示例
在我的界面中加入一个a标签,点击需要弹出POBrowser窗口,这里需要引入两个头文件:
<td><a href="javascript:POBrowser.openWindowModeless('http://192.168.137.1:8080/InnerHotel/servlet/editwordservlet','width=1000px;height=500px')" >生成Word</a></td>
下面时跳转到的servlet后台的代码
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("访问进入");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(req);
req.setAttribute("poCtrl1",poCtrl1);
poCtrl1.setServerPage(req.getContextPath()+"/poserver.zz"); //此行必须
poCtrl1.setSaveFilePage( req.getContextPath() +"/servlet/savefileservlet"); //如要保存文件,此行必须
poCtrl1.webOpen(req.getContextPath()+"/FileMaker/doc/template.doc", OpenModeType.docNormalEdit, "张三"); //打开文件
req.getRequestDispatcher("/FileMaker/wordonline.jsp").forward(req,resp);
}
下面时请求转发的jsp页面的代码,实现POBroswer的显示
<%@ page import="com.zhuozhengsoft.pageoffice.PageOfficeCtrl" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
PageOfficeCtrl poCtrl1 = (PageOfficeCtrl) request.getAttribute("poCtrl1");
%>
<html>
<head>
<title>wordonline</title>
<base href="<%=basePath%>">
</head>
<body>
<%=poCtrl1.getHtmlCode("PageOfficeCtrl1")%>
</body>
</html>