Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Elfilagas от 29-09-2016, 11:27:39

Название: Открыть таблицу параметрического ряда в Excel
Отправлено: Elfilagas от 29-09-2016, 11:27:39
Добрый день,
Подскажите, пожалуйста, как открыть редактирование таблицы когда в Excel ее меняешь.
Нужно добавить эту возможность в инструмент.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: mikazakov от 29-09-2016, 11:37:06
как открыть редактирование таблицы когда в Excel ее меняешь
Обязательно Эксель открывать? Параметрический ряд через API можно и без Экселя менять.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: Elfilagas от 29-09-2016, 11:50:07
Да, именно открыть нужно.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: mikazakov от 29-09-2016, 19:28:51
завтра вечером подробней взгляну
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 30-09-2016, 14:46:00
Обязательно Эксель открывать?
Да, именно открыть нужно.

У меня получился такой вот код:
Код - Visual Basic [Выбрать]
  1. Sub otkrit_excel()
  2.     Dim oDoc As AssemblyDocument
  3.     Set oDoc = ThisApplication.ActiveDocument
  4.     Dim oCD As AssemblyComponentDefinition
  5.     Set oCD = oDoc.ComponentDefinition
  6.    
  7.     Dim oFactory As iAssemblyFactory
  8.     Set oFactory = oCD.iAssemblyFactory
  9.  
  10.     Dim oExcelApp As Object
  11.     Set oExcelApp = oFactory.ExcelWorkSheet.Parent.Parent
  12.     oExcelApp.Visible = True
  13. End Sub
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: mikazakov от 30-09-2016, 16:25:05
Set oExcelApp = oFactory.ExcelWorkSheet.Parent.Parent
Мда, прыкольно как только идет обращение к экселевскому листу в диспетчере задач сразу появляется эксель загруженный в скрытом режиме.
После чего его можно сделать видимым.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 30-09-2016, 17:12:38
Мда, прыкольно как только идет обращение к экселевскому листу в диспетчере задач сразу появляется эксель загруженный в скрытом режиме.

Тоже удивился. В процессе написания кода проигрывал его много раз, когда строки изменения видимости еще не было. Потом решил открыть эксель, чтобы покопаться в его объектной модели. Так с открытием пустого документа эксель, наружу вылезло штук 20 документов с инфой об параметрических деталях, которые в скрытом режиме были подгружены ранее, аж комп подвис. :) Целый час гадал, как их видимыми сделать.

П.С. Еще немного интересностей, которые обнаружил:
Код - Visual Basic [Выбрать]
  1.     Dim oExcelApp As Object
  2.     Set oExcelApp = CreateObject("Excel.Application")
  3.     oExcelApp.Visible = True
  4.    
  5.     Dim tempWB As Object
  6.     Set tempWB = oExcelApp.WorkBooks.Add

Если в этом коде закомментировать строку создание WorkBook, то эксель просто закрывается.
Быть может поэтому, обращение программно к листу или книге автоматически запускает эксель, так как сам по себе эксель не может быть активным без них.



Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 30-09-2016, 17:16:15
Раз уж затронули тонкости экслеля:
Может кто-то знает, как в экселе открыть документ не по пути на компьютере, а по ссылке на объект? Я так и не смог это найти.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: Александр Ривилис от 30-09-2016, 17:52:35
Может кто-то знает, как в экселе открыть документ не по пути на компьютере, а по ссылке на объект? Я так и не смог это найти.
Уточни что ты имеешь в виду.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 30-09-2016, 18:10:04
Уточни что ты имеешь в виду.
Ищу метод, которым можно открыть книгу экселя, где аргумент является объектом типом WorkBook. П.С. Смысл том, что в методе WorkBooks.Open() агрументом является путь к документу, то есть не сохраненный документ, который висит в трее (как в примере выше) ты активировать как бы не можешь.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: Александр Ривилис от 01-10-2016, 00:32:09
Ну тут понятно, что нужно перебрать все WorkBook у Application и использовать метод Activate. Как-то так.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 01-10-2016, 12:11:35
Ну тут понятно, что нужно перебрать все WorkBook у Application и использовать метод Activate.
Спасибо за совет, но все равно не получилось. Книга так и остается в фоновом режиме. Ну ладно, это уже совсем другая история. Elfilagas, мой код решил вашу задачу? А то я видел, что вы смотрели тему, но что-то подозрительно молчите!? ;)
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: Александр Ривилис от 01-10-2016, 12:45:11
Спасибо за совет, но все равно не получилось. Книга так и остается в фоновом режиме.
А как ты к нему обращался? Если ты использовал:
Код - Visual Basic [Выбрать]
  1. Dim oExcelApp As Object
  2. Set oExcelApp = CreateObject("Excel.Application")
то точно ничего не получится - ты запускаешь еще один Excel, а нужно обратится к уже запущенному.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 01-10-2016, 18:29:51
А как ты к нему обращался?
   
Код - Visual Basic [Выбрать]
  1.     Dim oDoc As AssemblyDocument
  2.     Set oDoc = ThisApplication.ActiveDocument
  3.     Dim oCD As AssemblyComponentDefinition
  4.     Set oCD = oDoc.ComponentDefinition
  5.     Dim oFactory As iAssemblyFactory
  6.     Set oFactory = oCD.iAssemblyFactory
  7.     Dim WorkBook As Object
  8.     Set WorkBook = oFactory.ExcelWorkSheet.Parent
  9.     WorkBook.Activate
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: Александр Ривилис от 01-10-2016, 22:24:37
Так тоже не помогает?
Код - Visual Basic [Выбрать]
  1. Dim oDoc As AssemblyDocument
  2. Set oDoc = ThisApplication.ActiveDocument
  3. Dim oCD As AssemblyComponentDefinition
  4. Set oCD = oDoc.ComponentDefinition
  5. Dim oFactory As iAssemblyFactory
  6. Set oFactory = oCD.iAssemblyFactory
  7. Dim WorkBook As Object
  8. Set WorkBook = oFactory.ExcelWorkSheet.Parent
  9. Dim oExcelApp As Object
  10. Set oExcelApp = oFactory.ExcelWorkSheet.Parent.Parent
  11. oExcelApp.Visible = True
  12. WorkBook.Activate

Возможно еще понадобится комбинация из вызовов Win32 API для oExcelApp.Hwnd:
Код - Visual Basic [Выбрать]
  1. ShowWindow(hWnd, SW_SHOW);
  2. ShowWindow(hWnd, SW_RESTORE);
  3. SetForegroundWindow(hWnd);
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 01-10-2016, 23:33:43
Так тоже не помогает?
Нет, вы меня не поняли, код что я приводил выше - "вроде как рабочий".
Код - Visual Basic [Выбрать]
  1. Set oExcelApp = oFactory.ExcelWorkSheet.Parent.Parent
  2. oExcelApp.Visible = True
Этот способ запускает приложение эксель с нужной книгой. Но если использовать этот метод, то после сохранения и закрытия документа, эксель все еще остается в трее, тогда как в пользовательском интерфейсе этого не происходит. То есть это код не является аналогией.
Следствие:
Если сначала закрыть приложение эксель, а потом снова попытаться обратиться тем же способом, у меня через раз падает инвентор (то бишь ни разу не надежно):
Код - Visual Basic [Выбрать]
  1. Sub otkrit_excel_3()
  2.     Dim oDoc As AssemblyDocument
  3.     Set oDoc = ThisApplication.ActiveDocument
  4.     Dim oCD As AssemblyComponentDefinition
  5.     Set oCD = oDoc.ComponentDefinition
  6.     Dim oFactory As iAssemblyFactory
  7.     Set oFactory = oCD.iAssemblyFactory
  8.     Dim oExcelApp As Object
  9.     Set oExcelApp = oFactory.ExcelWorkSheet.Parent.Parent
  10.     oExcelApp.Save
  11.     oExcelApp.Quit
  12.    
  13.     Set oExcelApp = oFactory.ExcelWorkSheet.Parent.Parent
  14.     oExcelApp.Visible = True
  15. End Sub

П.С. Поэтому обращение с помощью родительских связей, на мой взгляд, это какой-то кривой способ, да еще и диспетчер задач чистить надо. Вот и пытаюсь найти более простой метод.
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: Elfilagas от 03-10-2016, 08:41:30
R.I.Chernov, не успел в пятницу ответить. Спасибо за решение!
Название: Re: Открыть таблицу параметрического ряда в Excel
Отправлено: R.I.Chernov от 03-10-2016, 09:34:09
Elfilagas, на здоровье. Правда я больше не уверен, что это решение: после закрытия экселя (который открывает мой код), как оказалось, эксель все равно остается в фоновых программах (мы это обсуждали с Александром чуть выше).