Тема: C#(или VBA) Как программно узнать в какой колонке находится символ?
Есть документ, который программно разбит на колонки.
Как программно узнать, в какой из колонок находится символ-маркер?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум Microsoft Word » Автоматизация » C#(или VBA) Как программно узнать в какой колонке находится символ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Есть документ, который программно разбит на колонки.
Как программно узнать, в какой из колонок находится символ-маркер?
Вычисляем позицио области от левого края страницы (Range.Information(wdHorizontalPositionRelativeToPage)) и сравниваем ее с суммой ширин колонок (PageSetup.TextColumns(x).Width).
Спасибо.
Только вот не получается интерпретировать ваш код под C#((
Как в Range загнать искомый кусочке текста?
Object start = 0;
Object end = worddocument.Characters.Count;//Весь документ
Word.Range wordrange = worddocument.Range(ref start, ref end);
Как еще такой вариант:
сначала форматировать документ в узкую полоску - ширина страницы равна ширине одной колонки, узнавать на какой странице находится символ, потом при нормальном разбиении это значение будет соответствовать номеру колонки от начала отсчета.
Получаю координаты на курсора C#
object coord = wordapp.Selection.Range.get_Information(Microsoft.Office.Interop.Word.WdInformation.wdHorizontalPositionRelativeToPage);
Вопрос о том, как загонять в рендж мой мрекр-текст остался открытым....
Освежил свой макрос определения номера колонки текста:
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# за вами.
Спасибо, вчера ночь я таки добил программу.
Сделал, по вашему совету, через определение координат.
Находил маркер через .Find , получал координаты, сравнивал с заранее заготовленной "сеткой" и определял в какой колонке он находится.
Код ужасный получился, но главное, что работает.
Еще раз спасибо, подсказку.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум Microsoft Word » Автоматизация » C#(или VBA) Как программно узнать в какой колонке находится символ?