Получить свойства многострочного атрибута через vba
Здравствуйте Уважаемые специалисты NanoCAD!
Есть блок с атрибутами. Макросом выгружаю значения этих атрибутов в 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
Ответы
-
разбирай свойство
: MTextAttributeContent : "\pxsm1.5000;{\W2.0000;проверка\Pвсего}" : String
pxsm - межстрочный интервал w - сжатие
0 -
Проблема в том, что сжатие (W) не передается в Value Excel (или из-за Value). Может нужно текст атрибута сначала преобразовать во что-то (в текст)?
0 -
Есть еще ScaleFactor, помимо форматирования
0 -
тебе просто текст надо получить?
или ты еще и параметры форматирования хочешь в ячейку эксель записать?
а потом вернуть в атрибут?
походу на басике этих свойств отдельно нет, они в составе мтекста
0 -
Мне нужно взять атрибут с текстом и его параметрами форматирования в ячейку Excel, а затем вернуть в атрибут блока.
Возможно нужно атрибут преобразовать в MText и уже из MText передавать в Excel (не взрывая блок)?
*Если в Excel значение будет с "\W.." (т.е. параметр сжатия есть), то он обратно передается в атрибут нормально.
Проблема как передать это параметр в ячейку Excel?
0 -
Распарси мтехт, а при записи в атрибут опять собери
0 -
Обратно в атрибут все нормально, но пока не знаю как получить в Excel строку вида "с W"- "\pxsm0.8000;{\W0.6500;Проверка строки}"?
0 -
Сделай split по слэшам, а потом join по символу или группе символов которые точно никогда не встретятся
Когда в атрибут обратная операция
0 -
Проблема в том, что у меня в значение вообще не попадает сжатие (как символ).
Т.е. из NanoCAD в excel получаю:
Текст многострочного атрибута
И если вручную в Excel добавить параметр форматирования сжатие, например, изменив строку:
{\W0.6500;Текст многострочного атрибута}
и передать обратно в блок, то этот атрибут будет как сжатый текст.
Поэтому возник вопрос: передать этот параметр из Excel можно, но не понятно, как получить этот параметр в Excel, например, в виде
{\W0.6500;Текст многострочного атрибута}
*В Автокаде передаются все параметры форматирования тем же кодом vba.
0 -
Выход такой:
- определить одно или много-строчный атрибут,
- если многострочный, то скопировать все содержимое и вставить в "какой-то временный" МТЕКСТ,
- передать из этого МТЕКСТ в ячейку Excel - передаются все параметры, включая сжатие.
но это утяжелит время кода.
0 -
MTextAttributeContent
Что возвращает в эксель?
0 -
Возвращает текст без параметров сжатия (т.е. также как и Textstring).
0 -
См. картинку во втором сообщении
0 -
без W у меня (хотя атрибут сжат)
0 -
Файл с блоком в студию
Так долго будем гадать
1 -
без W у меня (хотя атрибут сжат) - не верно.
Передается все таки, сейчас еще раз проверила.
Спасибо!
0 -
Форматирование мтехта в атрибуте может быть достаточно хитрым, разный коэф сжатия, разный цвет, высота шрифта , разные шрифты, подчеркивания, надчеркивания, зачеркивания. Бонусом вся эта красота одновременно может быть применена внутри каждого слова текста.
Соответственно задача по полному сохранению форматирования достаточно нетривиальна.
Поэтому предлагаю сильно не заморачиваться, а максимум это сохранять переносы
1 -
Спасибо за совет!
0 -
в VBA нанокад очистить форматирование нетривиальная задача
даже на .NET (removeAllFormatting нет такого(()
но на мультикад это просто,
останутся только переносы
код ниже делает то же самое что и волшебник Кен Уолсми на .NET
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 Function1 -
Спасибо!!
0
Разделы
- Все разделы
- 31 Общие вопросы
- 11 Работа nanoCAD в ОС Linux
- 222 Платформа nanoCAD
- 5 nanoCAD GeoniCS
- 19 nanoCAD BIM Конструкции
- 3 nanoCAD Механика PRO
- 34 nanoCAD BIM Электро
- 9 nanoCAD BIM Вентиляция
- 4 nanoCAD BIM ВК
- nanoCAD BIM Отопление
- 5 nanoCAD BIM СКС
- 26 nanoCAD BIM ОПС
- 2 nanoCAD Стройплощадка
- 2 nanoCAD Металлоконструкции
- 1 nanoCAD Конструкции PS
- 2 TDMS Фарватер
- ReClouds
- NSR Specification
- Учебным заведениям и учащимся