一个Asp.net下word在线编辑、全文关键字搜索的完整示例(包含源代码)

本文演示了如何在线编辑、保存word文档,并搜索含有关键字的文档。
1.项目目的
随着技术的发展,人们的需求也随之提高。Office文件的在线处理也越来越受到人们的关注。SOAOffice中间件无疑成了Office文件在线处理的得力助手。本文就是通过使用SOAOffice中间件,实现对本地word文档的在线处理,并搜索、显示含有关键字的文档。
2.解决思路
我们首先对文档进行在线编辑,并保存。保存的时候,将文档纯文本内容存入数据库,以备搜索时使用。
要获取文档的纯文本,在我们能够想出来的方法中,一般都比较复杂,而且效率也不高,但是利用SOAOffice的DocText属性却能轻而易举的实现。我们将由DocText属性获取的纯文本赋值给input隐藏域,然后在保存文档的页面中通过SOAOffice的RequestFormField(String FieldName)方法获取input隐藏域的值,然后将此值存入到数据库中。这样就实现了获取文档纯文本并将其保存至数据库中的功能。在搜索时,我们就可以利用数据库的这个字段来实现关键字搜索功能。
然后是关键字搜索功能,我们通过数据库中存储文档纯文本的字段,利用sql语句将包含关键字的文档搜索出来。
实现文档在线编辑的关键是利用SOAOffice,所以我们要确保引用SOAOFFICE中间件的服务器端.NET组件SOAOfficeX。本例中将SOAOfficeX.dll放在了bin文件夹下。

3.关键步骤
(1)保存文档纯文本:我们在文档编辑页面word1.aspx中利用SOAOffice的AppendToolButton(Index, Caption, IconIndex)方法添加自定义的“保存”按钮,同时禁掉word自带的“保存”按钮以及快捷键“Ctrl+S”,这里利用了SOAOffice的EnableFileCommand(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控件的值:在保存页面里通过SOAOffice的RequestFormField(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.cs的Page_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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为ASP.NET项目的开发者,在应对用户的Word、Excel文档时,您是否迫切希望Visual Studio工具箱里能有现成的Word、Excel标准ASP.NET控件可用就太好了?现在梦想已经成真,想在网页上显示编辑Word、Excel文档并且调用微软Office的强大功能,就直接从工具箱拖动一个PageOffice控件到Web页面上就可以了,就和使用常用的TextBox控件一样简单方便。 PageOffice是什么? PageOffice for ASP.NET是一款非常优秀的专业的集成微软OFFICE功能的ASP.NET控件平台,能够帮助Web开发人员轻松实现在网页中嵌入运行微软Office的特殊功能。PageOffice把微软复杂的Office编程接口(COM API) 有效地整合于 ASP.NET 环境,通过简化的.NET类库接口为开发者提供了在Web项目里获得Office众多强大功能的机会,并且能够同时利用来自 .NET Framework 的开发效率和软件功能。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和用户输入提交的高级复杂功能。只要集成PageOffice,您将能够轻松应对在Web项目开发中遇见的绝大部分和Office文档有关的功能和难题。您只需把精力集中在项目业务逻辑上,Office技术问题就交给PageOffice实现解决吧。 PageOffice除了提供Word/Excel动态数据填充,格式控制,Word/Excel用户输入提交,Word/Excel/PowerPoint/WPS等Office文档的在线打开、只读浏览、编辑、保存等功能外,还给在线协同办公提供了强大的支持功能:可编辑区域控制,强制痕迹保留,并发编辑控制,手写批注,手写签名,圈阅签字,电子印章、动态模板套红等。 专业的MSDN风格的开发帮助,上百的示例代码,确保您的开发效率事半功倍。 运行环境 服务器端:Windows2003、Windows2008、Windows2012及Windows XP、Windows7、Windows8等(包括64位版本);.Netframework2.0及以上版本。 客户端:Windows XP、Windows Vista、Windows7、Windows8及以上版本(包括64位版本);Microsoft Office2003、2007、2010、2013;IE 6.0、7.0、8.0、9.0、10.0。 名称:PageOffice for ASP.NET专业版 2.0 下载:http://www.zhuozhengsoft.com/down/PageOffice_ASP.NET.rar 大小:13.8MB 版本:专业版 2.0

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值