Есть в word'е извечная проблема — это определение высоты Row в Table (или всей Table), когда свойство .HeightRule = wdRowHeightAuto (или wdRowHeightAtLeast) — эти свойства устанавливают автоподбор высоты строки таблицы (или миним. высоты) — тогда в свойстве .Height хранится значение — 99999 (или предустан. значение). Т.о. определить РЕАЛЬНУЮ высоту Row в Table становится невозможно.
Я решил написать функцию, которая вычисляет реальную высоту Row как говорится в лоб, анализируя текст в ячейках Row. Функция в принципе написана, ничего особого сложного, НО необходимо учесть еще межстрочный интервал и тут возникла серьезная заминка — НИ КАК НЕ МОГУ понять по какому принципу расчитывается межстрочный интервал в points зная: размер шрифта и множитель межстрочн. интервала!?!?
Например, по справке: 1x интервал — соответ. размеру большой буквы шрифта, т.е. если шрифт 12 points, то?.... а вот и не то, реальные измерения показывают, что тогда интервал будет ~1,8 points, для шрифта 16 points — ~2,58 и т.д.
Так я провел измерения и составил следующие уравнения зависимости для каждого из множителя межстр. интервала Nx (зависимость реального межстр. интервала от размера шрифта):
для 1x — y=0,2354*SizeFont-1,1776
для 1,5x — y=0,8546*SizeFont-1,8663
для 2x — y=1,4729*SizeFont-2,4965
для 2,5x — y=2,0819*SizeFont-2,7935
для 4x — y=3,9928*SizeFont-7,1573
для 6x — y=0,1551*SizeFont-1,2053
.... в начале вроде намечается тенденция, однако после 4x, она вся сходит на нет...Вообщем я уже голову сломал пытаясь вычислить реальный межстрочный интервал в points'ах
Здравствуйте, Аноним, Вы писали:
А>Есть в word'е извечная проблема — это определение высоты Row в Table (или всей Table), когда свойство .HeightRule = wdRowHeightAuto (или wdRowHeightAtLeast) — эти свойства устанавливают автоподбор высоты строки таблицы (или миним. высоты) — тогда в свойстве .Height хранится значение — 99999 (или предустан. значение). Т.о. определить РЕАЛЬНУЮ высоту Row в Table становится невозможно.
С межстрочными интервалами я никогда не разбиралась, а высоту строку вычисляла, как разницу между Top'ами
Для моих целей этой точности было достаточно — привожу код, может, пригодится
Dim tbl As Table
Set tbl = ActiveDocument.Tables(1)
tbl.Rows.Add
ReDim fTops(1 To tbl.Rows.Count) As Single
Dim cel As Cell
For Each cel In tbl.Range.Cells
If fTops(cel.RowIndex) = 0 Then
fTops(cel.RowIndex) = cel.Range.Information(wdVerticalPositionRelativeToPage)
End If
Next cel
Dim fHeight As Single
Dim r As Long
For r = 1 To tbl.Rows.Count - 1
MsgBox (fTops(r + 1) - fTops(r)) & " " & Application.PointsToCentimeters(fTops(r + 1) - fTops(r))
fHeight = fHeight + (fTops(r + 1) - fTops(r))
Next r
tbl.Rows(tbl.Rows.Count).Delete
MsgBox fHeight & " " & Application.PointsToCentimeters(fHeight)
Пользователь — друг программиста!
Re[2]: Word: измерить межстрочный интервал
От:
Аноним
Дата:
04.01.05 20:14
Оценка:
Здравствуйте, Qman, Вы писали:
Q>Напиши в Worde макрос, а потом слей его в байсик.... Q>Все очень просто
Юморист я и так пишу в Word'e....... так и знал, что чем больше текст вопроса, тем меньше вероятность что люди дочитают до конца и что-нибудь поймут
Re[2]: Word: измерить межстрочный интервал
От:
Аноним
Дата:
04.01.05 20:20
Оценка:
Вау, большое спасибо Elena_, свойство .Information это то что нужно, никак на него не попадал, хотя весь msdn со справкой перерыл в поисках
Re[2]: Word: измерить межстрочный интервал
От:
Аноним
Дата:
04.01.05 21:15
Оценка:
C этим .Range.Information(wdVerticalPositionRelativeToPage) правда одна забавная такая штуковина ....
Если мы возьмем таблицу и в первую ячейку добавим четыре строки, а потом попробуем узнать высоту последней строки:
то к удивлению своему получим высоту первой строки, .... дело в том, что последня строка в ячейке таблицы заканчивается комбинацией спец. символов: chr коды 13,7.13,7 и на последних 2-х word обламывается. Приходится делать так:
Set rr = ActiveDocument.Tables(1).Cell(1, 1).Range.Sentences(4)
Set aRange = ActiveDocument.Range(Start:=rr.Start, End:=rr.End — 2)
MsgBox aRange.Information(wdVerticalPositionRelativeToPage)
Остается правда все-таки проблема вычисления междустрочного интервала последней строки (хорошо если строка выше имеет такой же междустрочный интервал, а если нет...) а так будем вычислять дальше... все таки ошибка в вычислениях будет гораздо меньше