Взаимодействие Word и перебор объектов Shape для поиска текстового поля - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь перебрать текстовый документ и его объекты формы, чтобы найти DOCVARIABLES. Объект shape имеет текстовое поле. Вот макросы, которые я извлекаю непосредственно из Word.

Selection.HeaderFooter.Shapes.Range (Array ("Text Box 7")). Выберите

Текстовое поле находится в объекте формы, который содержится в верхнем колонтитуле. Я перебрал диапазон формы для верхнего и нижнего колонтитула, но я получил только shapeRange [j] .Type = msoEmbeddedOLEObject :

foreach (HeaderFooter footer in section.Footers)
{
    for (int i = 1; i <= footer.Shapes.Count; i++)
    {
        Microsoft.Office.Interop.Word.ShapeRange shapeRange = footer.Shapes.Range(i);
        for (int j = 1; j <= shapeRange.Count; j++)
        {
            string shapetype = shapeRange[j].Name;
            if (shapeRange[j].Type == MsoShapeType.msoTextBox)
            {
                var shapeFields = shapeRange.TextFrame.TextRange.Text;
                if (shapeFields.Contains("DOCVARIABLE"))
                {
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 01 апреля 2020

Разрешено @slightlysnarky - проверка того, что TextFrame.HasText имеет значение true.

Выполнено как для верхнего, так и для нижнего колонтитула.

foreach (Shape objShape in header.Shapes)
{
    if (objShape.TextFrame.HasText != 0)
    {
        foreach (Field objField in objShape.TextFrame.TextRange.Fields)
            {
...