java 实现不同用户编辑 word , excel 中的不同区域

1:需求

为了提高效率,希望多人可以同时编辑同一个文档,但是用户同时打开一个文件,会出现编辑保存文件相互覆盖的问题。所以pageoffice 提供了不同用户编辑不同区域的方法

2. 页面代码

(1)web.xml

<!-- PageOffice Begin -->
	<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>/sealsetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/posetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pageoffice.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/jquery.min.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pobstyle.css</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.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/loginseal.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/sealimage.zz</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>
	<!-- PageOffice End -->

(2)index.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<script type="text/javascript"
			src="<%=request.getContextPath()%>/jquery.min.js"></script>
		<script type="text/javascript"
			src="<%=request.getContextPath()%>/pageoffice.js" id="po_js_main"></script>
	</head>

	<body>
		<form id="form1" action="day5/SetWordDataRegionByUserName.jsp" method="post">
			<div style="text-align: center;">
				<div>
					请选择登录用户:
				</div>
				<br />
				<select name="userName">
					<option selected="selected" value="zhangsan">
						甲客户:zhangsan
					</option>
					<option value="lisi">
						乙客户:lisi
					</option>
				</select>
				<br />
				<br />
				<input type="submit" value="打开文件" />
				<br />
				<br />
				<div style="color: Red;">
					不同的用户登录后,在word文档中可以编辑的区域不同
				</div>
			</div>
		</form>
<br /><br /><br /><br /><br /><br />
		<form id="form2" action="day5/SetExcelDataRegionByUserName.jsp" method="post">
			<div style="text-align: center;">
				<div>
					请选择登录用户:
				</div>
				<br />
				<select name="userName">
					<option selected="selected" value="zhangsan">
						A部门经理
					</option>
					<option value="lisi">
						B部门经理
					</option>
				</select>
				<br />
				<br />
				<input type="submit" value="打开文件" />
				<br />
				<br />
				<div style="color: Red;">
					不同的用户登录后,在excel文档中可以编辑的单元格区域不同
				</div>
			</div>
		</form>
	</body>
</html>

 (3):SetWordDataRegionByUserName.jsp 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page
	import="com.zhuozhengsoft.pageoffice.*,com.zhuozhengsoft.pageoffice.wordwriter.*"%>
<%
	String userName = request.getParameter("userName");
	//***************************卓正PageOffice组件的使用********************************
	WordDocument doc = new WordDocument();
	//打开数据区域
	DataRegion dTitle = doc.openDataRegion("PO_title");
	//给数据区域赋值
	dTitle.setValue("某公司第二季度产量报表");
	//设置数据区域可编辑性
	dTitle.setEditing(false);//数据区域不可编辑

	DataRegion dA1 = doc.openDataRegion("PO_A_pro1");
	DataRegion dA2 = doc.openDataRegion("PO_A_pro2");
	DataRegion dB1 = doc.openDataRegion("PO_B_pro1");
	DataRegion dB2 = doc.openDataRegion("PO_B_pro2");

	//根据登录用户名设置数据区域可编辑性
	//A部门经理登录后
	if (userName.equals("zhangsan")) {
		userName = "A部门经理";
		dA1.setEditing(true);
		dA2.setEditing(true);
		dB1.setEditing(false);
		dB2.setEditing(false);
	}
	//B部门经理登录后
	else {
		userName = "B部门经理";
		dB1.setEditing(true);
		dB2.setEditing(true);
		dA1.setEditing(false);
		dA2.setEditing(false);
	}

	PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
	poCtrl.setWriter(doc);


	//设置服务器页面
	poCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须
	
	poCtrl.setMenubar(false);
	//设置文档打开方式
	poCtrl.webOpen("doc/test.doc", OpenModeType.docSubmitForm, userName);

%>
<!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;">
				<div class="flow4">
					<a href="index.jsp"> 返回登录页</a>
					<strong>当前用户:</strong>
					<span style="color: Red;"><%=userName%></span>
				</div>

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

	</body>
</html>

(4)SetExcelDataRegionByUserName.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.zhuozhengsoft.pageoffice.*, com.zhuozhengsoft.pageoffice.excelwriter.*"%>

<%
		String userName=request.getParameter("userName");
 		//***************************卓正PageOffice组件的使用********************************
 		PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
 		
        Workbook wb = new Workbook();
        Sheet sheet = wb.openSheet("Sheet1");
        Table tableA = sheet.openTable("C4:D6");
        Table tableB = sheet.openTable("C7:D9");

        tableA.setSubmitName("tableA");
        tableB.setSubmitName("tableB");
		
		
        //根据登录用户名设置数据区域可编辑性
        String strInfo = "";
        
        //A部门经理登录后
        if (userName.equals("zhangsan"))
        {
        	strInfo = "A部门经理,所以只能编辑A部门的产品数据";
        	 sheet.openCell("C5").setFormula("C4+D4");
            tableA.setReadOnly(false);
            tableB.setReadOnly(true);
        }
        //B部门经理登录后
        else
        {
        	strInfo = "B部门经理,所以只能编辑B部门的产品数据";
            tableA.setReadOnly(true);
            tableB.setReadOnly(false);
        }

        poCtrl.setWriter(wb);

		poCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须
        
        poCtrl.webOpen("doc/test.xls",OpenModeType.xlsSubmitForm, userName);
%>

<!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;">
				<div class="flow4">
					<a href="index.jsp"> 返回登录页</a>
					<strong>当前用户:</strong>
					<span style="color: Red;"><%=strInfo %></span>
				</div>

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


	</body>
</html>

3:演示效果

12125f4c32df2cbf0106a88e07d815b65ac.jpg

12e565213b881def0318a23b6859dcf77dd.jpg

 

cce1ffcb7706e4c49300bfbf9bb7f6c98e5.jpg

776f7995cdcbf18f253dc46614d671e1073.jpg

转载于:https://my.oschina.net/u/3507515/blog/2249495

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值