Как заменить каждое слово, заключенное в скобки, используя Open XML SDK - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь заменить каждое слово в документе Microsoft Word, которое заключено в пару скобок.Почему-то прогон XML время от времени отличается.

Это означает, что иногда оно фактически вводит в цикл целое слово с квадратными скобками, но иногда оно может содержать только первые квадратные скобки, а иногда - первую пару скобок, слово, но не вторую пару скобок.

Это приводит к тому, что некоторые слова никогда не заменяются.

Я пытался использовать решения из предыдущих потоков в stackoverflow без результата.Я также пытался определить, когда квадратные скобки разделяются, но это не сработало, поскольку это также могло случайно разбить слово где угодно.

Например, я пробовал решения из этой цепочки без какого-либо другого результата: Замените текст в документе Word, используя Open Xml

public IActionResult Get([FromBody] dynamic value)
    {
        JObject attributesAsJObject = value;
        Dictionary<string, object> values = attributesAsJObject.ToObject<Dictionary<string, object>>();
        string path = Directory.GetCurrentDirectory() + "/test.docx";

        // Open a WordprocessingDocument for editing using the filepath.
        using (WordprocessingDocument doc =
                WordprocessingDocument.Open(path, true))
        {
            var body = doc.MainDocumentPart.Document.Body;

            foreach (var text in body.Descendants<Text>())
            {
                foreach (dynamic key in values)
                {
                    string thekey = "{{" + key.Key + "}}".ToString();
                    if (text.Text.Contains(thekey))
                    {
                        text.Text = text.Text.Replace(thekey, key.Value);
                    }
                }


            }
        }
        return Ok();
    } 

Используя эти решения, я ожидал, что переменная "text" из цикла foreach всегда будет целыми словами, но все равно будет разбивать ее случайным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...