本文演示了如何word在线编辑、保存word文档,并搜索含有关键字的文档。
1.项目目的
随着技术的发展,人们的需求也随之提高。Office文件的在线处理也越来越受到人们的关注。PageOffice开发平台无疑为Office文件的在线处理打开了方便之门。本文就是通过使用PageOffice开发平台,实现对word在线编辑处理,并搜索、显示含有关键字的文档。
2.解决思路
我们首先对文档进行word在线编辑,并保存。保存的时候,将文档纯文本内容存入数据库,以备搜索时使用。
要获取文档的纯文本,以往的方法都比较复杂,而且效率也不高,但是利用PageOfficeFileSaver 对象的DocumentText属性却能轻而易举的实现。我们在保存页面获取该属性的值,然后将此值存入到数据库中,这样就实现了获取文档纯文本并将其保存至数据库中的功能。
然后是关键字搜索功能,我们通过数据库中存储Word文档纯文本的字段,利用sql语句将包含关键字的文档搜索出来。
实现文档在线编辑的关键是利用PageOffice开发平台,所以我们要确保VisualStudio.NET开发环境安装了PageOffice开发平台。

3.关键步骤

1)先安装PageOffice的服务器端的安装程序,之后在项目的根目录下添加pageoffice文件夹(在www.zhuozhengsoft.com网站的“下载中心”中可下载相应的压缩包,解压之后直接将PageOffice示例代码里的pageoffice文件夹拷贝到项目根目录下就可以了)。
2)保存文档纯文本:我们在文档编辑页面Edit.aspx中从VS工具箱里拖放一个PageOfficeCtrl控件,然后调用方法AppendToolButton(Caption, JsFunction, IconIndex)PageOfficeCtrl控件的自定义工具栏添加一个保存按钮。
*****************************************************************

后台代码如下:

//添加自定义工具栏按钮

  PageOfficeCtrl1.AddCustomToolButton("保存", "Save()",1);

前台的JS函数如下:
<scripttype="text/javascript">

functionSave() {

           document.getElementById("PageOfficeCtrl1").WebSave();

//document.getElementById("PageOfficeCtrl1").CustomSaveResult获取的是保存页面的返回值if(document.getElementById("PageOfficeCtrl1").CustomSaveResult == "ok")

               alert("保存成功");

else     alert(document.getElementById("PageOfficeCtrl1").CustomSaveResult);

       }

</script>

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

3)获取DocumentText属性的值:在保存页面里通过FileSaver对象获取,代码如下:
*****************************************************************
PageOffice.FileSaver fs = newPageOffice.FileSaver();

string content = fs.DocumentText;//获取DocumentText属性的值
*****************************************************************
4.示例程序架构
----FileManage.aspx //显示文档列表和搜索关键字的页面
----FileManage.aspx.cs

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

----SaveFile.aspx //保存文档的页面
---- SaveFile.aspx.cs
5.代码编写

首先是FileManage.aspx,此页面主要实现搜索包含关键字的文档和显示文档列表的功能。其中关于搜索,我们可以利用sql查询语句来实现,您可以这样写sql语句:“select * from word where Content like '%" + key + "%'”,其中“word”是表名,“Content”是指表中存储文档纯文本的字段名,“key”就是我们输入的关键字。
接着是实现文档在线编辑功能的页面:Edit.aspx。从VS工具箱里拖放一个PageOfficeCtrl控件,具体代码如下:

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

前台Edit.aspx页面代码如下:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Edit.aspx.cs"Inherits="SaveAndSearch_Edit"%>


<%@RegisterAssembly="PageOffice,Version=2.0.0.1, Culture=neutral, PublicKeyToken=1d75ee5788809228"Namespace="PageOffice"TagPrefix="po"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<headrunat="server">

<title></title>

<scripttype="text/javascript">

functionSave() {

           document.getElementById("PageOfficeCtrl1").WebSave();

//document.getElementById("PageOfficeCtrl1").CustomSaveResult获取的是保存页面的返回值

if(document.getElementById("PageOfficeCtrl1").CustomSaveResult== "ok")

               alert("保存成功");

else           alert(document.getElementById("PageOfficeCtrl1").CustomSaveResult);

       }

</script>

</head>

<body>

<formid="form1"runat="server">

<divstyle="width: auto; height: 700px;">

<po:PageOfficeCtrlID="PageOfficeCtrl1"runat="server"CustomToolbar="True"Menubar="False">

</po:PageOfficeCtrl>

</div>

</form>

</body>

</html>

然后是Edit.aspx的后台代码Edit.aspx.cs,具体实现代码如下:
*********************************************************************

protectedvoidPage_Load(object sender, EventArgs e)

{

//设置服务器页面

       PageOfficeCtrl1.ServerPage = "pageoffice/server.aspx";

if(Request.QueryString["id"] != null && Request.QueryString["id"].ToString().Trim().Length > 0)

       {

stringid = Request.QueryString["id"].ToString().Trim();

stringstrConn = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|demo_search.mdb";

stringsql = " select * from word where id= "+ id;

OleDbConnectionconn = newOleDbConnection(strConn);

OleDbCommandcmd = newOleDbCommand(sql,conn);

           conn.Open();

           cmd.CommandType = CommandType.Text;

OleDbDataReaderReader = cmd.ExecuteReader();

if(Reader.Read())

           {

stringfileName = "";

if(Reader["FileName"] != null && Reader["FileName"].ToString().Length> 0)

               {

                   fileName = Reader["FileName"].ToString().Trim() + ".doc";

               }

else

               {

                  Page.RegisterClientScriptBlock("","<script>alert('未获得文件名');</script>");

return;

               }


//添加自定义工具栏按钮

              PageOfficeCtrl1.AddCustomToolButton("保存", "Save()",1);

//设置保存页面

               PageOfficeCtrl1.SaveFilePage = "SaveFile.aspx?id=" + id;

//打开Word文档

              PageOfficeCtrl1.WebOpen(Server.MapPath("doc/")+ fileName, PageOffice.OpenModeType.docNormalEdit,"张佚名");

           }

           conn.Close();

       }

else

       {

           Page.RegisterClientScriptBlock("", "<script>alert('未获得文档的编号');</script>");

return;

       }

}

最后就是保存文档页面SaveFile.aspx,它实现了两个功能,一是将编辑后的文档的内容保存到数据库中,二是将编辑后的文档保存到doc/目录下。具体实现代码如下:
protectedvoidPage_Load(object sender, EventArgs e)

{

//定义FileSaver对象

       PageOffice.FileSaverfs = new PageOffice.FileSaver();

if(Request.QueryString["id"] != null && Request.QueryString["id"].ToString().Trim().Length > 0)

       {

stringid = Request.QueryString["id"].ToString().Trim();

stringcontent = fs.DocumentText;

stringstrConn = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|demo_search.mdb";

stringsql = " update word set Content = '"+ content + "' where id= " + id;

OleDbConnectionconn = newOleDbConnection(strConn);

OleDbCommandcmd = newOleDbCommand(sql,conn);

           conn.Open();

           cmd.CommandType = CommandType.Text;

          cmd.ExecuteNonQuery();

//将文档内容保存到本地磁盘的Word文档中,fs.FileName指代Edit.aspx.cs页面中打开的Word文件名

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

//设置保存返回值

           fs.CustomSaveResult = "ok";

       }

else

       {

//设置保存返回值

           fs.CustomSaveResult = "未获得文档编号ID";

       }


//关闭FileSaver对象

       fs.Close();

}

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

本示例代码在VS2008下编译通过。本文完整的示例代码可在http://www.zhuozhengsoft.com网站中下载。