Java獲取word表格中的數據

前言:

有時系統中需要提取各種文件中的數據,比如做報表的系統中就常常與Excel表格數據做交互。做Excel報表數據時有選擇POI實現的,但是POI功能也很單一,對於文檔格式維護性差,最重要的是POI在操作word數據時顯得力不從心,所以對於word中數據的交互就要找找其他方式。其實對於文檔的操作,微軟有自己的一套東西——activex控件。

但是這需要開發者具備將activex控件集成到Java環境的能力。對於大部分Java開發工程師來說,僅僅解決單一的功能就要掌握activex控件,未免學習成本太大。

所以我們今天就要介紹一箇中間件技術——pageoffice,此中間件技術已經將 在web系統操作office文檔的大部分功能整合完畢,大家只需要關注自己web系統的業務邏輯即可,學習成本低,且功能很豐富。下面我們來實戰用pageoffice實現一下用Java從word文檔的表格中提取數據的功能。

先看效果:

打開的文檔中有下面這麼一個表格

點擊保存,彈出瞭如下窗口,窗口中是word表格中的數據。這裏只是爲了演示,其實這些數據是在後臺中拿到後然後又輸出到頁面中的,實際開發中拿到數據可以保存到數據庫的。

 

 部署步驟(只需5步)

1.官網http://www.zhuozhengsoft.com/dowm/下載集成文件,引入jar包,配置web.xml

去剛纔下載的集成文件中找到lib,將裏面的內容放在項目web-inf的lib中引入jar包,然後將web.xml的pageoffice配置引入到自己項目的wb.xml中

2.在父頁面aaa.jsp(需要打開文檔的頁面)放一個a標籤或者button

寫a標籤之前先引入pageoffice需要的js文件

<script type="text/javascript" src="/jquery.min.js"></script>
<script type="text/javascript" src="/pageoffice.js" id="po_js_main"></script>

然後添加a標籤 

<a href="javascript:POBrowser.openWindowModeless('Default.jsp' , 'width=1200px;height=800px;');">獲取Word文件中表格的數據</a>

3.在父頁面同級目錄下創建一個名爲Default.jsp的文件

<%@ page language="java" import="java.util.*, java.awt.*" pageEncoding="utf-8"%>
<%@page import="com.zhuozhengsoft.pageoffice.*, com.zhuozhengsoft.pageoffice.wordwriter.*"%>
<%
//***************************卓正PageOffice組件的使用********************************
        WordDocument doc = new WordDocument();
        //打開數據區域
        DataRegion dTable = doc.openDataRegion("PO_table");
        //設置數據區域可編輯性
        dTable.setEditing(true);

        //打開數據區域中的表格,OpenTable(index)方法中的index爲word文檔中表格的下標,從1開始
        Table table1 = dTable .openTable(1);
        //設置表格邊框樣式
        table1.getBorder().setLineColor(Color.green);
        table1.getBorder().setLineWidth(WdLineWidth.wdLineWidth050pt);
        // 設置表頭單元格文本居中
        table1.openCellRC(1, 2).getParagraphFormat().setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);
        table1.openCellRC(1, 3).getParagraphFormat().setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);
        table1.openCellRC(2, 1).getParagraphFormat().setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);
        table1.openCellRC(3, 1).getParagraphFormat().setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);

        // 給表頭單元格賦值
        table1.openCellRC(1, 2).setValue("產品1");
        table1.openCellRC(1, 3).setValue("產品2");
        table1.openCellRC(2, 1).setValue("A部門");
        table1.openCellRC(3, 1).setValue("B部門");
        
        PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
        poCtrl.setWriter(doc);

        //添加自定義按鈕
        poCtrl.addCustomToolButton("保存", "Save", 1);
        poCtrl.addCustomToolButton("全屏/還原", "IsFullScreen", 4);
        
        //設置服務器頁面
        poCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必須
        //設置保存頁
        poCtrl.setSaveDataPage("SaveData.jsp");
        //設置文檔打開方式
        poCtrl.webOpen("test.doc", OpenModeType.docSubmitForm, "張佚名");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>數據區域提交表格</title>
    <link href="images/csstg.css" rel="stylesheet" type="text/css" />

</head>
<body>
   

    <div id="content">
        <div id="textcontent" style="width: 1000px; height: 800px;">
      

            <script type="text/javascript">
                //保存頁面
                function Save() {
                    document.getElementById("PageOfficeCtrl1").WebSave();
                }

                //全屏/還原
                function IsFullScreen() {
                    document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;
                }

            </script>

            <!--**************   卓正 PageOffice組件 ************************-->
          <%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>
        </div>
    </div>

</body>
</html>

4.新建文件

新建一個名爲test.doc的word文件(如果新建的是docx文件就將第三步的poCtrl.webOpen("test.doc", OpenModeType.docSubmitForm, "張佚名");代碼改爲poCtrl.webOpen("test.docx", OpenModeType.docSubmitForm, "張佚名");

將新建的test.doc文件放在Default.jsp同級目錄下。

本地打開test.doc文件,創建一個3行3列的表格,然後點擊表格左上角的全選標誌選中整個表格。

整個表格選中的情況下,點擊菜單欄插入-書籤--書籤名設置爲PO_table--點擊添加(書籤名稱格式爲PO_開頭,比如自己設置的書籤名爲PO_T001,那麼記得將第三步中的 DataRegion dTable = doc.openDataRegion("PO_table");改爲 DataRegion dTable = doc.openDataRegion("PO_T001");)。

 5.在父頁面同級目錄下創建一個名爲SaveData.jsp的文件

<%@ page language="java"
	import="java.util.*,com.zhuozhengsoft.pageoffice.*,com.zhuozhengsoft.pageoffice.wordreader.*"
	pageEncoding="utf-8"%>
<%
	//-----------  PageOffice 服務器端編程開始  -------------------//
        WordDocument doc = new WordDocument(request,response);
        DataRegion dataReg = doc.openDataRegion("PO_table");
        Table table = dataReg.openTable(1);
     
        //輸出提交的table中的數據
        out.print("表格中的各個單元的格數據爲:<br/><br/>");
        StringBuilder dataStr = new StringBuilder();
        for (int i = 1; i <= table.getRowsCount(); i++)
        {
            dataStr.append("<div style='width:220px;'>");
            for (int j = 1; j <= table.getColumnsCount(); j++)
            {
                dataStr.append("<div style='float:left;width:70px;border:1px solid red;'>"+table.openCellRC(i,j).getValue()+"</div>");
            }
            dataStr.append("</div>");
        }
        out.print(dataStr.toString());
   
		//向客戶端顯示提交的數據
		doc.showPage(300, 300);
		doc.close();
%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>

		<title>My JSP 'SaveFile.jsp' starting page</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
	</body>
</html>

(如果自己設置的書籤名爲PO_T001,記得將上面的DataRegion dataReg = doc.openDataRegion("PO_table");改爲 DataRegion dataReg = doc.openDataRegion("PO_T001");)。

然後啓動項目直接訪問aaa.jsp點擊鏈接.此時會提示安裝插件,點擊安裝成功後提示註冊,填寫相關信息,填寫註冊碼Q37LN-W8NI-KFSQ-LEY3Y就可以打開文檔.

注意:如果需要更豐富的功能,可以去pageoffice官網下載示例代碼直接將samples4文件夾拷貝到Tomcat的webapps下,啓動Tomcat,瀏覽器訪問http://localhost:8080/Samples4/index.html,查看示例中的下面一個鏈接,直接看samples4文件夾下DataRegionTable文件夾裏面的代碼.

 

剛開始接觸pageoffice的話,也可以看視頻快速上手http://www.zhuozhengsoft.com/Technical/

如有侵權,請聯繫博主

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章