Необходимо изменить диапазон имен Excel, на который указывает ссылка на данные AutoCAD. - PullRequest
0 голосов
/ 07 июня 2019

У меня есть большое количество похожих файлов DWG, у каждого из которых есть таблица, связанная с Excel через канал передачи данных. эти таблицы изменяются в каждом файле и с течением времени.

Что я хочу сделать, так это перейти к каждому файлу DWG и изменить канал передачи данных, чтобы он указывал на именованный диапазон апропиатов в Excel.

до сих пор мне удалось заставить все это работать, кроме изменения, где ссылка на данные указывает на

обратите внимание, что команда send не будет работать, так как нет способа управлять ссылками на данные из строки команды

вот сообщение на форумах autocad, которое проливает свет, но я понятия не имею, где найти или как использовать библиотеку cao https://forums.autodesk.com/t5/visual-basic-customization/repath-the-excel-reference-through-vba/td-p/5432417

   'change data link on floor to point to coresponding named range
          'here is where the issue starts, open to sugestions
       Dim activeDict As Object        'each dictionary to loop thru
       Dim activeDataLink As Object    'each data link in the file to loop thry
       For Each activeDict In dwgFile.Database.Dictionaries   'loop thru all dictionaries in the file
           On Error Resume Next   'some dictionaries don't have the "name" property
           If activeDict.Name = "ACAD_DATALINK" Then  'check if the active dictionary is the one for Data links
               For Each activeDataLink In activeDict    'loop thru all the data links in the dictionary
               Dim dictObj As AcadDictionary
               Dim datalinkObj As Object
               'another way to acces the data link dictionary
                   Set dictObj = acadFile.Database.Dictionaries.Item("ACAD_DATALINK")  ''test to see if the object is created, it is
               'another way to access the datalink in the dictionary
                   Set datalinkObj = dictObj.Item("SYSTEM SUMMARY NOTES")              ''test to see if the object is created, it is    'HERE HERE HERE HERE
                   'the data link i want to change is called "SYSTEM SUMMARY NOTES" and is present in every file
                   TEST = datalinkObj.Name 'doesn't work
                   TEST = datalinkObj.Value 'doesn't work
                   TEST = datalinkObj.PATH 'doesn't work HERE HERE HERE HERE
               Next activeDataLink
           End If
           On Error GoTo 0
      Next activeDict

идеальный результат изменился бы, если ссылка на данные указывает на

обновление: это позволяет вам проходить по всем словарям, пока не дойдете до словаря каналов данных, обращающегося к библиотеке CAO. затем проходит через все каналы данных (и я снова застрял)

Sub repathDatalink(dwgFile As AcadDocument, datalinkName As String, xlsFilePath As String, xlsNamedRange As String)
    Dim activeDict As Object        'each dictionary to loop thru
    Dim activeDataLink As Object    'each data link in the file to loop thry
    Dim test
    Dim caoLib As Object
        Set caoLib = AutoCAD.GetInterfaceObject("CAO.DbConnect.20")
            'For Each activeDict In dwgFile.Database.Dictionaries   'loop thru all dictionaries in the file
    For Each activeDict In caoLib.GetLinks.Document.Dictionaries   'loop thru all dictionaries in the file
        On Error Resume Next
        If activeDict.Name = "ACAD_DATALINK" And Not activeDict Is Nothing Then
            For Each activeDataLink In activeDict
                caoLib.GetLinks.Document.Dictionaries.Item(2).Item (0)
                activeDict              'dictionary with all the data links
                activeDataLink          'each data link in the datalink dictionary
            Next activeDataLink
        End If
        On Error GoTo 0
    Next activeDict
    End Sub

насколько я могу судить, он проходит через активную dwg (с которой я мог бы справиться)

1 Ответ

0 голосов
/ 10 июня 2019

После некоторых исследований кажется, что вам нужно взаимодействовать с AutoCAD DbConnect-объектом , однако после некоторых экспериментов с использованием Visual LISP, хотя я могу взаимодействовать с этим объектом, я не могу получить какие-либо данныессылки, созданные в активном чертеже.

При взаимодействии с этим объектом вам необходимо использовать ProgID:

"CAO.DbConnect.20"

или:

"CAO.DbConnect.16"

Если используется более ранняя версия AutoCAD.

...