zoukankan      html  css  js  c++  java
  • ASP.Net控制不同的人编辑word文档中不同的可编辑区域

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

    2010-10-15 11:43238人阅读评论(0)收藏举报

    网页来源:http://blog.csdn.net/coco99/article/details/5942895 

     

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

    1.项目目的

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

    2.解决思路

        利用SOAOffice的WordResponse对象提供的方法来实现。关于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();

  • 相关阅读:
    Json对象与Json字符串互转(4种转换方式)
    Web.config配置文件详解
    jQuery BlockUI Plugin Demo 6(Options)
    jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
    jQuery BlockUI Plugin Demo 4(Element Blocking Examples)
    jQuery BlockUI Plugin Demo 3(Page Blocking Examples)
    jQuery BlockUI Plugin Demo 2
    <configSections> 位置引起的错误
    关于jQuery的cookies插件2.2.0版设置过期时间的说明
    jQuery插件—获取URL参数
  • 原文地址:https://www.cnblogs.com/hcf-0320/p/4218597.html
Copyright © 2011-2022 走看看