2010-12-02 9 views
2

doc個の変数をDOCXファイルから削除しようとしています。ここで私が使用しているコードがあるが、それはいずれも削除されません...OpenXML DOCXのドキュメント変数を削除しますか?

これは完全なコードです:

class Program 
    { 
     static void Main(string[] args) 
     { 
      string filePath = "C:\\..\\..sample.docx"; 
      Remove removedocvars = new Remove(); 
      removedocvars.RemoveDocVariables(filePath); 

     } 
    } 

//method to remove doc vars 
    public void RemoveDocVariables(string fileName) 
     { 
      using (WordprocessingDocument doc = WordprocessingDocument.Open(fileName, true)) 
      { 

       List<DocumentVariables> DocVarsToDelete = doc.MainDocumentPart.RootElement.Descendants<DocumentVariables>().ToList(); 
       foreach (DocumentVariables dc in DocVarsToDelete) 
       { 
        dc.Remove(); 
       } 
       doc.MainDocumentPart.Document.Save(); 
      } 
     } 

答えて

0

これはあなたのコードの範囲であれば、あなたはありませんsaveメソッドの呼び出しがありません。

ような何か:

foreach (DocumentVariable dc in DocVarsToDelete) 
    { 
     dc.Remove(); 
    } 
    document.Save(); 
+0

AFAIK「保存」は、SDKの新しいバージョンでドキュメントを破棄するときに自動的に呼び出されます。 –

+0

お役立ち情報他のサンプルコード(Usingブロックを使用していない)を見て、メソッドが見つからなかったことに気付きました。 – PhillFox

+0

。私の完全なコードにはdocument.Save()が含まれていますが、それでも動作しません。だから私は、文書の変数を削除する他の方法があるかどうか疑問に思っていた – stazera

1

変数はsettings.xmlファイルであるので、あなたはMainDocumentPart.DocumentSettingsPart.Settings.Descendants <を使用する必要があります>()。

public void RemoveDocVariables(string fileName) 
{ 
    using (var doc = WordprocessingDocument.Open(fileName, true)) 
    { 
     doc.MainDocumentPart.DocumentSettingsPart.Settings.RemoveAllChildren<DocumentVariables>(); 
    } 
} 
0

これは6年前の質問ですが、私はまだ回答を追加する価値があると思います。あなたの問題は、おそらくこれに関連している:

https://github.com/OfficeDev/Open-XML-SDK/issues/198

https://github.com/OfficeDev/Open-XML-SDK/issues/222

OpenXMLの上記のリンクのいずれかに記載のパッチが適用されるまでのメカニズムにアクセスするの混入好きではないことに使用されます。

+0

Githubのリンクはおそらく少し続くかもしれませんが、それらのリンクが消えた場合には、いずれかのリンクからの答えをあなたの答えに追加することは有益でしょう。 – disinfor

関連する問題