Java操作WORD的相关笔记

  • 解决方案
  • java2word
  • 简介
  • 相关问题
  • 使用示例
  • PageOffice
  • 简介
  • 相关问题
  • 使用示例


解决方案

一些解决方案可以参考这篇文章,懒得再写一遍,况且方案也不是所有的都试过

java2word

简介

java2word其实是java程序中调用 MS Office Word 文档的组件(类库)实现对WORD的简单操作,核心对象就是Document,提供了为数不多的相关函数,但是可以很方便的实现文本的插入、文本替换、文本查找、插入表格等简单的操作,如何即使写个请假条非常合适,但是功能仅限于此,不能调整格式样式(除非在模板中定义好),其次,这种方案不需要客户端下载组件,在服务器端完成全部操作。

java提前word内容 java word操作_解决方案

相关问题

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();
                }
            }

        }

生成文档效果展示

java提前word内容 java word操作_List_02

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>