利用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文件夹问题就解决了。
虽然这个控件很方便,但是我不知道是浏览器还是控件的问题,测试的时候总是有卡顿的现象,浏览器里面的其他页面都不能点击,有待解决。
本人是一个新手,如果有不对的地方,请大家批评指正。