VBA/Lisp Acad2011 автоматизировать создание связи (Datalinkmanager)
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > VBA/Lisp Acad2011 автоматизировать создание связи (Datalinkmanager)

VBA/Lisp Acad2011 автоматизировать создание связи (Datalinkmanager)

Ответ
Поиск в этой теме
Непрочитано 28.03.2011, 15:22 #1
VBA/Lisp Acad2011 автоматизировать создание связи (Datalinkmanager)
gizmo_zx
 
Проектировщик ЭО,ЭМ, ЭОС
 
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 257

Добрый день.

Есть около 100 файлов *.xls
задача создать связь с листом "spg" каждого файла
и вставить в чертеж (можно с определенным шагом или тыканьем)
или просто создать связь.

Tools->DataLinks->Datalinkmanager ->Создать новую связь (выбрать файл, выбрать лист) очнь долго.

Возможно это автоматизировать?
есть текстовый список *.xls файлов.

возможно перевести на VBA?
http://through-the-interface.typepad...ng-an-aut.html

Последний раз редактировалось gizmo_zx, 28.03.2011 в 22:14.
Просмотров: 3329
 
Непрочитано 29.03.2011, 01:15
#2
Олег (jr.)

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


Без шансов, но можно создать на основе программу на С# или VB.NET
и вызывать через командную строку команду: NETLOAD
IMHO
Олег (jr.) вне форума  
 
Непрочитано 29.03.2011, 05:04
#3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


А изначально держать данные в Access?
trir вне форума  
 
Автор темы   Непрочитано 29.03.2011, 10:02
#4
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Не могу выяснить почему криво ставляется таблица.
Т.е. через Tools->DataLinks->Datalinkmanager ->Создать новую связь (выбрать файл, выбрать лист) все ок.
А через программку сбивается форматирование и точность чисел (не "1" а "1.00000")
т.е. сама связь кривоватая получается.

Acad 2011 rus sp1.1 x32
netframework3.5
ObjectARX 2011
VS 2010
VB.net
Код:
[Выделить все]
Imports System
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Windows
Imports Autodesk.AutoCAD.Interop
Imports Autodesk.AutoCAD.Interop.Common

Public Class AXHMClass

    ' Define command 'NewCmd1'
    <Autodesk.AutoCAD.Runtime.CommandMethod("TFS")> _
    Public Sub TFS()
        Dim dlName As String
        Dim dl As New Autodesk.AutoCAD.DatabaseServices.DataLink
        Dim dlm As Autodesk.AutoCAD.DatabaseServices.DataLinkManager
        Dim dlID As Object
        Dim doc = Application.DocumentManager.MdiActiveDocument
        Dim ed = doc.Editor
        Dim db = doc.Database
        Dim ofd As New Object
        Dim ppr As Autodesk.AutoCAD.EditorInput.PromptPointResult
        Dim doclock As Autodesk.AutoCAD.ApplicationServices.DocumentLock
        Dim tr As Transaction
        Dim btr As Autodesk.AutoCAD.DatabaseServices.BlockTableRecord
        Dim bt As Autodesk.AutoCAD.DatabaseServices.BlockTable
        'Dim rat As Autodesk.AutoCAD.DatabaseServices.CellRange
        dlName = "AXHBOM"
        ofd = New OpenFileDialog("Select Excel spreadsheet to link", "", "xls; xlsx", "ExcelFileToLink", OpenFileDialog.OpenFileDialogFlags.DoNotTransferRemoteFiles)
        Dim dr = ofd.ShowDialog()
        If dr = System.Windows.Forms.DialogResult.OK Then
        Else
            Return
        End If
        'ed.WriteMessage("\nFile selected was \"{0}\".",ofd.Filename)
        ppr = ed.GetPoint("\nEnter table insertion point: ")
        If ppr.Status = PromptStatus.OK Then

        Else
            Return
        End If
        dlm = db.DataLinkManager
        dlID = dlm.GetDataLink(dlName)

        If dlID = ObjectId.Null Then
        Else

            dlm.RemoveDataLink(dlID)

        End If


        'dl = DataLink
        dl.DataAdapterId = "AcExcel"
        dl.Name = dlName
        dl.Description = "AXH Bill of Material for Rollup"
        dl.ConnectionString = ofd.Filename
        dl.DataLinkOption = DataLinkOption.PersistCache
        dl.UpdateOption = Int(UpdateOption.AllowSourceUpdate)
        doclock = Application.DocumentManager.MdiActiveDocument.LockDocument()
        dlID = dlm.AddDataLink(dl)
        tr = db.TransactionManager.StartTransaction()
        Try
            tr.AddNewlyCreatedDBObject(dl, True)
            bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead)
            Dim tb As New Autodesk.AutoCAD.DatabaseServices.Table
            tb.TableStyle = db.Tablestyle
            tb.Position = ppr.Value
            'rat = "axhbom"

            tb.SetDataLink(0, 0, dlID, True)
            tb.GenerateLayout()
            btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite)
            btr.AppendEntity(tb)
            tr.AddNewlyCreatedDBObject(tb, True)
            tr.Commit()
        Catch
            ed.Regen()
            tr.Dispose()
        End Try

    End Sub


End Class
netload newlink0.dll
команда: TFS
Вложения
Тип файла: zip newlink0.zip (7.2 Кб, 49 просмотров)
gizmo_zx вне форума  
 
Непрочитано 29.03.2011, 11:17
#5
Олег (jr.)

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


А так
Код:
[Выделить все]
               Dim tb As New Autodesk.AutoCAD.DatabaseServices.Table
                tb.SuppressRegenerateTable(True)
                tb.TableStyle = db.Tablestyle
                tb.Position = ppr.Value

                'rat = "axhbom"

                tb.SetDataLink(0, 0, dlID, True)
                For i As Integer = 2 To tb.NumRows - 1
                    For j As Integer = 0 To tb.NumColumns - 1
                        tb.SetCellState(i, j, CellStates.None)
                        tb.SetDataType(i, j, DataType.Double, UnitType.Distance)
                        tb.SetDataFormat(i, j, "%lu2%pr6") '<-- 6 decimals precision

                        tb.SetCellState(i, j, CellStates.ContentLocked)
                    Next


                Next
                tb.SuppressRegenerateTable(False)
                tb.GenerateLayout()

Последний раз редактировалось Кулик Алексей aka kpblc, 29.03.2011 в 11:31.
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.03.2011, 11:36
#6
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Олег (jr.) не прокатило, подозреваю дело в кривой связи...
Вложения
Тип файла: dwg
DWG 2010
Чертеж1.dwg (108.3 Кб, 723 просмотров)
gizmo_zx вне форума  
 
Непрочитано 29.03.2011, 18:44
#7
Олег (jr.)

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


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
Олег (jr.) не прокатило, подозреваю дело в кривой связи...
Для столбца с целочисленными попробуй формат
Код:
и еще надо задавать высоту и ширину таблицы, отступы
и ширину столбцов по индексу j чтобы меньше ручной
работы
Я проверял на 2009-м других не имею
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.03.2011, 18:56
#8
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


А можно по подробнее или где посмотреть, я первый на vb.net
gizmo_zx вне форума  
 
Непрочитано 29.03.2011, 20:36
1 | #9
Олег (jr.)

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


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
А можно по подробнее или где посмотреть, я первый на vb.net
Что-то вроде, лень заниматься причесыванием, посмотри сам через Intellisence
что можно использовать из методов и свойств
(когда стаишь точку после tb. вылезает список Intellisence)

Код:
[Выделить все]
                 Dim tb As New Autodesk.AutoCAD.DatabaseServices.Table
                tb.SuppressRegenerateTable(True)
                tb.TableStyle = db.Tablestyle
                tb.Position = ppr.Value

                'rat = "axhbom"
                'columns
                tb.SetDataLink(0, 0, dlID, True)
                tb.Width = 394.97
                tb.Height = 43.7
                tb.SetColumnWidth(0, 19.94)
                tb.SetColumnWidth(1, 199.5)
                tb.SetColumnWidth(2, 50.63)
                tb.SetColumnWidth(3, 21.7)
                tb.SetColumnWidth(4, 18.17)
                tb.SetColumnWidth(5, 16.09)
                tb.SetColumnWidth(6, 19.94)
                tb.SetColumnWidth(7, 23.46)
                'title
                tb.SetRowHeight(0, 18.53)
                'data rows
                For i As Integer = 1 To tb.NumRows - 1
                    tb.SetRowHeight(i, 6.29)
                    For j As Integer = 0 To tb.NumColumns - 1
                        tb.SetMargin(i, j, CellMargins.Left & CellMargins.Bottom & CellMargins.Bottom, 1.5)
                        tb.SetTextHeight(i, j, 2.47)
                    Next
                Next

                ' cell formatting
                For i As Integer = 2 To tb.NumRows - 1
                    For j As Integer = 0 To tb.NumColumns - 1
                        'unlock cell
                        tb.SetCellState(i, j, CellStates.None)
                        tb.SetDataType(i, j, DataType.Double, UnitType.Distance)
                        If j <> 6 Then
                            tb.SetDataFormat(i, j, "%lu2%pr6") '<-- 6 decimals precision
                        Else
                            tb.SetDataFormat(i, j, "%lu2%pr0") '<-- whole number
                        End If
                        'set locking back
                        tb.SetCellState(i, j, CellStates.ContentLocked)
                    Next


                Next
                tb.SuppressRegenerateTable(False)
                tb.GenerateLayout()
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.03.2011, 21:35
#10
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


А почему, если создаешь "вручную" таблица вставляентся по размерам из файла екселя? А програмно нет.
Мне кажеться это ссылка в словаре кривая получается.
gizmo_zx вне форума  
 
Непрочитано 29.03.2011, 22:15
1 | #11
Олег (jr.)

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


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
А почему, если создаешь "вручную" таблица вставляентся по размерам из файла екселя? А програмно нет.
Мне кажеться это ссылка в словаре кривая получается.
Извини не знаю
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 30.03.2011, 08:12
#12
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


А чем можно поковырять словарь DataLinks?
Dictedit просмотреть могу а вытащить , текст не получается...
Есть что нибудь наподобие?
----
3.04.11
Поравил lisp Dictedit вытащил в Excel обе связи разнича есть, но небольшая.
"1" -через datalinkmaneger
"AXHBOM" - програмно
----
Может явно лист не указан?
Красным выделил разницу может кто занает что это за коды?
----
4.04.11
вопрос как передать название листа в dl.ConnectionString = ofd.Filename ?
ofd.Filename - имя файла есть подозрение надо указать еще имя листа
Вложения
Тип файла: zip сравнение.zip (5.6 Кб, 85 просмотров)

Последний раз редактировалось gizmo_zx, 04.04.2011 в 07:36.
gizmo_zx вне форума  
 
Автор темы   Непрочитано 08.04.2011, 10:39
#13
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Удалось запихать в dl.ConnectionString имя листа, но счастья по прежнему не обрел

dl.ConnectionString = ofd.Filename +"!имялиста"

Кто поможет расковырять словарь datalink.
В файлике см.пост выше лежит сравнение: одна связь создана менеджером (1), вторая програмно (AcExcel) разницу пометил.
Чем можно поправить значения.
gizmo_zx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > VBA/Lisp Acad2011 автоматизировать создание связи (Datalinkmanager)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нормативная документация для проектирования сетей связи firger77 Поиск литературы, чертежей, моделей и прочих материалов 3 14.08.2017 16:48
Максимальная ошибка в узле 50797 по направлению 2: 0.387%. Kastrulkin Расчетные программы 11 06.12.2011 15:35
Расчёт по СНиПу стальной стойки квадратного сечения не предусмотрен. Filя Металлические конструкции 330 09.02.2011 19:47
Непонятки со связями bezo Расчетные программы 8 06.06.2010 12:34
создание фундамента под башню связи в ЛИРЕ ЛЁЛЯ C Основания и фундаменты 3 19.02.2009 14:42