在项目中经常会遇到生成一些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);
}
}
这篇日志写的比较笼统,应该会有疏漏的地方,如果你作为教程来看的话,应该有很多地方需要你自己去探索,你也可以联系我。