• 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();

  • 相关阅读:
    JS日期显示格式 yyyy-MM-dd hh:mm:ss
    Html.Partial和Html. RenderPartial
    $.ajax()详解
    B/S 类项目改善
    yaml
    跟我学SpringMVC目录汇总贴、PDF下载、源码下载
    全网最全ASP.NET MVC 教程汇总
    持续集成实践
    http://blog.jobbole.com/50603/#comment-153933
    Java代码优化(转)
  • 原文地址:https://www.cnblogs.com/hcf-0320/p/4218597.html
Copyright © 2020-2023  润新知