Замена содержимого в текстовых полях Word 2010 с использованием OpenXML - PullRequest
1 голос
/ 21 июня 2011

Используя Open XML SDK, я преуспел в программном поиске закладок или текстовых строк в текстовом документе и вставке нового содержимого. Я использую OpenXmlPowerTools.SearchAndReplacer для выполнения текстового поиска и замены, а также ответа этого поста на закладки Замена текста закладки в файле Word с помощью Open XML SDK

Все это не работает, когда закладка или текст, который я пытаюсь заменить, находится внутри текстового поля.

Почему ни один из подходов не работает в текстовом поле? Документы Word, которые я пытаюсь заменить в тексте, используют Texbox для макета, и я не могу понять, в чем проблема.

У кого-нибудь есть предложения относительно того, в чем может быть проблема? Спасибо

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Я так и сделал - он работает с текстовыми полями в случае, когда нет нескольких прогонов с текстом (например, 1 слово выделено жирным шрифтом

    Dim searchQuery = From tx In mainPart.Document.Body.Descendants(Of Text)()
        Where tx.Text.Contains(replaceData.OldText)

    Dim i As Integer
    For i = 0 To searchQuery.Count - 1
        searchQuery(i).Text = searchQuery(i).Text.Replace(replaceData.OldText, replaceData.NewText)
    Next
1 голос
/ 23 июня 2011

Вот XML для простого текстового поля со словом test:

<w:pict xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml">
    <v:stroke joinstyle="miter" />
    <v:path gradientshapeok="t" o:connecttype="rect" />
  </v:shapetype>
  <v:shape id="_x0000_s1027" style="position:absolute;margin-left:0;margin-top:0;width:186.35pt;height:110.6pt;z-index:251660288;mso-width-percent:400;mso-height-percent:200;mso-position-horizontal:center;mso-width-percent:400;mso-height-percent:200;mso-width-relative:margin;mso-height-relative:margin" type="#_x0000_t202" xmlns:v="urn:schemas-microsoft-com:vml">
    <v:textbox style="mso-fit-shape-to-text:t">
      <w:txbxContent>
        <w:p w:rsidR="00B558B5" w:rsidRDefault="00B558B5">
          <w:proofErr w:type="gramStart" />
          <w:r>
            <w:t>test</w:t>
          </w:r>
          <w:proofErr w:type="gramEnd" />
        </w:p>
      </w:txbxContent>
    </v:textbox>
  </v:shape>
</w:pict>

Вы можете видеть, что структура отличается от поиска текста в закладке, поскольку текстовое поле фактически сохраняется как изображение. Если вы настроите свой алгоритм поиска для работы с этой другой структурой, то сможете найти текст и заменить его.

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