1

Тема: C#(или VBA) Как программно узнать в какой колонке находится символ?

Есть документ, который программно разбит на колонки.
Как программно узнать, в какой из колонок находится символ-маркер?

2

Re: C#(или VBA) Как программно узнать в какой колонке находится символ?

Вычисляем позицио области от левого края страницы (Range.Information(wdHorizontalPositionRelativeToPage)) и сравниваем ее с суммой ширин колонок (PageSetup.TextColumns(x).Width).

Макросы под заказ и готовый пакет - mtdmacro.ru

3

Re: C#(или VBA) Как программно узнать в какой колонке находится символ?

Спасибо.
Только вот не получается интерпретировать ваш код под C#((

Как в Range загнать искомый кусочке текста?
            Object start = 0;
            Object end = worddocument.Characters.Count;//Весь документ
            Word.Range wordrange = worddocument.Range(ref start, ref end);


Как еще такой вариант:
сначала форматировать документ в узкую полоску - ширина страницы равна ширине одной колонки, узнавать на какой странице находится символ, потом при нормальном разбиении это значение будет соответствовать номеру колонки от начала отсчета.

4

Re: C#(или VBA) Как программно узнать в какой колонке находится символ?

Получаю координаты на курсора C#
object coord = wordapp.Selection.Range.get_Information(Microsoft.Office.Interop.Word.WdInformation.wdHorizontalPositionRelativeToPage);

Вопрос о том, как загонять в рендж мой мрекр-текст остался открытым....

5

Re: C#(или VBA) Как программно узнать в какой колонке находится символ?

Освежил свой макрос определения номера колонки текста:

Function RANGE_ColumnNo(ByRef R As Range) As Long
' возврат: номер колонки текста (TextColumns) в которой находится первый символ области R (0 - при ошибке)
    RANGE_ColumnNo = 0
    If R Is Nothing Then Exit Function
    With R.Characters.First
        If .PageSetup.TextColumns.Count <= 1 Then
            RANGE_ColumnNo = 1
        Else
Dim TC As TextColumn, X!, X2!
            X = .Information(wdHorizontalPositionRelativeToPage)
            If X < 0 Then Exit Function ' ошибка
            X2 = .Information(wdHorizontalPositionRelativeToTextBoundary)
            If X2 > 0 Then X = X - X2
            X2 = 0: X2 = .PageSetup.LeftMargin
            If .PageSetup.GutterPos = wdGutterPosLeft Then X2 = X2 + .PageSetup.Gutter
            For Each TC In .PageSetup.TextColumns
               RANGE_ColumnNo = RANGE_ColumnNo + 1
               If X < X2 + 1 Then Exit For ' нашли
               X2 = X2 + TC.Width + TC.SpaceAfter
            Next TC
        End If
    End With
End Function

Интерпретация на C# за вами.

Макросы под заказ и готовый пакет - mtdmacro.ru

6

Re: C#(или VBA) Как программно узнать в какой колонке находится символ?

Спасибо, вчера ночь я таки добил программу.
Сделал, по вашему совету, через определение координат.
Находил маркер  через .Find ,  получал координаты, сравнивал с заранее заготовленной "сеткой" и определял в какой колонке он находится.
Код ужасный получился, но главное, что работает.
Еще раз спасибо, подсказку.