Есть блок с атрибутами. Макросом выгружаю значения этих атрибутов в Excel.
Проблема в том, что в Value не попадают, например, такие свойства многострочного атрибута как коэф сжатия.
Подскажите пожалуйста как с помощью vba-excel получить это свойство, например, в виде “Сжатие + Textstring” или еще как-то, чтобы попало в ячейку Excel?
For r = 1 To Col
For n = LBound(varAttributes) To UBound(varAttributes)
ActiveCell.Offset(0, r).Value = varAttributes(n).TextString
Next
Next
Проблема в том, что у меня в значение вообще не попадает сжатие (как символ).
Т.е. из NanoCAD в excel получаю:
Текст многострочного атрибута
И если вручную в Excel добавить параметр форматирования сжатие, например, изменив строку:
{\\W0.6500;Текст многострочного атрибута}
и передать обратно в блок, то этот атрибут будет как сжатый текст.
Поэтому возник вопрос: передать этот параметр из Excel можно, но не понятно, как получить этот параметр в Excel, например, в виде {\\W0.6500;Текст многострочного атрибута}
*В Автокаде передаются все параметры форматирования тем же кодом vba.
Форматирование мтехта в атрибуте может быть достаточно хитрым, разный коэф сжатия, разный цвет, высота шрифта , разные шрифты, подчеркивания, надчеркивания, зачеркивания. Бонусом вся эта красота одновременно может быть применена внутри каждого слова текста.
Соответственно задача по полному сохранению форматирования достаточно нетривиальна.
Поэтому предлагаю сильно не заморачиваться, а максимум это сохранять переносы
Public ThisDrawing As Object
Sub method_MtRAW()
Dim intType(0) As Integer
Dim varDat(0) As Variant
Dim objSelSet As Object
Dim objNanoCAD As Object
Set SPDS = CreateObject("McCOM2.Server")
On Error Resume Next
Set objNanoCAD = GetObject(, "AutoCAD.Application_")
If Err.Number <> 0 Then
Err.Number = 0
Set objNanoCAD = GetObject(, "nanoCAD.Application")
If Err.Number <> 0 Then
MsgBox "Не запущен CAD"
Exit Sub
End If
End If
On Error GoTo 0
Dim ObjMC As Variant 'McCOM2.Obj
Dim objAK As Variant 'native dwg
Set ThisDrawing = objNanoCAD.ActiveDocument
intType(0) = 0
varDat(0) = "insert"
'------------------
Set objSelSet = vbdPowerSet("seTEST")
objSelSet.Select 5, , , intType, varDat
Debug.Print "insert-" & objSelSet.Count
For Each objAK In objSelSet
'passing the autocad object to the multicad
Set ObjMC = SPDS.Object(objAK) 'full access to multicad properties
Name0 = ObjMC!t1
Name1 = ObjMC!t1.Raw 't1 attribute tag
Name2 = ObjMC("t1").Raw
Name20 = ObjMC("t1")
Name3 = ObjMC.Properties("Info")
nClass = ObjMC.ClassName
Debug.Print nClass
Debug.Print "format txt: "; Name0
Debug.Print "unformat txt: "; Name1
Debug.Print "---------------"
'Keep working
Next
End Sub
Public Function vbdPowerSet(strName As String) As Object 'AcadSelectionSet
Dim objSelSet As Object ' AcadSelectionSet
Dim objSelCol As Object ' AcadSelectionSets
Set objSelCol = ThisDrawing.SelectionSets
For Each objSelSet In objSelCol
If objSelSet.Name = strName Then
objSelSet.Delete
Exit For
End If
Next
Set objSelSet = ThisDrawing.SelectionSets.Add(strName)
Set vbdPowerSet = objSelSet
End Function