Re: Word: измерить межстрочный интервал
От: Elena_ Россия  
Дата: 04.01.05 08:25
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Есть в 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)
Пользователь — друг программиста!
Word: измерить межстрочный интервал
От: Аноним  
Дата: 03.01.05 21:15
Оценка:
Есть в 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'ах
Re: Word: измерить межстрочный интервал
От: Qman  
Дата: 03.01.05 22:18
Оценка:
Напиши в Worde макрос, а потом слей его в байсик....
Все очень просто
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) правда одна забавная такая штуковина ....

Если мы возьмем таблицу и в первую ячейку добавим четыре строки, а потом попробуем узнать высоту последней строки:

MsgBox ActiveDocument.Tables(1).Cell(1, 1).Range.Sentences(4).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)

Остается правда все-таки проблема вычисления междустрочного интервала последней строки (хорошо если строка выше имеет такой же междустрочный интервал, а если нет...) а так будем вычислять дальше... все таки ошибка в вычислениях будет гораздо меньше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.