Удалить переменные документа для OpenXML DOCX? - PullRequest
2 голосов
/ 03 декабря 2010

Я пытаюсь удалить переменные doc из файла 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();
            }
        }

Ответы [ 3 ]

1 голос
/ 11 августа 2011

переменные находятся в файле 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 голосов
/ 26 июля 2017

Это вопрос 6 лет, но я думаю, что было бы полезно добавить ответ.Вероятно, ваша проблема связана с этим:

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

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

Раньше OpenXML не был похож на смешивание механизма доступа, пока патч не упоминался в одном изссылка выше была применена.

0 голосов
/ 03 декабря 2010

Если это размер вашего кода, то вы не пропустили вызов метода save?

Что-то вроде:

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