ASP.Net控制不同的人编辑word文档中不同的可编辑区域的完整示例

 

       本文演示了如何使用C#ASP.NET里调用Word限制用户只能编辑word文档中自己有权编辑的区域

1.项目目的

       演示使用不同的用户登录系统,打开同一个文件(不必同时打开),可以编辑的区域不一样,每个人都有属于自己的编辑区域。

2.解决思路

       利用SOAOfficeWordResponse对象提供的方法来实现。关于SOAOffice这里只简单的说一下:

       SOAOffice可以实现在线编辑、保存服务器上的文档(当然这是基本的功能了),还支持手写、套红、盖章(与本文关系不大不细说了);下面重点说一下SOAOffice支持对Word中书签赋值功能。

       先了解一个SOAOffice中的概念“数据区域 DataRegion)”:

       数据区域(DataRegion)――在SOAOffice的概念里“SOA_”开头的书签。因为WordResponse对象提供的DefineDataRegion方法定义的数据区域,插入到word模板中去就是“SOA_”开头的书签,所以这个数据区域只是SOAOffice中的一个概念,本质上就是“SOA_”开头的书签。DataRegion有两个属性:

         Value: 给数据区域赋值,举例:比方说word文件中有一个书签为:SOA_Name,那么使用WordResponse对象给这个书签赋值的话,OpenDataRegion(“Name”).Value = “XXX”;注意不需要写“SOA_”开头。

         NeedSubmit: 设置这个数据区域是不是可以编辑、提交(提交对于这次说的功能没什么关系就不细说了)。OpenDataRegion(“Name”). NeedSubmit=true;那么书签SOA_Name就是可以编辑的。

        

         这个NeedSubmit属性才是这次使用的重点,因为WordResponse对象的FormMode = true的时候,只有NeedSubmit = true的数据区域才是可以编辑的,没有设置过NeedSubmit = true的数据区域和其他的正文内容都是只读的。

       实现不同的人编辑word文档中不同的编辑区域的关键是利用word中的书签去标记编辑区域(数据区域),然后用数据区域的NeedSubmit属性去控制这个区域是不是可以编辑。所以我们要确保引用SOAOFFICE中间件的服务器端.NET组件SOAOfficeX。本例中将SOAOfficeX.dll放在了bin文件夹下。

 

3.关键步骤  

           string userName = Request.Form["user"]; //假设这是你的登录用户

        SOAOfficeX.WordResponse SOAWord = new SOAOfficeX.WordResponse();

        SOAWord.FormMode = true; //设置FormMode = true

        SOAWord.DisableWindowRightClick = true;

 

              // 根据登录的用户userName不同,设置不同的可编辑区域

        if (userName == "zhangsan")

        {

            SOAOfficeX.IWordResDataRegion dataRegion = SOAWord.OpenDataRegion("zhangsan1");

            dataRegion.NeedSubmit = true;

 

            dataRegion = SOAWord.OpenDataRegion("zhangsan2");

            dataRegion.NeedSubmit = true;

        }

        if (userName == "lisi")

        {

            SOAOfficeX.IWordResDataRegion dataRegion = SOAWord.OpenDataRegion("lisi1");

            dataRegion.NeedSubmit = true;

 

            dataRegion = SOAWord.OpenDataRegion("lisi2");

            dataRegion.NeedSubmit = true;

        }

4.示例程序架构

       ----Default.aspx     // 模拟登录页

       ----simple.aspx.cs  // 打开文件

      

       ----SaveDoc.aspx  //保存文档的页面

      

       doc/                      //存储文档的目录

 

 

5.代码编写

       首先是实现文档在线编辑功能的页面:word1.aspx。要实现文档的在线编辑功能,我们首先需要安装SOAOffice的客户端,因为我们需要在保存文档的时候,将编辑后的文档内容存入到数据库中,所以就需要禁掉word自带的“保存”功能,使用自定义的“保存功能。前台Html添加的代码如下:

*******************************************************************************

<!--客户端代码开始-->

    <SCRIPT language="JavaScript" event="OnInit()" for="SOAOfficeCtrl">

              // 控件打开文档前触发,用来初始化界面样式

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnDocumentOpened(str, obj)" for="SOAOfficeCtrl">

              // 控件打开文档后立即触发,添加自定义菜单,自定义工具栏,禁止打印,禁止另存,禁止保存等等

              bDocOpen = true;

              SOAOfficeCtrl.AppendToolButton(1, "保存", 1);

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnDocumentClosed()" for="SOAOfficeCtrl">

              bDocOpen = false;

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnUserMenuClick(index, caption)" for="SOAOfficeCtrl">

              // 添加您的自定义菜单项事件响应

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnCustomToolBarClick(index, caption)" for="SOAOfficeCtrl">

              // 添加您的自定义工具栏按钮事件响应

              if (index==1)  SOAOfficeCtrl.WebSave();

       </SCRIPT>   

       <!--   OBJECT标签,客户端控件引用    -->

       <OBJECT id="SOAOfficeCtrl" codeBase="SOAOffice.ocx#version=8,1,0,6" height="100%" width="100%"

           data="" classid="clsid:83171BA4-BDCA-42a8-BE44-745ABF36EB7E" VIEWASTEXT>

           <div align="center" STYLE="color:red;">

           本机尚未安装SOAOFFICE客户端控件,请安装浏览器上方黄色提示条或弹出提示框中的SOAOFFICE客户端控件。</div>

           </OBJECT>

    <!--客户端代码结束-->

*******************************************************************************

具体代码如下:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="simple.aspx.cs" Inherits="_Default" %>

 

 

 

<html>

<head id="Head1" runat="server">

    <title>精简代码</title>

   

</head>

<body>

      

              <form id="formData"  runat="server">

                     <FONT face="宋体">

<!--**************   SOAOFFICE 客户端代码开始    ************************-->

       <SCRIPT language="JavaScript" event="OnInit()" for="SOAOfficeCtrl">

              // 控件打开文档前触发,用来初始化界面样式

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnDocumentOpened(str, obj)" for="SOAOfficeCtrl">

              // 控件打开文档后立即触发,添加自定义菜单,自定义工具栏,禁止打印,禁止另存,禁止保存等等

              bDocOpen = true;

              SOAOfficeCtrl.AppendToolButton(1, "保存", 1);

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnDocumentClosed()" for="SOAOfficeCtrl">

              bDocOpen = false;

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnUserMenuClick(index, caption)" for="SOAOfficeCtrl">

              // 添加您的自定义菜单项事件响应

       </SCRIPT>

       <SCRIPT language="JavaScript" event="OnCustomToolBarClick(index, caption)" for="SOAOfficeCtrl">

              // 添加您的自定义工具栏按钮事件响应

              if (index==1)  SOAOfficeCtrl.WebSave();

       </SCRIPT>   

       <!--   OBJECT标签,客户端控件引用    -->

       <OBJECT id="SOAOfficeCtrl" codeBase="SOAOffice.ocx#version=8,1,0,6" height="100%" width="100%"

           data="" classid="clsid:83171BA4-BDCA-42a8-BE44-745ABF36EB7E" VIEWASTEXT>

           <div align="center" STYLE="color:red;">

           本机尚未安装SOAOFFICE客户端控件,请安装浏览器上方黄色提示条或弹出提示框中的SOAOFFICE客户端控件。</div>

           </OBJECT>

<!--**************   SOAOFFICE 客户端代码结束    ************************-->

 

 

                     </FONT>

              </form>

       </body>

</html>

 

接着是simple.aspx的后台代码simple.aspx.cs,因为要利用SOAOffice中间件,所以我们需要在它里面添加服务器端代码,主要是用来设置文档的打开和设置可编辑区域。服务器端代码如下:

*******************************************************************************

// --------------SOAOFFICE 服务器端编程开始---------------------------//

 

        // 首先确保引用SOAOFFICE中间件的服务器端.NET组件SOAOfficeX

        // SOAOfficeX.dll 在本示例代码的 bin 文件夹下

 

        string userName = Request.Form["user"];

        SOAOfficeX.WordResponse SOAWord = new SOAOfficeX.WordResponse();

        SOAWord.FormMode = true;

        SOAWord.DisableWindowRightClick = true;

 

        if (userName == "zhangsan")

        {

            SOAOfficeX.IWordResDataRegion dataRegion = SOAWord.OpenDataRegion("zhangsan1");

            dataRegion.NeedSubmit = true;

 

            dataRegion = SOAWord.OpenDataRegion("zhangsan2");

            dataRegion.NeedSubmit = true;

        }

        if (userName == "lisi")

        {

            SOAOfficeX.IWordResDataRegion dataRegion = SOAWord.OpenDataRegion("lisi1");

            dataRegion.NeedSubmit = true;

 

            dataRegion = SOAWord.OpenDataRegion("lisi2");

            dataRegion.NeedSubmit = true;

        }

 

 

        SOAOfficeX.SOAOfficeCtrl SOACtrl = new SOAOfficeX.SOAOfficeCtrl();

 

        // 设置SOAOFFICE中间件服务页面

        SOACtrl.ServerURL = "soaservice/soaserv.aspx";

        SOACtrl.SaveDocURL = "savedoc.aspx";

 

        SOACtrl.MenubarStyle = SOAOfficeX.soaMenubarStyle.Center1;

        SOACtrl.Assign(SOAWord);

        SOACtrl.Toolbars = false;

 

        SOACtrl.WebOpen("doc/test.doc", SOAOfficeX.soaWorkMode.docNoRevision, "用户名", "Word.Document");

        // --------------SOAOFFICE 服务器端编程结束---------------------------//

*******************************************************************************

 

SaveDoc.aspx页的代码,前台不需要什么代码,后台代码如下:*******************************************************************************

SOAOfficeX.SaveDocObj SOAObj = new SOAOfficeX.SaveDocObj();

SOAObj.SaveToFile(Server.MapPath("doc//") + SOAObj.FileName);

SOAObj.ReturnOK();

*******************************************************************************

 

本示例代码在VS2008下编译通过。本文完整的示例代码在下面的地址可以下载:

http://ishare.iask.sina.com.cn/f/10125469.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SOAOFFICE - 微软 OFFICE 中间件 SOAOffice 中间件是北京科翰软件为微软OFFICE量身打造的Web中间件,是Web调用Office、存取Office数据的必备中间件SOAOffice中间件服务器端数据组件和客户端显示控件构成。 SOAOffice 完全抛弃了传统利用Office服务器端自动化技术存取文档数据的种种弊端和缺陷,采用独创的专利技术构建了一个功能强大、简单易用的微软Office中间件平台,平台提供标准的.net和java组件接口,不但能够在线(浏览器页面)打开、编辑、保存Office文档,而且开发人员还能够以简洁的代码快速的将数据库数据动态填充到Office文档指定位置,并且也能够从Office文档提取指定位置的数据保存到数据库。 SOAOffice提供这些强大功能的同时,服务器端并不需要安装运行Office软件。通过SOAOffice,在Web世界里,难以驯服的Word/Excel就变成了普通的、熟悉的、服务器端可调用的.Net组件、Java组件、ASP组件、PHP组件,开发人员再也不用研究复杂的Word/Excel COM自动化细节、学习复杂的VBA语法调用,也不用去应对Word/Excel死进程、系统稳定运行的问题。开发人员能够节省宝贵的精力和时间,把它投放到更重要的业务逻辑和系统架构上,而控制Office的具体技术细节交给SOAOffice去做。 SOAOffice除了提供Word/Excel动态数据填充,Word/Excel数据导入导出,Word/Excel/PowerPoint等Office文档的在线打开、编辑、保存,权限控制,只读控制等功能外,还给在线办公内置了强大的支持功能:强制痕迹保留,手写批注,圈阅签字,手写签名,电子印章、数字签名、模板套红、一键套红等。 科翰软件是国内唯一的微软Office中间件开发商,拥有卓越的自主研发实力和独创的专利技术,其产品SOAOffice不仅畅销国内,而且还远销欧美国际市场,其世界500强美国Dover集团、可口可乐 Coca-Cola、石油、石化等都是SOAOffice产品的忠实客户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值