Тема: Пример создания табличного стиля

Может кому пригодится.
Предложения по улучшению кода приветствуются.
Option Explicit
Private Function MakeTableStyleForSpec() As String
   Dim objTableStyle As AcadTableStyle
   Dim objTextStyle As AcadTextStyle
   Dim objDictTableStyle As AcadDictionary
   Dim strTableStyleName As String
   Dim strTextStyleName As String
      Set objDictTableStyle = ThisDrawing.Dictionaries.Item("ACAD_TABLESTYLE")
   strTableStyleName = "Spec"
   On Error Resume Next
   Set objTableStyle = objDictTableStyle.AddObject(strTableStyleName, "AcDbTableStyle")
   strTextStyleName = "Spec"
   Set objTextStyle = ThisDrawing.TextStyles.Add(strTextStyleName)
   On Error GoTo 0
   objTextStyle.SetFont "Arial", False, False, 0, 34
   objTableStyle.SetTextStyle AcRowType.acDataRow + AcRowType.acHeaderRow _
                           + AcRowType.acTitleRow + AcRowType.acUnknownRow, strTextStyleName
   objTableStyle.SetTextHeight AcRowType.acDataRow + AcRowType.acUnknownRow, 2.5
   objTableStyle.SetTextHeight AcRowType.acHeaderRow + AcRowType.acTitleRow, 3
   objTableStyle.SetAlignment AcRowType.acHeaderRow + AcRowType.acTitleRow, acMiddleCenter
   objTableStyle.SetAlignment AcRowType.acDataRow + AcRowType.acUnknownRow, acMiddleLeft
   objTableStyle.HorzCellMargin = 1.5
   objTableStyle.VertCellMargin = 1
   objTableStyle.SetGridLineWeight AcGridLineType.acHorzBottom + AcGridLineType.acHorzInside + AcGridLineType.acHorzTop _
                + AcGridLineType.acVertInside + AcGridLineType.acVertLeft + AcGridLineType.acVertRight, _
                AcRowType.acTitleRow + AcRowType.acHeaderRow, AcLineWeight.acLnWt050
   objTableStyle.SetGridLineWeight AcGridLineType.acHorzBottom + AcGridLineType.acHorzTop + _
               AcGridLineType.acVertInside + AcGridLineType.acVertLeft + AcGridLineType.acVertRight, _
               AcRowType.acDataRow + AcRowType.acUnknownRow, AcLineWeight.acLnWt050
   objTableStyle.SetGridLineWeight AcGridLineType.acHorzInside, _
               AcRowType.acDataRow + AcRowType.acUnknownRow, AcLineWeight.acLnWt025
   Dim color As New AcadAcCmColor
   color.SetRGB 255, 0, 0
   objTableStyle.SetColor AcRowType.acDataRow + AcRowType.acHeaderRow _
                        + AcRowType.acTitleRow + AcRowType.acUnknownRow, color
   MakeTableStyleForSpec = strTableStyleName
End Function
Public Sub TestTableStyle()
   Dim objTable As AcadTable
   Dim varPt As Variant
   Dim i As Integer
   varPt = ThisDrawing.Utility.GetPoint
   Set objTable = ThisDrawing.ModelSpace.AddTable(varPt, 2, 5, 8, 10)
   objTable.RegenerateTableSuppressed = True
   objTable.SetText 0, 0, "Specification"
   objTable.SetText 1, 0, "Poz"
   objTable.SetColumnWidth 0, 15
   objTable.SetText 1, 1, "Oboznachenie"
   objTable.SetColumnWidth 1, 70
   objTable.SetText 1, 2, "Naimenovanie"
   objTable.SetColumnWidth 2, 70
   objTable.SetText 1, 3, "Kol"
   objTable.SetColumnWidth 3, 15
   objTable.SetText 1, 4, "Massa"
   objTable.SetColumnWidth 4, 20
   For i = 2 To 101
      objTable.InsertRows i, 8, 1
      objTable.SetText i, 0, i
      objTable.SetText i, 1, "Obozn" & i
      objTable.SetText i, 2, "Naimen" & i
      objTable.SetText i, 3, i
      objTable.SetText i, 4, i
   Next
   objTable.RegenerateTableSuppressed = False
   objTable.StyleName = MakeTableStyleForSpec
End Sub
Комментарии все удалил, т.к. вставляется абра-кадабра) ((((
Может завтра с работы получится вставить с коментами.

Re: Пример создания табличного стиля

О, вот с коментами, через txt-шник получилось нормально.
Если есть у кого-то возможность, удалите первый пост.

Option Explicit
Private Function MakeTableStyleForSpec() As String
   'создание табличного стиля для спецификаций
   'для масштаба 1:1, в конкретных условиях нужно отмасштабировать после заполнения
   Dim objTableStyle As AcadTableStyle
   Dim objTextStyle As AcadTextStyle
   Dim objDictTableStyle As AcadDictionary
   Dim strTableStyleName As String
   Dim strTextStyleName As String
   'создаем табличный стиль в словаре чертежа
   Set objDictTableStyle = ThisDrawing.Dictionaries.Item("ACAD_TABLESTYLE")
   strTableStyleName = "Спецификация"
   On Error Resume Next 'не хорошо конечно, надо сделать проверки
   Set objTableStyle = objDictTableStyle.AddObject(strTableStyleName, "AcDbTableStyle")
   'создаем текстовый стиль для таблиц
   strTextStyleName = "Спецификаций"
   Set objTextStyle = ThisDrawing.TextStyles.Add(strTextStyleName)
   On Error GoTo 0
   'задаем шрифт, у нас принят ариал
   objTextStyle.SetFont "Arial", False, False, 0, 34 'значения получил по GetFont для нужного стиля
   'настраиваем таблицу
   'задаем текстовый стиль всем типам ячеек
   objTableStyle.SetTextStyle AcRowType.acDataRow + AcRowType.acHeaderRow _
                           + AcRowType.acTitleRow + AcRowType.acUnknownRow, strTextStyleName
   'задаем высоту текста
   objTableStyle.SetTextHeight AcRowType.acDataRow + AcRowType.acUnknownRow, 2.5
   objTableStyle.SetTextHeight AcRowType.acHeaderRow + AcRowType.acTitleRow, 3
   'задаем выравниваниев ячейках
   objTableStyle.SetAlignment AcRowType.acHeaderRow + AcRowType.acTitleRow, acMiddleCenter
   objTableStyle.SetAlignment AcRowType.acDataRow + AcRowType.acUnknownRow, acMiddleLeft
   'задаем отступы в ячейках
   objTableStyle.HorzCellMargin = 1.5
   objTableStyle.VertCellMargin = 1
   'задаем толщины границ
   objTableStyle.SetGridLineWeight AcGridLineType.acHorzBottom + AcGridLineType.acHorzInside + AcGridLineType.acHorzTop _
                + AcGridLineType.acVertInside + AcGridLineType.acVertLeft + AcGridLineType.acVertRight, _
                AcRowType.acTitleRow + AcRowType.acHeaderRow, AcLineWeight.acLnWt050
   objTableStyle.SetGridLineWeight AcGridLineType.acHorzBottom + AcGridLineType.acHorzTop + _
               AcGridLineType.acVertInside + AcGridLineType.acVertLeft + AcGridLineType.acVertRight, _
               AcRowType.acDataRow + AcRowType.acUnknownRow, AcLineWeight.acLnWt050
   objTableStyle.SetGridLineWeight AcGridLineType.acHorzInside, _
               AcRowType.acDataRow + AcRowType.acUnknownRow, AcLineWeight.acLnWt025
   'задаем цвет тексту
   Dim color As New AcadAcCmColor
   color.SetRGB 255, 0, 0
   objTableStyle.SetColor AcRowType.acDataRow + AcRowType.acHeaderRow _
                        + AcRowType.acTitleRow + AcRowType.acUnknownRow, color
   'вроде все, посмотрим
   'возвращаем имя созданного стиля
   MakeTableStyleForSpec = strTableStyleName
End Function
Public Sub TestTableStyle()
   'создаем таблицу по созданному табличному стилю
   Dim objTable As AcadTable
   Dim varPt As Variant
   Dim i As Integer
   varPt = ThisDrawing.Utility.GetPoint 'точка вставки таблицы
   'создаем таблицу из 2 строк и 5 столбцов
   Set objTable = ThisDrawing.ModelSpace.AddTable(varPt, 2, 5, 8, 10)
   objTable.RegenerateTableSuppressed = True
   'заполняем шапку таблицы
   objTable.SetText 0, 0, "Спецификация"
   objTable.SetText 1, 0, "Поз"
   objTable.SetColumnWidth 0, 15
   objTable.SetText 1, 1, "Обозначение"
   objTable.SetColumnWidth 1, 70
   objTable.SetText 1, 2, "Наименование"
   objTable.SetColumnWidth 2, 70
   objTable.SetText 1, 3, "Кол"
   objTable.SetColumnWidth 3, 15
   objTable.SetText 1, 4, "Масса"
   objTable.SetColumnWidth 4, 20
   'заполняем таблицу
   For i = 2 To 101
      'вставляем строчку
      objTable.InsertRows i, 8, 1
      'заполняем ячеки
      objTable.SetText i, 0, i
      objTable.SetText i, 1, "Обозначение" & i
      objTable.SetText i, 2, "Наименование" & i
      objTable.SetText i, 3, i
      objTable.SetText i, 4, i
   Next
   objTable.RegenerateTableSuppressed = False
   'присваиваем стиль таблице
   objTable.StyleName = MakeTableStyleForSpec
End Sub

Re: Пример создания табличного стиля

Почему высота строк 9 получается?
Должно же быть 8.

Re: Пример создания табличного стиля

> Vildar
Потому что:

objTableStyle.VertCellMargin = 1

~'J'~

Re: Пример создания табличного стиля

Да не, это я лопух. Надо сразу после создания таблицы присваивать стиль. А то она в standarte создается, а там черт знает что происходит.
А лучше наверно, сделать стиль текущим.
Кстати как это сделать?

Re: Пример создания табличного стиля

> Vildar
Попробуй старый дедовский способ
Lisp:

(vla-setvariable (vla-get-activedocument (vlax-get-acad-object))
                  "CTABLESTYLE"
                  YourTableStyleName)

VBA:

Thisdrawing.SetVariable "CTABLESTYLE", YourTableStyleName

~'J'~