打开xml 2.5查找具有特定字段代码的特定占位符。C#

打开xml 2.5查找具有特定字段代码的特定占位符。C#,c#,ms-word,backend,openxml-sdk,C#,Ms Word,Backend,Openxml Sdk,在这里输入code我有个问题。我在word中创建了一个名为OrderLines的特定属性,它包含一行三个单元格。我想克隆该行,然后我想进入克隆并更改所有三个具有属性文本的表格单元格字段代码。在这个属性中,我想把n1改为n2。但只有克隆系。我的代码在包含n1的所有行上都会更改。我做错了什么 Body bod = doc.MainDocumentPart.Document.Body; Table tables = bod.Descendants<Tabl

在这里输入code
我有个问题。我在word中创建了一个名为OrderLines的特定属性,它包含一行三个单元格。我想克隆该行,然后我想进入克隆并更改所有三个具有属性文本的表格单元格字段代码。在这个属性中,我想把n1改为n2。但只有克隆系。我的代码在包含n1的所有行上都会更改。我做错了什么

Body bod = doc.MainDocumentPart.Document.Body;
                    Table tables = bod.Descendants<Table>().First();
                    TableRow row = tables.Descendants<TableRow>().Last();
                    TableCell rowCell = new TableCell();
                    IEnumerable<FieldCode> placeHolder = mainPart.Document.Body.Descendants<FieldCode>();

                    // Denna tar fram TableProperties med namnet OrdeLines.
                    IEnumerable<TableProperties> tableProperties = mainPart.Document.Body.Descendants<TableProperties>().Where(tp => tp.TableCaption != null);
                    foreach (TableProperties tProp in tableProperties)
                    {
                        if (tProp.TableCaption.Val.Equals("OrderLines")) // see comment, this is actually StringValue
                        {

                            // do something for table with myCaption
                            Table table = (Table)tProp.Parent;
                            //Klonar sista raden
                            var cloneRow = table.ChildElements[3].CloneNode(true);
                            row.InsertAfterSelf(cloneRow);

                            foreach (TableCell tableCell in cloneRow)
                            { 
                                foreach (FieldCode code in placeHolder)
                                {   
                                    //var test = cloneRow.LastOrDefault().Where(x => x.InnerText == code.InnerText);

                                    var testo = tableCell.Parent.Descendants<FieldCode>().LastOrDefault().Where(X => X.InnerText == code.InnerText);

                                    if (testo != null)
                                    {
                                        code.Text = code.Text.Replace("n2_", "n1_");
                                    }
                                }
                            }
                        }

                    }

这里没有足够的信息可以有效地帮助您。字段代码可能非常复杂,而且有很多。您是否可以使用问题下方的链接添加:1)字段代码的Word Open XML(作为文本,而不是图像)和2)在Word UI中打开的文档中字段代码的屏幕截图。(在Word中使用Alt+F9在“字段结果”和“字段代码”视图之间切换。)这将告诉Use您正试图使用的内容;这样我们就可以更好地解释你正在使用的代码。我不能给你看图片。但是有没有别的方法我可以寄给你呢?我看到照片了,谢谢。。。表行的底层单词openxml如何?您可以通过在OpenXMLSDK生产力工具中打开这样一个文档来实现这一点。嗯,至少我现在知道如何开始阅读您的代码了<代码>占位符被实例化为
mainPart.Document.Body.subjects()-因此,文档中的所有字段都是。你应该用你想要更改的范围内的所有字段来实例化它-因此只有
cloneRow
中的后代。我编辑了我的问题,并在那里放了3)和图片。
        FieldCode fieldCode1 = new FieldCode(){ Space = SpaceProcessingModeValues.Preserve };
        fieldCode1.Text = " DOCPROPERTY  \"MFiles_PGB5E4D5DC229C4027AB19B40D0203C01Cn1_PG3E2BB7EBC49E4C8C825CCAE0AEBA9A06\"  \\* MERGEFORMAT ";