我有一个合同的模板“保证书.rtf”,内容中有{0},{1}等动态标志。
我写了一个替换方法(如下),可是执行到excute时老是提示错误“占位程序接收到错误数据。 (异常来自 HRESULT:0x800706F7)”        /// <summary>
        /// Word文本替换
        /// </summary>
        /// <param name="doc">文档</param>
        /// <param name="args">要替换的内容</param>
        public void ReplaceWord(Document doc, params object[] args)
        {
            try
            {
                object first = 0;
                object last = doc.Characters.Count;
                Range range = doc.Range(ref first, ref last);                Microsoft.Office.Interop.Word.Find finder = range.Find;
                finder.ClearFormatting();                object missingValue = Type.Missing;
                //object missingValue = System.Reflection.Missing.Value;   //这个东西找了好久,不像操作Excel,用Type.mising还不行.                  object replaceArea = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;                int i = 0;
                foreach (object item in args)
                {
                    object findStr = "{" + i + "}";
                    object replaceStr = item;
                    //替换内容
                    finder.Execute(ref findStr, ref missingValue, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue,
                      ref replaceStr, ref replaceArea, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue);                    i++;
                }            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示  ReplaceWord", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
问各位大哥帮下忙,先谢了!或者有没有其它方法可以来实现这个操作的。

解决方案 »

  1.   

    用反射的方式调用Execute,暂时没有其他方法。
    如果是C#4,dynamic不行,但InvokeMethod可以
    原理我也还没弄懂,期待专家解答。
      

  2.   

    RTF格式,看一下
      

  3.   

    如果就是想替换内容的话,扔到richtextbox里面用自带的方法就可以处理了。
    richTextBox1.Text = "abcdef";
    richTextBox1.Select(richTextBox1.Text.IndexOf("cd"), 2);
    richTextBox1.SelectedText = "xxxx";
      

  4.   

    我也碰到这个问题
    word2003是对的,在word2007下面就有这个问题了,该怎么解决