一个Asp.net下word在线编辑、全文关键字搜索的完整示例

本文介绍了一种使用SOAOffice中间件在线编辑Word文档的方法,并实现了文档内容的数据库存储及基于关键字的搜索功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

       本文演示了如何在线编辑、保存word文档,并搜索含有关键字的文档。

1.项目目的

       随着技术的发展,人们的需求也随之提高。Office文件的在线处理也越来越受到人们的关注。SOAOffice中间件无疑成了Office文件在线处理的得力助手。本文就是通过使用SOAOffice中间件,实现对本地word文档的在线处理,并搜索、显示含有关键字的文档。

2.解决思路

       我们首先对文档进行在线编辑,并保存。保存的时候,将文档纯文本内容存入数据库,以备搜索时使用。

要获取文档的纯文本,在我们能够想出来的方法中,一般都比较复杂,而且效率也不高,但是利用SOAOfficeDocText属性却能轻而易举的实现。我们将由DocText属性获取的纯文本赋值给input隐藏域,然后在保存文档的页面中通过SOAOfficeRequestFormField(String FieldName)方法获取input隐藏域的值,然后将此值存入到数据库中。这样就实现了获取文档纯文本并将其保存至数据库中的功能。在搜索时,我们就可以利用数据库的这个字段来实现关键字搜索功能。

然后是关键字搜索功能,我们通过数据库中存储文档纯文本的字段,利用sql语句将包含关键字的文档搜索出来。

       实现文档在线编辑的关键是利用SOAOffice,所以我们要确保引用SOAOFFICE中间件的服务器端.NET组件SOAOfficeX。本例中将SOAOfficeX.dll放在了bin文件夹下。

 

3.关键步骤   

       1)保存文档纯文本:我们在文档编辑页面word1.aspx中利用SOAOfficeAppendToolButton(Index, Caption, IconIndex)方法添加自定义的“保存”按钮,同时禁掉word自带的“保存”按钮以及快捷键“Ctrl+S”,这里利用了SOAOfficeEnableFileCommand(CommandType)方法来实现。代码如下:

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

<script type="text/javascript" event="OnDocumentOpened(str,obj)" for="SOAOfficeCtrl">

// 控件打开文档后立即触发,添加自定义菜单,自定义工具栏

// 禁止打印,禁止另存,禁止保存等等

bDocOpen = true;

document.all("SOAOfficeCtrl").EnableFileCommand(3) = false;

//添加自定义工具栏

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

</script>

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

然后添加自定义“保存”按钮的响应函数,我们利用SOAOffice提供的DocText属性,获取打开的文档的纯文本,并将其保存到input隐藏域控件中。代码如下:

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

<script type="text/javascript"

event="OnCustomToolBarClick(index, caption)" for="SOAOfficeCtrl">

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

if (index == 1)

{

document.getElementById("inputText").value = document.all("SOAOfficeCtrl").DocText;

SOAOfficeCtrl.WebSave();

alert("恭喜你保存成功!");

}

</script>

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

2)获取input控件的值:在保存页面里通过SOAOfficeRequestFormField(String FieldName)方法获取input的值,代码如下:

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

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

strText = SOAObj.RequestFormField("inputText");

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

4.示例程序架构

       ----FileManage.aspx      //显示文档列表和搜索关键字的页面

       ----FileManage.aspx.cs

      

       ----word1.aspx              //实现文档在线编辑的页面

       ----word1.aspx.cs

      

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

       ----SaveDoc2.aspx.cs

      

       doc/                             //存储文档的目录

 

5.代码编写

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

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

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

    <script type="text/javascript" event="OnInit()" for="SOAOfficeCtrl">

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

    </script>

    <script type="text/javascript" event="OnDocumentOpened(str,obj)" for="SOAOfficeCtrl">

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

    bDocOpen = true;

    document.all("SOAOfficeCtrl").EnableFileCommand(3) = false;

    //添加自定义工具栏

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

    </script>

    <script type="text/javascript" even="OnDocumentClosed()" for="SOAOfficeCtrl">

    bDocOpen = false;

    </script>

    <script type="text/javascript" event="OnUserMenuClick(index, caption)" for="SOAOfficeCtrl">

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

    </script>

    <script type="text/javascript" event="OnCustomToolBarClick(index, caption)" for="SOAOfficeCtrl">

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

    if (index == 1)

    {

        document.getElementById("inputText").value = document.all("SOAOfficeCtrl").DocText;

        SOAOfficeCtrl.WebSave();

        alert("恭喜你保存成功!");

    }

    </script>

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

    <object id="SOAOfficeCtrl" codebase="SOAOffice.ocx#version=8,1,0,9" 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="word1.aspx.cs" Inherits="word1" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>word1</title>

</head>

<body>

    <form id="formdata" method="post" name="formdata">

        <input id="inputText" name="inputText" type="text" style="width:50%; visibility: hidden;" />

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

    <script type="text/javascript" event="OnInit()" for="SOAOfficeCtrl">

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

    </script>

    <script type="text/javascript" event="OnDocumentOpened(str,obj)" for="SOAOfficeCtrl">

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

    bDocOpen = true;

    document.all("SOAOfficeCtrl").EnableFileCommand(3) = false;

//添加自定义工具栏

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

    </script>

    <script type="text/javascript" even="OnDocumentClosed()" for="SOAOfficeCtrl">

    bDocOpen = false;

    </script>

    <script type="text/javascript" event="OnUserMenuClick(index, caption)" for="SOAOfficeCtrl">

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

    </script>

    <script type="text/javascript" event="OnCustomToolBarClick(index, caption)" for="SOAOfficeCtrl">

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

    if (index == 1)

    {

      document.getElementById("inputText").value = document.all("SOAOfficeCtrl").DocText;

      SOAOfficeCtrl.WebSave();

      alert("恭喜你保存成功!");

    }

    </script>

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

    <object id="SOAOfficeCtrl" codebase="SOAOffice.ocx#version=8,1,0,9" height="100%"

     width="100%" data="" classid="clsid:83171BA4-BDCA-42a8-BE44-745ABF36EB7E" viewastext>

    <div align="center" style="color:Red">

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

    </div>

    </object>

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

    </form>

</body>

</html>

 

 

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

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

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

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

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

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

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

SOACtrl.SaveDocURL = "SaveDoc2.aspx";

SOACtrl.WebOpen("doc/" + strDocName, SOAOfficeX.soaWorkMode.docAdmin, "someone", "Word.Document");

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

具体实现如下:

定义两个变量:

public string strDocID; //文档的ID

private string strDocName;//文档的名字(包括文件扩展名)

接着只需在Page_Load(object sender, EventArgs e)函数中添加如下代码即可:

if (Request.QueryString["ID"] == null)

{

Response.Redirect("FileManage.aspx");

}

strDocID = Request.QueryString["ID"];

string sql = "select * from DocRecord where ID=" + strDocID + "";

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

               Server.MapPath("demodata/soademo.mdb");

OleDbConnection con = new OleDbConnection(connString);

OleDbCommand cmd = new OleDbCommand(sql, con);

con.Open();

cmd.CommandType = CommandType.Text;

OleDbDataReader Reader = cmd.ExecuteReader();

if (Reader.Read())

{

  strDocName = Reader["Doc_Name"].ToString();

}

Reader.Close();

con.Close();

 

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

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

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

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

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

SOACtrl.SaveDocURL = "SaveDoc2.aspx";

SOACtrl.WebOpen("doc/" + strDocName, SOAOfficeX.soaWorkMode.docAdmin, "someone", "Word.Document");

 

然后是FileManage.aspx,此页面主要实现搜索包含关键字的文档和显示文档列表的功能。其中关于搜索,我们可以利用sql查询语句来实现,您可以这样写sql语句:“select * from DocRecord where [Doc_Text] like '%" + strKeywd + "%'”,其中“DocRecord”是表名,“[Doc_Text]”是指表中存储文档纯文本的字段名,“strKeywd”就是我们输入的关键字。

       最后就是保存文档页面SaveDoc2.aspx,它实现了两个功能,一是将编辑后的文档的内容保存到数据库中,二是将编辑后的文档保存到doc/目录下。具体实现步骤如下:

首先定义两个变量:

private string strText;//文档的内容

private string strDocID;//文档的ID

然后您只需要在SaveDoc2.aspx.csPage_Load(object sender, EventArgs e)函数中添加下面的代码即可:

if (Request.QueryString["DocID"] == null)

{

return;

}

strDocID = Request.QueryString["DocID"].ToString();

int nDocID = Int32.Parse(strDocID);//防止非法字符

 

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

strText = SOAObj.RequestFormField("inputText");

 

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

                Server.MapPath("demodata/soademo.mdb");

OleDbConnection con = new OleDbConnection(connString);

OleDbCommand cmd = new OleDbCommand();

con.Open();

cmd.Connection = con;

cmd.CommandType = CommandType.Text;

cmd.CommandText = "UPDATE  DocRecord SET Doc_Text=@DocText WHERE ID=@DocID" ;

OleDbParameter paramDocID = new OleDbParameter("@DocID", OleDbType.Integer);

paramDocID.Value = nDocID;

cmd.Parameters.Add(paramDocID);

OleDbParameter paramDocText = new OleDbParameter("@DocText", OleDbType.VarChar);

paramDocText.Value = strText.ToString();

cmd.Parameters.Add(paramDocText);

cmd.ExecuteNonQuery();

con.Close();

              

SOAObj.SaveToFile(Server.MapPath("doc/") + SOAObj.FileName);   //这里的参数设置为物理路径(如:"d:/abc.doc"),表明保存文件到此路径下

SOAObj.ReturnOK();

 

通过这几个页面就可以轻松实现word文档的在线编辑、保存,以及搜索包含关键字的文档了。

本示例代码在VS2008下编译通过。本文完整的示例代码如下:

http://www.kehansoft.com/web/shared/democode/Full-TextRetrieval.rar

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值