文档章节

项目常用工具类整理(三)--ZSOffice/PageOffice的引用

Pig-man
 Pig-man
发布于 2016/05/14 16:10
字数 1227
阅读 1319
收藏 13
点赞 3
评论 0

        在项目中经常会遇到生成一些excel或是word的文档后用于直接打印这种情况,尤其是电子签章方面,卓正office提供了一个很强大的应用。我就拿excel来生成报表这种类型来介绍一下吧。

1、导入pageoffice.jar,同时也不要忘了poi的相关jar包

2、下面从前台的一个请求出发,到显示出该excel页面的完整过程,需要注解的地方我会详细的列出来

a:通过前天一个url请求(具体的路径参数我已经给删除了)

function onClick(event, treeId, treeNode, clickFlag) {
		$('#dialogIframe')[0].src = '${contextPath}zsOffice/view';
	}

b:然后码出对应的controller层的代码,返回数据list和pageoffice的显示模式 ,指向要跳转的的jsp页面。

ModelAndView mav = new ModelAndView("/xxckywh/Excel");
		mav.addObject("List", List);//数据list串
		mav.addObject("mode", mode);//mode会在后文提及,指的是打印还是下载
		return mav;

c:然后我码出对应的"/xxckywh/Excel"的jsp代码,还有他引入的zsExcel.jsp,以及涉及到的"/resources/template/jlqk.xls"excle文件截图

<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="GB2312"
	import="java.util.List,SOAOfficeX.*"%>
<%request.setCharacterEncoding("gb2312");%>
<jsp:useBean id="user" scope="session" class="com.kkk.domain.User"/>
<%
ZSExcelUtil zsExcelUtil = new ZSExcelUtil();
ExcelResponse SOAExcel = zsExcelUtil.getSOAExcel();
ExcelResSheet sheet;
zsExcelUtil.openSheet("jlqk");//与你打开的excel中的sheet表单名相同
sheet = zsExcelUtil.getSheet();
	
	sheet.useRangeFormat("A5:E5");//循环区间为A-E
	int line = 5;//从5行开始循环使用
	String sj, dj, sjmc, dw, yj;
	List<Jlqk> jlqkList = (List<Jlqk>)request.getAttribute("List");//处理后台传过来的List
	for(Jlqk jlqk : jlqkList){
		sj = SysTools.formatDate(jlqk.getSjsj(), "date");
		if (!Tools.isEmpty(sj)) {
			//sj = sj.substring(0, 4) + "年" + sj.substring(5, 7) + "月";
			sj = sj.substring(0, 4) + sj.substring(5, 7)  ;
		} 
		dj = jlqk.getDj();
		sjmc = jlqk.getSjmc();
		dw = jlqk.getSydw();
		yj = jlqk.getSjsy();
		
		sheet.openCell("A"+line).setValue(sj);
		sheet.openCell("B"+line).setValue(dj);
		sheet.openCell("C"+line).setValue(sjmc);
		sheet.openCell("D"+line).setValue(dw);
		sheet.openCell("E"+line++).setValue(yj);
	}
	sheet.endRangeFormat();//循环结束

	SOAOfficeCtrl SOACtrl = zsExcelUtil.getSOACtrl(pageContext, SOAExcel);
	SOACtrl.ServerURL = "/soaservlet/soaserv.do";
	SOACtrl.webOpen(request.getContextPath() + "/resources/template/jlqk.xls", 0, user.getUsername(), "Excel.Sheet");
%>

<%@include file="zsExcel.jsp" %>

下面zsExcel.jsp,其中规范了excel调用起来后的工具

<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="GB2312"%>
<%request.setCharacterEncoding("gb2312");%>

<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/lib/easyui/jquery.min.js"></script>
</head>
<body bgColor="#ffffff" leftMargin="0" topMargin="0" onLoad="soaOpen();window.focus();">
	<script>
		function soaOpen() { 
			try {
				SOAOfficeCtrl.Toolbars = false;
				SOAOfficeCtrl.Menubar = false;	
			
				SOAOfficeCtrl.AppendToolButton(1, "打印", 6);
				SOAOfficeCtrl.AppendToolButton(2, "打印预览", 7);
				SOAOfficeCtrl.AppendToolButton(3, "页面设置", 0);
				SOAOfficeCtrl.AppendToolButton(4, "-");
				SOAOfficeCtrl.AppendToolButton(5, "另存到本机", 1);
				SOAOfficeCtrl.AppendToolButton(6, "-");
				//SOAOfficeCtrl.AppendToolButton(7, "全屏/还原", 4);
// 				SOAOfficeCtrl.ServerURL = "/soaservlet/soaserv.do";
// 				SOAOfficeCtrl.WebOpen("OpenByServerSide");
				return true;
			} catch (e) { 
				var errorStr = e.description;
				if (errorStr.indexOf("为空或不是对象") > 0) {
					alert("本机尚未安装SOAOffice 客户端控件,请安装浏览器上方黄色提示条或弹出提示框中的SOAOffice 客户端控件。");
				} else {
					alert(erroStr);
				}
				return false; 
			} 
		}
		
		function handelRequest() {
			<%
				String mode = (String)request.getAttribute("mode");
			%>
			var mode = '<%=mode%>';
			//alert('mode:' + mode);
			
			if (mode == 'print') {
				SOAOfficeCtrl.PrintOut();
			} else if (mode == 'download') {
				//parent.$('#downloadFrame')[0].src = '${pageContext.request.contextPath}/zsOffice/downloadDoc';
				SOAOfficeCtrl.ShowDialog(3);
			}
		}
	</script>
	<script language="Javascript" event="OnInit()" for="SOAOfficeCtrl">
		// 控件打开文档前触发,用来初始化界面样式
	</script>
	<script language="Javascript" event="OnDocumentOpened(str, obj)" for="SOAOfficeCtrl">
		// 控件打开文档后立即触发,添加自定义菜单,自定义工具栏,禁止打印,禁止另存,禁止保存等等
		SOAOfficeCtrl.Toolbars = false;
		SOAOfficeCtrl.Menubar = false;	
		SOAOfficeCtrl.AppendToolButton(1, "打印", 6);
		SOAOfficeCtrl.AppendToolButton(2, "打印预览", 7);
		SOAOfficeCtrl.AppendToolButton(3, "页面设置", 0);
		SOAOfficeCtrl.AppendToolButton(4, "-");
		SOAOfficeCtrl.AppendToolButton(5, "另存到本机", 1);
		SOAOfficeCtrl.AppendToolButton(6, "-");
		SOAOfficeCtrl.AppendToolButton(7, "全屏/还原", 4);
		
		handelRequest();
	</script>
	<script language="Javascript" event="OnDocumentClosed()" for="SOAOfficeCtrl">
	</script>
	<script language="Javascript" event="OnUserMenuClick(index, caption)" for="SOAOfficeCtrl">
		// 添加自定义菜单项事件响应
	</script>
	<script language="Javascript" event="OnCustomToolBarClick(index, caption)" for="SOAOfficeCtrl">
		// 添加自定义工具栏按钮事件响应
		if(index == 1) ShowDialog(4);
		if(index == 2) PrintPreview();
		if(index == 3) ShowDialog(5);
		if(index == 5) ShowDialog(2);
		if(index == 7) FullScreen = !FullScreen;
	</script>
	<table cellSpacing="0" cellPadding="0" width="100%" border="0">
		<tbody> 
			<tr valign="top" align="center">
				<td height="685">
					<span id="WEBWORD_object">
					<!-- 引用控件的代码 -->
					<object id="SOAOfficeCtrl" codeBase="../../lib/ZSOffice.ocx#version=2,0,0,1" height="100%" width="100%" classid="clsid:AD06827C-D92F-4648-B880-138AF11E8A13" VIEWASTEXT>
						<%--<param name="MainStyle" value="2">
						<param name="BorderStyle" value="0">--%>
						<span STYLE="color:red">本机尚未安装卓正OFFICE组件,请安装浏览器上方黄色提示条或弹出提示框中的卓正OFFICE组件。</span>
					</object>
					</span>
				</td>
			</tr>
		</tbody>
	</table>
</body>
</html>

excel截图,注意我标红位置和代码中的对应位置

在jsp中需要导入的excel工具类ZSExcelUtil.java

import javax.servlet.jsp.PageContext;

import SOAOfficeX.*;

public class ZSExcelUtil {
    private ExcelResponse SOAExcel;
    private ExcelResSheet sheet;
    private SOAOfficeCtrl SOACtrl;
    
    public ZSExcelUtil() {
    	try {
	    	SOAExcel = new ExcelResponse();
	    	SOAExcel.DisableSheetDoubleClick = true;
	    	SOAExcel.DisableSheetRightClick = true;
	    	SOAExcel.DisableSheetSelection = true;
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    }

    public ExcelResSheet getSheet() {
        return sheet;
    }

    public void setSheet(ExcelResSheet sheet) {
        this.sheet = sheet;
    }

    public ExcelResponse getSOAExcel() {
        return SOAExcel;
    }

    public void setSOAExcel(ExcelResponse excel) {
        SOAExcel = excel;
    }

    public SOAOfficeCtrl getSOACtrl(PageContext pageContext,ExcelResponse SOAExcel) {
		try {
		    SOACtrl = new SOAOfficeCtrl(pageContext);
		    SOACtrl.Server = pageContext.getRequest().getServerName();
		    SOACtrl.ServerPort = "4357";	//服务端口
		    SOACtrl.MainStyle = 2;
		    SOACtrl.Toolbars = false; 
		    SOACtrl.Menubar = false;
		    SOACtrl.Caption = "";
		    SOACtrl.Titlebar = false;	//隐藏、显示标题栏
		    SOACtrl.assign(SOAExcel); 
		} catch(Exception e) {
		    e.printStackTrace();	
		}
        return SOACtrl;
    }

    public void setSOACtrl(SOAOfficeCtrl ctrl) {
        SOACtrl = ctrl;
    }
    
    public void openSheet(String sheetName) {
    	try {
			sheet = SOAExcel.openSheet(sheetName);
		} catch (Exception e) {
			e.printStackTrace();
		}
    	sheet.setFormMode(true);
    }
}

 

这篇日志写的比较笼统,应该会有疏漏的地方,如果你作为教程来看的话,应该有很多地方需要你自己去探索,你也可以联系我。

 

© 著作权归作者所有

共有 人打赏支持
Pig-man
粉丝 19
博文 61
码字总数 46911
作品 0
青浦
程序员
PageOffice如何显示/隐藏Word文档中的标尺

在线打开并使用Word文档时,我们经常会需要使用打开的Word文档中,顶部的标尺来设置页面的边距、对齐位置等。这一操作,可以通过工具栏中“视图”→“标尺”选项的是否勾选来决定是否显示标尺...

yert ⋅ 2013/04/25 ⋅ 0

JAVA编程导入Word文件到数据区域,实现多个word文件合并

在开发项目时,如何通过后台编程把多个Word文档合并到一起呢,这就需要借助PageOffice开发平台中的数据区域了。 具体实现步骤如下: 第一步:拷贝文件到WEB项目的“WEB-INF/lib”目录下。拷贝...

yert ⋅ 2013/04/24 ⋅ 0

PageOffice实现js执行在线编辑时Word文档中的宏命令

在对Word文档进行操作时有时会需要执行某些宏命令,但在系统中,若要执行宏命令,如果依然通过创建宏、编写宏、执行宏,来实现某些功能就有些麻烦了。为此,我通过下面的一个示例演示一下如何...

yert ⋅ 2013/05/02 ⋅ 0

java调用PageOffice生成word

一、在开发OA办公或与文档相关的Web系统中,难免会遇到动态生成word文档的需求,为了解决工作中遇到导出word文档的需求,前一段时间上网找了一些资料,在word导出这方面有很多工具可以使用,...

山里的红杏 ⋅ 05/08 ⋅ 0

Asp.net下C#调用Word功能的实例与总结

本文通过一个实用例子完整演示了如何使用C#在ASP.NET里调用Word、自动化Word,并且总结了实际应用中发现的问题,最后提出了有效的解决方案。 关键词:ASP.NET; C#; Word; 自动化; VBA; COM;...

yert ⋅ 2013/04/16 ⋅ 0

java操作excel文件的两种方案

 微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。在我们实际开发企业办公系统的过程中,常...

山里的红杏 ⋅ 05/11 ⋅ 0

Java动态生成word文档(图文并茂)

很多情况下,软件开发者需要从数据库读取数据,然后将数据动态填充到手工预先准备好的Word模板文档里,这对于大批量生成拥有相同格式排版的正式文件非常有用,这个功能应用PageOffice的基本动...

山里的红杏 ⋅ 05/07 ⋅ 0

Java GC机制及原理 项目实际遇到GC问题解决思路和经验总结

1.什么是GC及基础知识介绍 GC(Garbage Collection) 简称垃圾收集 垃圾回收,JVM内存区域分为: 1.在方法区中(Hotspot 永久代),存储了每个类的信息(包括类的名称、方法信息、字段信息)、静...

陈小扁 ⋅ 2016/08/04 ⋅ 1

c#winform开发启示录(创世纪新篇)

c#winform可以实现许多软件项目,包括webbrowser等等。 c#语言包括许多开发框架,如Winform开发框架、WCF开发框架、混合式开发框架,以及相关的模块,包括权限管理、字典管理模块、附件管理、...

crossmix ⋅ 2015/10/29 ⋅ 0

Python学习小白必备书籍以及源码下载、代码求助三大网站

Python小白开发入门必备的3本书籍,除了书籍小U还整理了5个程序员们常用的资源网站。 入门书籍一 《Python for data analysis》 这本书涵盖了ipython notebook、Numpy、Scipy和Pandas包的使用...

柯西带你学编程 ⋅ 05/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 10分钟前 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 29分钟前 ⋅ 0

a href="#"

<a href="#">是链接到本页,因为你有的时候需要有个链接的样式,但是又不希望他跳转,这样写,你可以把这个页面去试试

颖伙虫 ⋅ 36分钟前 ⋅ 0

js模拟栈和队列

栈和队列 栈:LIFO(先进后出)一种数据结构 队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。 2....

LIAOJIN1 ⋅ 36分钟前 ⋅ 0

180619-Yaml文件语法及读写小结

Yaml文件小结 Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在J...

小灰灰Blog ⋅ 45分钟前 ⋅ 0

IEC60870-5-104规约传送原因

1:周期循环2:背景扫描3:自发4:初始化5:请求6:激活7:激活确认8:停止激活9:停止激活确认10:激活结束11:远程命令引起的返送信息12:当地命令引起的返送信息13:文件传送20:响应总召...

始终初心 ⋅ 58分钟前 ⋅ 0

【图文经典版】冒泡排序

1、可视化排序过程 对{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的可视化动态过程如下 2、代码实现    public void contextLoads() {// 冒泡排序int[] a = { 6, 5, 3, 1, 8, 7, 2, ...

pocher ⋅ 今天 ⋅ 0

ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass ⋅ 今天 ⋅ 0

IDEA反向映射Mybatis

1.首先在pom文件的plugins中添加maven对mybatis-generator插件的支持 ` <!-- mybatis逆向工程 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-ma......

lichengyou20 ⋅ 今天 ⋅ 0

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出当前的物理卷 pvremo...

Linux_老吴 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部