Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28

[AutoCAD] Экспорт координат в блоков в эксель

05.04.2023, 07:14. Показов 2031. Ответов 7

Студворк — интернет-сервис помощи студентам
Этот код сохраняет всё в txt файл, не могу додумать как преобразовать это для эксель, помогите пожалуйста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub ExtractDetailsOfAutoCADBlocks()
Open "C:\Users\n.olenev\Desktop\Script\Экспорт\123.txt" For Output As 1
Dim X, Y, Z As Double
Dim XLnCADObject As AcadObject
Dim XLnCADBlock As AcadBlockReference
Dim XLnCADSelection As AcadSelectionSet
MsgBox "Select Objects", , "XL n CAD"
On Error Resume Next
Set XLnCADSelection = ThisDrawing.SelectionSets.Add("XLnCAD_SelectionSet")
Set XLnCADSelection = ThisDrawing.SelectionSets("XLnCAD_SelectionSet")
XLnCADSelection.SelectOnScreen
For Each XLnCADObject In ThisDrawing.SelectionSets("XLnCAD_SelectionSet")
If XLnCADObject.ObjectName = “AcDbBlockReference” Then
Set XLnCADBlock = XLnCADObject
X = XLnCADBlock.insertionPoint(0)
Y = XLnCADBlock.insertionPoint(1)
Z = XLnCADBlock.insertionPoint(2)
Print #1, X; Y; Z; XLnCADObject.name&; "; " & XLnCADBlock.Layer
End If
Next
Close (1)
XLnCADSelection.Clear
 
End Sub
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.04.2023, 07:14
Ответы с готовыми решениями:

[AutoCAD] Построение линии по координатам из Эксель
Работаю на VBA совсем недавно, пишу программу для автокада, которая берёт координаты их эксель и...

[AutoCAD] Построение 2D сетки по координатам из эксель
Люди добрые, такой вопрос, есть код в теории создающий 2D сетку по координатам из эксель, а на...

Почему при открытии файла эксель, появляется из фонового скрытого режима мой файл эксель
Добрый день уважаемые форумчане, столкнулся с такой проблеммой. Есть небольшая программка которая...

7
 Аватар для Angry Old Man
2995 / 738 / 310
Регистрация: 26.03.2022
Сообщений: 1,379
Записей в блоге: 1
05.04.2023, 11:48
Лучший ответ Сообщение было отмечено Babidjon как решение

Решение

Babidjon, спотыкаюсь об отсутствие AUTOCAD чтобы проверить. У меня нет поминаемых Вами объектов. Я вынужден извратить Ваш код, постарался, чтобы он хоть отдалённо напоминал Ваш. Попробуйте выполнить его под AUTOCAD, он формирует тестовую таблицу, никак не связанную с Вашими чертежами, если он отработает, перепишите его с учетом Ваших реалий, данных Ваших объектов.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub ExtractDetailsOfAutoCADBlocksTest()
 
Dim FileXls: FileXls = "C:\Users\n.olenev\Desktop\Script\Экспорт\123.xlsx"
Dim XLnCADObject
Dim ThisDrawingSelectionSets: ThisDrawingSelectionSets = Array("Раз", "Два", "Три")
Dim i As Long
 
MsgBox "Select Objects", , "XL n CAD"
 
With CreateObject("Excel.Application")
    .Workbooks.Add
    .Visible = True
    .Application.ScreenUpdating = False
    .Application.DisplayAlerts = False
 
    i = 1
    For Each XLnCADObject In ThisDrawingSelectionSets
        .Cells(i, 1) = Rnd()                             'X
        .Cells(i, 2) = Rnd()                             'Y
        .Cells(i, 3) = Rnd()                             'Z
        .Cells(i, 4) = "XLnCADObject " & XLnCADObject    'XLnCADObject.Name&
        .Cells(i, 5) = "; " + "XLnCADBlock.Layer"        '"; " & XLnCADBlock.Layer
        i = i + 1
    Next
    .Columns("A:F").EntireColumn.AutoFit
    .Application.ScreenUpdating = True
    .ActiveWorkbook.SaveAs FileXls
    .Application.DisplayAlerts = True
End With
End Sub
Здесь Ваш код, я его только записал в структурном виде для читаемости и возможности, при необходимости, сопоставить с моим извращением
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub ExtractDetailsOfAutoCADBlocks()
Open "C:\Users\n.olenev\Desktop\Script\Экспорт\123.txt" For Output As 1
 
Dim X, Y, Z As Double
Dim XLnCADObject As AcadObject
Dim XLnCADBlock As AcadBlockReference
Dim XLnCADSelection As AcadSelectionSet
MsgBox "Select Objects", , "XL n CAD"
 
On Error Resume Next
Set XLnCADSelection = ThisDrawing.SelectionSets.Add("XLnCAD_SelectionSet")
Set XLnCADSelection = ThisDrawing.SelectionSets("XLnCAD_SelectionSet")
XLnCADSelection.SelectOnScreen
 
For Each XLnCADObject In ThisDrawing.SelectionSets("XLnCAD_SelectionSet")
    If XLnCADObject.ObjectName = “AcDbBlockReference” Then
        Set XLnCADBlock = XLnCADObject
        X = XLnCADBlock.insertionPoint(0)
        Y = XLnCADBlock.insertionPoint(1)
        Z = XLnCADBlock.insertionPoint(2)
        Print #1, X; Y; Z; XLnCADObject.Name&; "; " & XLnCADBlock.Layer
    End If
Next
XLnCADSelection.Clear
 
Close (1)
End Sub
1
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28
05.04.2023, 11:54  [ТС]
Спасибо! Оно работает, только вот не пойму, координаты чего оно выводит на данный момент? В чертеже нет объектов с подобными координатами
0
 Аватар для Angry Old Man
2995 / 738 / 310
Регистрация: 26.03.2022
Сообщений: 1,379
Записей в блоге: 1
05.04.2023, 12:25
Цитата Сообщение от Babidjon Посмотреть сообщение
Оно работает
Отлично,
Цитата Сообщение от Angry Old Man Посмотреть сообщение
он формирует тестовую таблицу, никак не связанную с Вашими чертежами, если он отработает, перепишите его с учетом Ваших реалий, данных Ваших объектов.
Формируется тестовая таблица, вместо координат - случайные числа. Вместо данных Ваших объектов - тестовые строки. Вам надо внедрить свой код в мой вывод (или наоборот: мой вывод в Ваш код) - я только показал, как можно организовать вывод данных в Excel. Повторюсь, у меня нет автокада.

Добавлено через 11 минут
Вот попытка объединить оба кода, при отсутствии у меня автокада это не тестировалось
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub ExtractDetailsOfAutoCADBlocks()
 
Dim FileXls: FileXls = "C:\Users\n.olenev\Desktop\Script\Экспорт\123.xlsx"
 
Dim XLnCADObject As AcadObject
Dim XLnCADBlock As AcadBlockReference
Dim XLnCADSelection As AcadSelectionSet
Dim i As Long
 
MsgBox "Select Objects", , "XL n CAD"
 
On Error Resume Next
Set XLnCADSelection = ThisDrawing.SelectionSets.Add("XLnCAD_SelectionSet")
Set XLnCADSelection = ThisDrawing.SelectionSets("XLnCAD_SelectionSet")
XLnCADSelection.SelectOnScreen
 
With CreateObject("Excel.Application")
    .Workbooks.Add
    .Visible = True
    .Application.ScreenUpdating = False
    .Application.DisplayAlerts = False
 
    i = 1
    For Each XLnCADObject In ThisDrawing.SelectionSets("XLnCAD_SelectionSet")
        If XLnCADObject.ObjectName = “AcDbBlockReference” Then
            Set XLnCADBlock = XLnCADObject
            .Cells(i, 1) = XLnCADBlock.insertionPoint(0)
            .Cells(i, 2) = XLnCADBlock.insertionPoint(1)
            .Cells(i, 3) = XLnCADBlock.insertionPoint(2)
            .Cells(i, 4) = XLnCADObject.Name&
            .Cells(i, 5) = "; " & XLnCADBlock.Layer
            
            i = i + 1
        End If
    Next
    XLnCADSelection.Clear
    
    .Columns("A:F").EntireColumn.AutoFit
    .Application.ScreenUpdating = True
    .ActiveWorkbook.SaveAs FileXls
    .Application.DisplayAlerts = True
End With
End Sub
2
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28
05.04.2023, 12:26  [ТС]
Да, я уже разобрался, спасибо ещё раз!
0
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
05.04.2023, 19:16
Цитата Сообщение от Babidjon Посмотреть сообщение
Этот код сохраняет всё в txt файл, не могу додумать как преобразовать это для эксель
Немного упростил ваш код, VBA не нужен, просто вбейте в комстроку акада, работает с любыми объектами чертежа и любыми свойствами, в том числе (но не ограничиваясь) с координатами вставки:
Code
1
._EATTEXT
Добавлено через 2 часа 57 минут
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Повторюсь, у меня нет автокада.
Все нормально и вполне корректно работает, не смотря на отсутствие. Браво!
Цитата Сообщение от Babidjon Посмотреть сообщение
Этот код сохраняет всё в txt файл
А вот изначальный код лучше оптимизировать:
Цитата Сообщение от Babidjon Посмотреть сообщение
On Error Resume Next
Set XLnCADSelection = ThisDrawing.SelectionSets.Add("XLnCAD_Se lectionSet")
Set XLnCADSelection = ThisDrawing.SelectionSets("XLnCAD_Select ionSet")
Лучше проверить наличие в чертеже selectionset с пользовательским именем и удалить, тогда строчку "On Error Resume Next" можно исключить, а ошибки таки отслеживать, бо возникать им не с чего.
Цитата Сообщение от Babidjon Посмотреть сообщение
If XLnCADObject.ObjectName = “AcDbBlockReference” Then
Если изначально выбирать только блоки по фильтру, то перебирать придется только блоки (а не все выделенные объекты, которых например может быть 200 штук, а блока 4 - логично перебирать не 204 объекта, а 4 блока), не нужно тратить время на проверку "блок ли это", ну и уверенно обращаться к свойствам блока.
Цитата Сообщение от Babidjon Посмотреть сообщение
XLnCADObject.name
Если вместо .name использовать .EffectiveName, то можно обращаться к переменной типа blockrefernce, а переменную типа Object / Entity исключить (смысл ее тащить через код, если обе они ссылаются на один объект). Соответственно, с динамическими блоками будет давать корректное имя.
Можно использовать такой код:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Sub ExtractDetailsOfAutoCADBlocks()
 
Dim FileXls
FileXls = "C:\Users\n.olenev\Desktop\Script\Экспорт\123.xlsx"
 
Dim XLnCADBlock As AcadBlockReference
Dim XLnCADSelection As AcadSelectionSet
Dim i As Long
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
    FilterType(0) = 0
    FilterData(0) = "Insert"
 
MsgBox "Select Objects", , "XL n CAD"
 
For Each XLnCADSelection In ThisDrawing.SelectionSets
    If XLnCADSelection.Name = "XLnCAD_SelectionSet" Then
        XLnCADSelection.Delete
        Exit For
    End If
Next XLnCADSelection
Set XLnCADSelection = ThisDrawing.SelectionSets.Add("XLnCAD_SelectionSet")
XLnCADSelection.SelectOnScreen FilterType, FilterData
 
With CreateObject("Excel.Application")
    .Workbooks.Add
    .Visible = True
    .Application.ScreenUpdating = False
    .Application.DisplayAlerts = False
 
    i = 1
    For Each XLnCADBlock In ThisDrawing.SelectionSets("XLnCAD_SelectionSet")
                
            .Cells(i, 1) = XLnCADBlock.insertionPoint(0)
            .Cells(i, 2) = XLnCADBlock.insertionPoint(1)
            .Cells(i, 3) = XLnCADBlock.insertionPoint(2)
            .Cells(i, 4) = XLnCADBlock.EffectiveName
            .Cells(i, 5) = "; " & XLnCADBlock.Layer
         
            i = i + 1
        
    Next
    XLnCADSelection.Clear
    
    .Columns("A:F").EntireColumn.AutoFit
    .Application.ScreenUpdating = True
    .ActiveWorkbook.SaveAs FileXls
    .Application.DisplayAlerts = True
End With
XLnCADSelection.Delete
Set XLnCADSelection = Nothing
End Sub
1
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28
06.04.2023, 04:12  [ТС]
Поражаюсь мастерству людей присутствующих на форуме, спасибо! Только думал заняться этим вопросом с проверкой
0
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
06.04.2023, 09:01
Babidjon, лучше использовать штатную команду eattext, ее возможности намного шире, вплоть до сбора атрибутов блоков. Да и вообще любой информации - цвет, стой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2023, 09:01
Помогаю со студенческими работами здесь

[AutoCAD] Группа блоков
Есть блок, который вставляется из кода, есть ли возможность сделать при помощи циклов так, чтобы...

[AutoCAD] Фильтрация выбранных блоков
Есть код, который позволяет экспортировать координаты блоков в таблицу Excel. Существует ли...

Экспорт запроса из Акцесс начиная с определенной ячейки Эксель
Просмотрела очень много тем и попробовала много кодов,но так ничего и не нашла, то ошибки,то просто...

Экспорт результата запроса из Акцесс в определенную ячейку эксель
Просмотрела очень много тем и попробовала много кодов,но так ничего и не нашла, то ошибки,то просто...

Экспорт данных из экселя в блокнот
Добрый день форумчане. Такой вопрос, а есть ли какая-нибудь функция или функционал, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru