Открыть таблицу параметрического ряда в Excel

Автор Тема: Открыть таблицу параметрического ряда в Excel  (Прочитано 12531 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Добрый день,
Подскажите, пожалуйста, как открыть редактирование таблицы когда в Excel ее меняешь.
Нужно добавить эту возможность в инструмент.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
как открыть редактирование таблицы когда в Excel ее меняешь
Обязательно Эксель открывать? Параметрический ряд через API можно и без Экселя менять.

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Да, именно открыть нужно.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
завтра вечером подробней взгляну

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Обязательно Эксель открывать?
Да, именно открыть нужно.

У меня получился такой вот код:
Код - 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
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Set oExcelApp = oFactory.ExcelWorkSheet.Parent.Parent
Мда, прыкольно как только идет обращение к экселевскому листу в диспетчере задач сразу появляется эксель загруженный в скрытом режиме.
После чего его можно сделать видимым.

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Мда, прыкольно как только идет обращение к экселевскому листу в диспетчере задач сразу появляется эксель загруженный в скрытом режиме.

Тоже удивился. В процессе написания кода проигрывал его много раз, когда строки изменения видимости еще не было. Потом решил открыть эксель, чтобы покопаться в его объектной модели. Так с открытием пустого документа эксель, наружу вылезло штук 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, то эксель просто закрывается.
Быть может поэтому, обращение программно к листу или книге автоматически запускает эксель, так как сам по себе эксель не может быть активным без них.



В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Раз уж затронули тонкости экслеля:
Может кто-то знает, как в экселе открыть документ не по пути на компьютере, а по ссылке на объект? Я так и не смог это найти.
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Может кто-то знает, как в экселе открыть документ не по пути на компьютере, а по ссылке на объект? Я так и не смог это найти.
Уточни что ты имеешь в виду.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Уточни что ты имеешь в виду.
Ищу метод, которым можно открыть книгу экселя, где аргумент является объектом типом WorkBook. П.С. Смысл том, что в методе WorkBooks.Open() агрументом является путь к документу, то есть не сохраненный документ, который висит в трее (как в примере выше) ты активировать как бы не можешь.
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну тут понятно, что нужно перебрать все WorkBook у Application и использовать метод Activate. Как-то так.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Ну тут понятно, что нужно перебрать все WorkBook у Application и использовать метод Activate.
Спасибо за совет, но все равно не получилось. Книга так и остается в фоновом режиме. Ну ладно, это уже совсем другая история. Elfilagas, мой код решил вашу задачу? А то я видел, что вы смотрели тему, но что-то подозрительно молчите!? ;)
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Спасибо за совет, но все равно не получилось. Книга так и остается в фоновом режиме.
А как ты к нему обращался? Если ты использовал:
Код - Visual Basic [Выбрать]
  1. Dim oExcelApp As Object
  2. Set oExcelApp = CreateObject("Excel.Application")
то точно ничего не получится - ты запускаешь еще один Excel, а нужно обратится к уже запущенному.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
А как ты к нему обращался?
   
Код - 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
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Так тоже не помогает?
Код - 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);
« Последнее редактирование: 01-10-2016, 23:16:49 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение