首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Word中书签替换遇到的有关问题

2012-04-02 
Word中书签替换遇到的问题。我现在想完成的功能如下:读取word文件中的所有书签,然后可以替换书签内容。我希

Word中书签替换遇到的问题。
我现在想完成的功能如下:读取word文件中的所有书签,然后可以替换书签内容。
我希望最后的效果是用户选定一个word文件,然后读取所有书签并将每个书签内容进行替换之后生成一个全新的word文件,保存到一个指定目录下。

代码如下:

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace WebApplication.Word{    public partial class 循环替换Word中的书签 : System.Web.UI.Page    {        Microsoft.Office.Interop.Word.Document WordDoc;        Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();        private static object oMissing = System.Reflection.Missing.Value;        string[] strMarks;        protected void Page_Load(object sender, EventArgs e)        {        }        /// <summary>        /// 获取word 文档中   书签项        /// </summary>        /// <returns></returns>        public string[] GetBookmarks()        {            string[] bms = new string[WordDoc.Bookmarks.Count];            int i = 0;            foreach (Microsoft.Office.Interop.Word.Bookmark bm in WordDoc.Bookmarks)            {                bms[i++] = bm.Name;            }            return bms;        }        protected void Button1_Click(object sender, EventArgs e)        {            object fileName = "E:\\Test.doc";            WordDoc = WordApp.Documents.Add(ref fileName, ref oMissing, ref oMissing, ref oMissing);            strMarks = GetBookmarks();//读取word中的书签            ExportWord();//循环替换书签        }        protected void ExportWord()        {            Microsoft.Office.Interop.Word.Application appWord = null;            Microsoft.Office.Interop.Word.Document doc = null;            try            {                //使用模板,创建新的doc文档                object objTrue = true;                object objFalse = false;//服务器端是否打开word                object objTemplate = "";//定义模板                objTemplate = "E:\\Test.doc";//取得模板[color=#FF0000]                for (int i = 0; i < strMarks.Length; i++)                {                    appWord = new Microsoft.Office.Interop.Word.ApplicationClass();                    //word程序不可视                    appWord.Visible = false;                    object objDocType = Microsoft.Office.Interop.Word.WdDocumentType.wdTypeDocument;                    doc = appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType, ref objTrue);                    #region 文字书签                    // 如果存在该书签,则动态加载值.                    if (doc.Bookmarks.Exists(Convert.ToString(strMarks[i])))                    {                        //定义书签变量                        object fieldname = strMarks[i];                        //定义书签的结果值                        string result = strMarks[i] + ":wahaha";                        doc.Bookmarks.get_Item(ref  fieldname).Range.Text = result;//书签赋值                        fieldname = null;                        result = null;                    }                    #endregion                }[/color]                #region Word文件保存到服务器                object filename = "E:\\Test1.doc";                object miss = System.Reflection.Missing.Value;                object FileFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument;//兼容格式                doc.SaveAs(ref filename, ref FileFormat, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);                object missingValue = Type.Missing;                object doNotSaveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;                doc.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);                appWord.Application.Quit(ref doNotSaveChanges, ref miss, ref miss);                doc = null;                appWord = null;                #endregion                Response.Write("导出成功!");            }            catch (Exception ex)            {                Response.Write(ex.Message);                throw;            }        }    }} 



我现在已经实现了读取word中所有书签并将书签名保存到数组中的功能,但是在将书签内容进行替换时出现了问题,就是当有多个书签存在时,循环书签数组进行替换时只是把最后一个书签替换掉了,不知道是什么原因,请高手指点一下。

如果我的思路不正确,那么应该怎么做,求指教!

[解决办法]
doc 在循环里面重复赋值了,每次循环都是一个新的doc

热点排行