利用pageoffice实现在线处理excel文档

上周开组会,发现理解错导师的意思了,老师当然希望我能自动的爬取那些信息,但是现在要的很急,希望以半自动的方式去得到这些数据存到数据库,所以这周一直在弄这个。我也是第一次用jsp编程,之前一直用的asp,虽然感觉大同小异,但是仍然是新手。

  • 环境
    Tomcat 6.0, Myeclipse 2014, PageOffice_2.0.5.2_JAVA,360安全浏览器(chrome、火狐都不支持此插件,有解决办法,但我没研究=。=)
  • 准备工作
    寻找到pageoffice的安装包绿色版,按照里面的安装说明.txt测试发现,一定要先安装posetup.exe,再将pageoffice.jar、posetup.exe、seal.mdb、sealsetup.exe四个文件放到lib文件夹中,把包bulid path一下。(之前调试了好半天啊,一修改web.xml就报404错误,后来才发现,根本没装posetup.exe,网上好多讲pageoffice的例子,也没有提到。)
  • 修改web.xml配置文件
    粘贴到web.xml里面就行了
<servlet>
    <servlet-name>poserver</servlet-name> 
    <servlet-class>com.zhuozhengsoft.pageoffice.poserver.Server</servlet-class> 
  </servlet>
  <servlet-mapping> 
    <servlet-name>poserver</servlet-name> 
    <url-pattern>/poserver.zz</url-pattern> 
  </servlet-mapping> 
  <servlet-mapping> 
    <servlet-name>poserver</servlet-name> 
    <url-pattern>/poserver.do</url-pattern> 
  </servlet-mapping> 
  <servlet-mapping> 
    <servlet-name>poserver</servlet-name> 
    <url-pattern>/pageoffice.cab</url-pattern>
  </servlet-mapping>
  <servlet-mapping> 
    <servlet-name>poserver</servlet-name> 
    <url-pattern>/popdf.cab</url-pattern>
  </servlet-mapping>
  <servlet-mapping> 
    <servlet-name>poserver</servlet-name> 
    <url-pattern>/sealsetup.exe</url-pattern>
  </servlet-mapping>
  <servlet-mapping> 
     <servlet-name>poserver</servlet-name> 
     <url-pattern>/posetup.exe</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>adminseal</servlet-name> 
    <servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal</servlet-class> 
  </servlet>
  <servlet-mapping> 
    <servlet-name>adminseal</servlet-name> 
    <url-pattern>/adminseal.do</url-pattern> 
  </servlet-mapping>
  <servlet-mapping> 
    <servlet-name>adminseal</servlet-name> 
    <url-pattern>/loginseal.do</url-pattern>
  </servlet-mapping>
  <servlet-mapping> 
    <servlet-name>adminseal</servlet-name> 
    <url-pattern>/sealimage.do</url-pattern>
  </servlet-mapping>
  <mime-mapping>  
    <extension>mht</extension>  
    <mime-type>message/rfc822</mime-type>  
  </mime-mapping>
  <context-param>
    <param-name>adminseal-password</param-name>
    <param-value>111111</param-value>
    </context-param>
  • 编程index.jsp
    主要实现加载excel文档,并且在线保存文件到服务器(savefile.jsp)
    index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page language="java" import="com.zhuozhengsoft.pageoffice.*" %> <!-- 导入包 -->
<%@ taglib uri="http://java.pageoffice.cn" prefix="po" %><!-- 不知道这个为啥一定要加上 -->

<%      /*创建一个新Excel文档并以普通编辑方式在线打开此文档  */
        PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
         poCtrl1.setServerPage("poserver.do"); //此行必须
         poCtrl1.addCustomToolButton("保存","jian()",1);//添加自定义工具栏按钮 ,调用判断js
         poCtrl1.setFileTitle("请点击工具栏中的保存.xls");//另存为时的默认文件名
         poCtrl1.setSaveFilePage("savefile.jsp");
         poCtrl1.webCreateNew("苏苏", DocumentVersion.Excel2003);
         poCtrl1.setTagId("PageOfficeCtrl1"); //此行必须
%>

读了API文件,发现pageoffice设计的还是很方便的,很多接口函数,因为我在页面上定义了控件,我想使文件保存的时候直接以控件的value组合成文件名,所以自己写了js.

<script type="text/javascript">
function Save()
{
 var truthBeTold = window.confirm("是否要保存到服务器?"); 
if (truthBeTold) { 
            document.getElementById("PageOfficeCtrl1").WebSave();
            location.reload();//页面刷新
} else {
}
}
function jian(){
var schoolname=document.getElementsByName("schoolname").item(0).value;
var leixing=document.getElementsByName("leixing").item(0).value;
var kelei=document.getElementsByName("kelei").item(0).value;
var pici=document.getElementsByName("pici").item(0).value;
var shengfen=document.getElementsByName("shengfen").item(0).value;
var year=document.getElementsByName("year").item(0).value;
if(schoolname==""||leixing==""||kelei==""||pici==""||shengfen==""||year=="")
{
 alert("请将信息补充完整!"); 
}
else
{

Save();//这里调用保存文件的函数
}


}
</script>

然后把控件加到页面相应的位置就行了:

<div style="height:800px; width:800px;">//这里可以控制控件大小
       <po:PageOfficeCtrl id="PageOfficeCtrl1" />
      </div>
  • savefile.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page language="java" import="com.zhuozhengsoft.pageoffice.FileSaver" %>//不要忘记导入包
<%
FileSaver fs=new FileSaver(request,response);
String schoolname=fs.getFormField("schoolname");//获取pageoffice控件所在页面的控件value值,控件一定要有name属性
String leixing=fs.getFormField("leixing");
String kelei=fs.getFormField("kelei");  
String pici=fs.getFormField("pici");
String shengfen=fs.getFormField("shengfen");
String year=fs.getFormField("year");
String filename=schoolname+"+"+leixing+"+"+kelei+"+"+pici+"+"+shengfen+"+"+year+".xls";
fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/")+"/"+filename);

fs.close();

 %>

在保存的时候,一定要注意保存文件的路径,这个默认是在webroot下,我之前调试一直显示保存不成功,在webroot下建立doc文件夹问题就解决了。

虽然这个控件很方便,但是我不知道是浏览器还是控件的问题,测试的时候总是有卡顿的现象,浏览器里面的其他页面都不能点击,有待解决。

本人是一个新手,如果有不对的地方,请大家批评指正。