Тема: Автоформат таблиц в границах печати
Мне понравился сайт, форум, и сама идея обмениваться "тайными знаниями" из соображений... ну, не знаю... у каждого свои. А мои такие -- "information WANTS to be free".
Поэтому предлагаю piece of code, полностью годный для боевого применения
В процессе работы с таблицами, полученными разными способами (копипаст из XL, с разными настройками по границам таблиц и пр.) хотелось решить вопрос хотя-бы в первом приближении -- а именно -- чтобы все помещалось в область печати и все было "ровно".
Вот полностью работающий код. Проверялся на таблицах из самых разных источников.
Единственное требование для получения корректного результата -- единый кегль, однако, чаще всего, и этого не надо.
Что НЕ УМЕЕТ: выравнивать границы столбцов, если в какой-то строке границы другие. Это будет следующая итерация, думаю на эту тему.
ПО КОДУ. Нет никакого анализа содержимого таблиц и их форматирования. Все делается функциями Word.
Задаются жесткие границы текста от границ ячеек, обратите внимание. Если надо -- поменяйте. Задается автоматическая высота от метрик текста. Опять же если надо -- поменяйте.
И вообще -- полная свобода модификации. Никакого копирайта
Sub TableAdjust()
' Как использовать: фокус ввода -- в любом месте таблицы, применить.
'
If Selection.Information(wdWithInTable) Then
Selection.Tables(1).Select
Selection.Rows.HeightRule = wdRowHeightAuto
Selection.Rows.Height = CentimetersToPoints(0)
Selection.Tables(1).Rows.LeftIndent = CentimetersToPoints(0)
Selection.Tables(1).Rows.Alignment = wdAlignRowLeft
With Selection.Tables(1)
.TopPadding = CentimetersToPoints(0)
.BottomPadding = CentimetersToPoints(0)
.LeftPadding = CentimetersToPoints(0.05)
.RightPadding = CentimetersToPoints(0.05)
.Spacing = 0
.AllowPageBreaks = True
.AllowAutoFit = True
End With
Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)
Selection.Tables(1).PreferredWidthType = wdPreferredWidthPercent
Selection.Tables(1).PreferredWidth = 100
Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
With Selection.Tables(1)
.TopPadding = CentimetersToPoints(0)
.BottomPadding = CentimetersToPoints(0)
.LeftPadding = CentimetersToPoints(0.05)
.RightPadding = CentimetersToPoints(0.05)
.Spacing = 0
.AllowPageBreaks = True
.AllowAutoFit = False
End With
Selection.Tables(1).Rows.LeftIndent = CentimetersToPoints(0)
Selection.Tables(1).Rows.Alignment = wdAlignRowLeft
End If
End Sub