Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как добавить блок в Autocad по данным взятым из таблицы Excel

Как добавить блок в Autocad по данным взятым из таблицы Excel

Ответ
Поиск в этой теме
Непрочитано 22.04.2010, 14:57 #1
Как добавить блок в Autocad по данным взятым из таблицы Excel
scainet
 
Регистрация: 22.04.2010
Сообщений: 6

Кто бы мог привести текст программы, которая осуществляла бы вставку блоков в Autocad по данным из таблицы Excel. В таблице присутствуют названия блоков, их количесво, которое должно появиться в Acade, и значения атрибутов этих блоков...
Просмотров: 11027
 
Непрочитано 22.04.2010, 15:20
#2
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992


Вот пример такой программы
http://dwg.ru/dnl/101
Nike вне форума  
 
Автор темы   Непрочитано 22.04.2010, 15:57
#3
scainet


 
Регистрация: 22.04.2010
Сообщений: 6


Нужно чтоб было выполнено в VBA т.е. при нажатии кнопки в экселе запускался автокад и в чертеж загружались бы нужные блоки, описанные в таблице эксель
scainet вне форума  
 
Непрочитано 23.04.2010, 14:04
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от scainet Посмотреть сообщение
Кто бы мог привести текст программы, которая осуществляла бы вставку блоков в Autocad по данным из таблицы Excel. В таблице присутствуют названия блоков, их количесво, которое должно появиться в Acade, и значения атрибутов этих блоков...

Покажи скриншот диапазона Эксель или
залей файл Эксель сюда

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 23.04.2010, 15:15
#5
scainet


 
Регистрация: 22.04.2010
Сообщений: 6


Вот так примерно должен выглядет эксель..

P.S.: блоки достаются по названию из библиотеки(папки, где блоки лежат)
Вложения
Тип файла: rar Книга1.rar (6.5 Кб, 344 просмотров)
scainet вне форума  
 
Непрочитано 23.04.2010, 21:14
#6
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от scainet Посмотреть сообщение
Вот так примерно должен выглядет эксель..

P.S.: блоки достаются по названию из библиотеки(папки, где блоки лежат)
Обработай напильником до нужной кондиции
Код:
[Выделить все]
Option Explicit

' require reference to 'AutoCAD 2008 Type Library' and also
' go to Tools -> Options -> General -> check 'Break on Unhandled Errors'

Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

Dim acHwnd As Long
Dim exHwnd As Long

Private Sub CommandButton1_Click()
    Dim dwgname As String
    dwgname = "C:/Test.dwg"    '<-- change drawing name here
    InsertBlocksFromBook (dwgname)
End Sub


Sub InsertBlocksFromBook(dwgname As String)

    Dim rng As Range
    Dim attData()
    Dim acadApp As AcadApplication
    Dim acadDocs As AcadDocuments
    Dim acadDoc As AcadDocument
    Dim Util As AcadUtility
    Dim i As Long, j As Long, cnt As Integer, n As Integer, num As Integer
    Dim pt As Variant
    Dim blockName As String
    Dim blkRef As AcadBlockReference
    Dim varAttributes As Variant
    Dim oAttribute As AcadAttributeReference

    On Error GoTo Error_Control

exHwnd = Application.hwnd
    Set rng = Application.Application.InputBox(Prompt:="Select range", Title:="Insert Blocks To ACAD", Type:=8)
    
    rng.Select
    
    ReDim attData(0 To rng.Rows.Count - 1, 0 To rng.Columns.Count - 1)
    For i = 1 To rng.Rows.Count
     For j = 1 To rng.Columns.Count
     attData(i - 1, j - 1) = rng.Cells(i, j)
     Next
     Next
     
     
    Set acadApp = ConnectToAcad
    acHwnd = acadApp.hwnd
    Putfocus acHwnd
    Set acadDocs = acadApp.Documents
    Set acadDoc = acadDocs.Open(dwgname)
    
    acadApp.Visible = True
    acadApp.WindowState = acMax
    acadDoc.Activate
    acadDoc.ActiveSpace = acModelSpace
    
    Set Util = acadDoc.Utility

        MsgBox "***   INSERTING " & num & " BLOCKS TO PICKING POINTS ON SCREEN   ***" & vbCr & _
        "ACTIVATE AutoCAD"
    For i = 0 To UBound(attData)
        num = CInt(attData(i, 0))
  
        blockName = CStr(attData(i, 1))
        For cnt = 0 To num - 1
        
            pt = acadDoc.Utility.GetPoint(, vbCr & "Pick insertion point of block >>")

            Set blkRef = acadDoc.ModelSpace.InsertBlock(pt, blockName, 1, 1, 1, 0)
            varAttributes = blkRef.GetAttributes
            For n = 0 To UBound(varAttributes)
                Set oAttribute = varAttributes(n)
                Dim tag As String
                If oAttribute.TagString = "TYPE" Then
                oAttribute.textString = CStr(attData(i, 2))
                    oAttribute.Update
                    ElseIf oAttribute.TagString = "VOLT" Then
                oAttribute.textString = CStr(attData(i, 3))
                    oAttribute.Update
                End If
            Next n
            blkRef.Update
        Next cnt
    Next i
  
    acadApp.ZoomExtents
    acadDoc.Close True
    Set acadDoc = Nothing
    Set acadDocs = Nothing
    acadApp.Quit
    Set acadApp = Nothing

    Putfocus exHwnd
    
Inserts_Exit:
    If Err.Number <> 0 Then
        MsgBox Err.Description
        Else
        MsgBox "Done"
    End If
    On Error GoTo 0
    Exit Sub

Error_Control:
    Resume Inserts_Exit

End Sub

' http://www.bigresource.com/VB-Can-I-open-an-exe-program-with-Visual-basic-6--AliDZf6X9.html#APPnTjA72l
Function ConnectToAcad() As AcadApplication
    Dim scratchApp As AcadApplication

    On Error Resume Next
    'see if it's already open
    Set scratchApp = GetObject(, "AutoCAD.Application.17")
    If Err Then
        Err.Clear
'        if not open it
        Set scratchApp = CreateObject("AutoCAD.Application.17")
        If Err Then
            Exit Function
        End If
    End If

    Set ConnectToAcad = scratchApp

End Function
ЗЫ Нет времени

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 24.04.2010, 00:29
#7
scainet


 
Регистрация: 22.04.2010
Сообщений: 6


Спасибо большое, с кодом немного разобрался... Вот только как сделать, чтобы автокад при запуске открывал новый чертеж, и в этот чертеж вставлялись бы блоки, взятые из папки "BLOCKS". Просто код тут написан так, что открывается тот чертеж, в котором сами блоки присутствуют и берет эти блоки из этого же чертежа..
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.jpg
Просмотров: 463
Размер:	45.9 Кб
ID:	37976  
scainet вне форума  
 
Непрочитано 24.04.2010, 10:03
#8
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от scainet Посмотреть сообщение
Спасибо большое, с кодом немного разобрался... Вот только как сделать, чтобы автокад при запуске открывал новый чертеж, и в этот чертеж вставлялись бы блоки, взятые из папки "BLOCKS". Просто код тут написан так, что открывается тот чертеж, в котором сами блоки присутствуют и берет эти блоки из этого же чертежа..
Навскидку (сижу на другом компьтере) вроде:
Код:
[Выделить все]
Set acadDoc = acadDocs.Add
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 24.04.2010, 18:30
#9
scainet


 
Регистрация: 22.04.2010
Сообщений: 6


А по подробнее можно?
scainet вне форума  
 
Непрочитано 25.04.2010, 10:43
#10
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от scainet Посмотреть сообщение
А по подробнее можно?
См. Help - там подробно

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 25.04.2010, 15:40
#11
scainet


 
Регистрация: 22.04.2010
Сообщений: 6


Вобщем получилось так, новый чертеж добавляется по верх того, с которого берутся блоки, НО блоки не добавляются в новый чертеж...

Да и вот еще ругается че-то на .hwnd, и причем токо в этом месте, выложил скрин
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 300
Размер:	54.0 Кб
ID:	38055  

Последний раз редактировалось scainet, 25.04.2010 в 18:24.
scainet вне форума  
 
Непрочитано 22.10.2010, 16:36
#12
mini

IT
 
Регистрация: 22.10.2010
Лиски
Сообщений: 71


для вставки блоков с атрибутами из таблицы *.csv (в столбцах: BLK-NAME X Y Z ATTRIBUTE) обычно использую InsertBlock2.lsp.
Вложения
Тип файла: lsp insblk2.lsp (5.2 Кб, 262 просмотров)
mini вне форума  
 
Непрочитано 26.10.2010, 10:20
#13
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 705


Я делаю пользовательские функции (см. вложение). Эксель, при открытии, не обновляйте.
Вложения
Тип файла: zip Пример.zip (30.2 Кб, 416 просмотров)
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 26.10.2010, 11:43
#14
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Я делаю пользовательские функции (см. вложение). Эксель, при открытии, не обновляйте.
Наверное, без файла "AutoCAD.xla" эти функции работать не будут?
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 26.10.2010, 11:48
#15
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 705


Цитата:
Сообщение от AlexV Посмотреть сообщение
Наверное, без файла "AutoCAD.xla" эти функции работать не будут?
Выкладывать .xla смысла нет т.к. коммандная строка чуствительна к версии автокад, и функции "заточены" под мои задачи, ветвлений диалогов сложных комманд я не предусматривал.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как добавить блок в Autocad по данным взятым из таблицы Excel

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильнее заменить дин. блок в готовом чертеже. Juss_00 Динамические блоки 7 13.04.2011 09:01
добавить в AutoCAD функции чистки чертежей (Drawing Cleanup) из Autocad Map 3D АлексЮстасу Баги и пожелания в Autodesk 6 26.03.2010 18:42
Правильная вставка таблицы из Excel [Acad 2008] saska AutoCAD 2 13.07.2009 14:34
Мониторы LCD CRT Разное 94 17.06.2008 10:51