1

我正在尝试用列表中的新文本替换 word 文档中的临时文本。如果文本不在形状中,它可以工作,但是一旦它试图在文本框中找到文本,它就会引发错误。这是我到目前为止所拥有的:

public void FindReplace(List<repvals> replaceVals, string docLocation, int listLen)
        {

            //Opens a new Word application
            var app = new Microsoft.Office.Interop.Word.Application();
            //Opens the .docx
            var doc = app.Documents.Open(docLocation, true, false);

            //Selects the document
            var range = doc.Range();

            for (int i = 0; i < listLen; i++)
            {

                //Finds the parameter, then replaces
                range.Find.Execute(FindText: Convert.ToString(replaceVals[i].tempVal), Replace: WdReplace.wdReplaceAll, ReplaceWith: Convert.ToString(replaceVals[i].Boxes));

                var shapes = doc.Shapes;
                //Finds text within textboxes, then changes them
                foreach (Microsoft.Office.Interop.Word.Shape shape in shapes)
                {
                    var initialText = shape.TextFrame.TextRange.Text;
                    var resultingText = initialText.Replace(Convert.ToString(replaceVals[i].tempVal), Convert.ToString(replaceVals[i].Boxes));
                    shape.TextFrame.TextRange.Text = resultingText;
                }

            }
            //prints document
            doc.Save();
            doc.Close();

            //fully closes Word
            Marshal.ReleaseComObject(app);
        }

打的时候会出现问题

var initialText = shape.TextFrame.TextRange.Text;

并抛出一个错误说:“这个对象不支持附加文本。”

形状中的文字没什么特别的。(例如 tDATE、tNAME 等)

有任何想法吗?

4

2 回答 2

2

我找到了答案。事实证明我的代码很好,但是我使用的文档(我没有写)在倒数第二页有另一个形状,以形成一个签署你名字的地方。我用下划线替换了它,运行了代码,一切都完美地改变了。

对于那些也遇到此问题的人,请尝试检查您的 foreach 循环计算了多少个形状:http: //i.imgur.com/1yNrL4p.png

感谢 Andrew 和 varocarbas 的帮助

于 2013-11-06T14:36:48.750 回答
0

*“在 2003 年,标准文本框的 AltText 默认是包含的文本,但是因为您可以将 Alt Text 更改为不匹配,所以以这种方式阅读它从来都不是一个好主意。在 2010 年,Alt Text 的默认值为空白

如果文本框被命名为“文本框 2”(如果不是,则替换正确的名称) MsgBox ActiveDocument.Shapes("Text Box 2").TextFrame.TextRange 应该可以工作。"*

——约翰·SR威尔逊

http://answers.microsoft.com/en-us/office/forum/office_2010-customize/shapesalternativetext-is-blank-for-the-docx/7671c746-2c2b-41d9-b7de-389a766587a7?page=2&msgId=31041d67- e62b-4ce0-b283-57fd6a4ff6b2

于 2013-11-05T17:02:35.703 回答