Excel таблица в чертеже

Автор Тема: Excel таблица в чертеже  (Прочитано 13087 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Excel таблица в чертеже
« : 19-05-2016, 08:13:04 »
В чертеже вставлена таблица из файла Excel. Я вижу ее содержимое в объекте:
Dim oSheet As Sheet
oSheet.CustonTables
А вот где можно найти ссылку на файл Excel? И можно ли средствами API выполнить замену этой ссылки?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #1 : 19-05-2016, 14:04:14 »
Так как никто с Invent'оровцев не откликается, то я попробую вставить свои 5 копеек.
Я проанализировал методы CustomTable и ничего подобного на путь к Excel-файлу не нашёл. Есть свойство TableSource, позволяющее понять что исходник - файл Excel. Есть метод AddLink(string FullFileName), который (IMHO) позволяет указать какой файл будет связан с этой таблицей. Есть метод Update, который (IMHO) обновляет таблицу.
Чего я не могу проверить, так это нет ли пути к Excel-файлу в атрибутах (свойство AttributeSets) - вполне возможно, что один из атрибутов указывает на путь к файлу Excel.

Если ответ тебя не удовлетворил - могу отправить твой вопрос в ADN DevHelp.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Excel таблица в чертеже
« Ответ #2 : 19-05-2016, 16:35:56 »
Никогда не вставлял в чертёж эксель, в 2013 таблица плохо отрисовывается. Не подскажете, как именно вы ее вставили? Быть может таблица есть в коллекции встроенных объектов?
В программировании я новичок...но ненадолго! ;)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #3 : 19-05-2016, 16:58:31 »
Вручную как-то так: http://www.cad.ru/ru/forum/?PAGE_NAME=read&FID=20&TID=7721
А программно - объект CustomTables.AddExcelTable(...)
« Последнее редактирование: 19-05-2016, 19:37:30 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #4 : 19-05-2016, 20:14:55 »
А вот где можно найти ссылку на файл Excel?
Ну филат смотрим в
Document.ReferencedOLEFileDescriptors(1)
или по локальнее
Document.ActiveSheet.CustomTables(1).ReferencedOLEFileDescriptors
там все твои ссылки на посторонние файлы

И можно ли средствами API выполнить замену этой ссылки?
Не получится, можно только удалить старую таблицу и воткнуть новую:
CustomTables.AddExcelTable

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

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Excel таблица в чертеже
« Ответ #5 : 19-05-2016, 20:38:55 »
Ну филат смотрим в
Document.ReferencedOLEFileDescriptors(1)

Удобнее использовать ReferencedOLEFileDescriptors.ItemByName().
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #6 : 19-05-2016, 20:42:05 »
Удобнее использовать ReferencedOLEFileDescriptors.ItemByName().
У филата понятие "удобство при программировании" весьма своеобразное :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #7 : 19-05-2016, 22:40:31 »
или по локальнее
Document.ActiveSheet.CustomTables(1).ReferencedOLEFileDescriptors
там все твои ссылки на посторонние файлы
Я нашёл у CustomTable свойство ReferencedDocumentDescriptor, но не нашёл ReferencedOLEFileDescriptors. Это у тебя опечатка или я не туда смотрел?



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #8 : 20-05-2016, 06:00:30 »
Это у тебя опечатка или я не туда смотрел?
Да я лепил ответ по хелпу уже ночью, видимо опечатался,
ReferencedOLEFileDescriptors - на уровне документа
ReferencedDocumentDescriptor - в CustomTable (Хэлп пишет: Property that returns either a DocumentDescriptor object (for Inventor references) or a FileDescriptor object (for foreign file references). The property returns Nothing if no links have been specified for the table.)

Но филат бы там мимо не прошел бы :)

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #9 : 20-05-2016, 10:35:56 »
OLE - ссылка это вторичный элемент - его может и не быть. Если удалить ссылку в браузере чертежа, то таблица никуда не девается и связь с excel файлом сохраняется...
Замену, конечно, можно реализовать через удаление старой таблицы и AddExcelTable новой. Но для меня остается проблемой получения адреса таблицы, при отсутствии OLE - ссылки!?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #10 : 20-05-2016, 10:56:05 »
Но для меня остается проблемой получения адреса таблицы, при отсутствии OLE - ссылки!?
Что возвращает ReferencedDocumentDescriptor для  CustomTable такой таблицы?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #11 : 20-05-2016, 11:02:15 »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #12 : 20-05-2016, 11:06:52 »
Ага. Значит оно не пустое. Приведи это значение к FileDescriptor и получи при помощи метода FullFileName путь к файлу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #13 : 20-05-2016, 11:16:32 »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #14 : 20-05-2016, 13:21:11 »
Увы, но приведение к oDesc = CType(oCTable.ReferencedDocumentDescriptor, FileDescriptor) приводит к ошибке, при отсутствии OLE-ссылки.
Также не получается реализовать замену при отсутствующей OLE-ссылки.
Прийдется, наверное, всетаки реализовывать через удаление...

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #15 : 20-05-2016, 13:38:39 »
Да, реализация через удаление - это самый надежный метод, но и у него есть минус: в новой таблице ширина колонок слетает...

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #16 : 20-05-2016, 13:44:18 »
: в новой таблице ширина колонок слетает...
А на таблицы чертежные стили не распространяются?

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #17 : 20-05-2016, 13:54:32 »
: в новой таблице ширина колонок слетает...
А на таблицы чертежные стили не распространяются?
Ну не будешь же под каждую таблицу свой стиль создавать - ИМХО
Но в целом, вопрос решаемый - добавляется два цикла: считывание массива ширин колонок в старой таблице(до удаления) и возврат данных из массива в новую таблицу:
Код - vb.net [Выбрать]
  1. For i2 = 1 To oCTable.Columns.Count
  2.     oCTable.Columns.Item(i2).Width = oWidth(i2)
  3. Next

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #18 : 20-05-2016, 14:13:01 »
Но в целом, вопрос решаемый - добавляется два цикла: считывание массива ширин колонок в старой таблице(до удаления) и возврат данных из массива в новую таблицу:
Зачем два цикла если достаточно одного: цикл по колонкам старой таблицы и сразу присвоение ширин колонкам новой таблицы? И только после этого старая таблица удаляется. Конечно это справедливо только для случая, когда количество колонок в таблицах совпадает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #19 : 20-05-2016, 14:52:58 »
Новая таблица получается методом копирования файла старой таблицы - поэтому количество колонок одинаково всегда.
Да, старую таблицу можно у далить и после вставки новой.

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #20 : 29-03-2021, 08:35:08 »
For i2 = 1 To oCTable.Columns.Count
    oCTable.Columns.Item(i2).Width = oWidth(i2)
Next
Что-то я не понимаю: Width  похоже только для чтения?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #21 : 29-03-2021, 10:10:33 »
это вопрос по экселю? или по инвенторовской таблице?

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #22 : 30-03-2021, 07:56:31 »
это вопрос по экселю? или по инвенторовской таблице?
Это по экселевской таблице в инвенторе - CustomTables

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #23 : 30-03-2021, 11:26:58 »
в инвенторе - CustomTables
Судя по описанию Column.Width в кастом тэйбл должно редактироватьсяъ
Может тебе документ.апдейт вызвать?


Column.Width Property

Parent Object: Column

Description

Specifies the width of the column.

Syntax
Column.Width() As Double
Property Value
This is a read/write property whose value is a Double.


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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #24 : 30-03-2021, 12:04:43 »
Пробовал Дабл



Еще пробовал Integer - пишет про тоже Int32...

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #25 : 30-03-2021, 20:00:16 »
запусти, это у меня сработало
Код - Visual Basic [Выбрать]
  1. Sub ff()
  2. Dim oDrw As DrawingDocument: Set oDrw = ThisApplication.ActiveDocument
  3. Dim ff As CustomTable: Set ff = oDrw.ActiveSheet.CustomTables(1)
  4. ff.Columns(1).Width = (10)
  5. End Sub
  6.  
Почему твое не срабатывает трудно сказать

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Excel таблица в чертеже
« Ответ #26 : 30-03-2021, 20:04:30 »
Почему твое не срабатывает трудно сказать
Мне почему-то кажется, что ошибка в коде filat не на строке
Код - Visual Basic [Выбрать]
  1. oCTable.Columns.Item(1).Width = oWidth
а где-то раньше.
Или вместо этой строки должно быть (т.е. Item не нужно):
Код - Visual Basic [Выбрать]
  1. oCTable.Columns(1).Width = oWidth
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Excel таблица в чертеже
« Ответ #27 : 31-03-2021, 02:39:52 »
В C# ширина столбца задается так:

Код - C# [Выбрать]
  1. customTable.Columns[1].Width = 55;
, где customTable - ссылка на таблицу.

oCTable.Columns.Item(1).Width = oWidth

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

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

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Excel таблица в чертеже
« Ответ #28 : 31-03-2021, 02:43:10 »
Глупость коненчо, но может стоит попробовать ширину задавать интом, а не даблом? Или, наоборот, присвоить oWidth = 6.0
В программировании я новичок...но ненадолго! ;)

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #29 : 31-03-2021, 07:24:11 »
Ребята, вот у вас работает изменение ширины таблицы - это именно таблица эксель вставленная в чертеж? в каких АИ проведен опыт?

ff.Columns(1).Width = (10)
для чего установлены скобки вокруг числа?

чуть позже выложу файлы моего примера - может в файле что не так...

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #30 : 31-03-2021, 07:41:47 »
ой, я не могу, Влад, ты что экселевскую таблицу оле-объектом чтоль вставил на чертеж и пытаешься редактировать?

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #31 : 31-03-2021, 07:51:34 »
 
ой, я не могу, Влад, ты что экселевскую таблицу оле-объектом чтоль вставил на чертеж и пытаешься редактировать?
:o ну так тема вообще-то про это вся... Точнее началом было восстановление слетевшей ссылки...
Свойство Width показывает ширину колонки вставленной экселевской таблицы, интерфейс АИ позволяет ее менять, а программно - получаю то что на картинке  :'(

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #32 : 31-03-2021, 08:53:02 »
Не там как то не так должно быть, ты должен ссылку на книгу экселя получить, а там уже через АПИ экселя что то менять. Сам то инвентор не умеет с АПИ экселя работать.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #33 : 31-03-2021, 08:55:27 »
А у тебя просто ссылка на внешний файл экселя?

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #34 : 31-03-2021, 10:33:43 »
Не там как то не так должно быть, ты должен ссылку на книгу экселя получить, а там уже через АПИ экселя что то менять. Сам то инвентор не умеет с АПИ экселя работать.
Не уверен в полной правильности этого утверждения: если изменить текст в файле экселя, то изменения отображаются в файле АИ, а если изменить ширину колонки в эксель - то для файла АИ ничего не меняется.

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #35 : 31-03-2021, 10:35:00 »
Пример

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Excel таблица в чертеже
« Ответ #36 : 31-03-2021, 17:11:28 »
Ну вот предыдущий макрос меняет ширину столбца
Код - Visual Basic [Выбрать]
  1. Sub ff()
  2. Dim oDrw As DrawingDocument: Set oDrw = ThisApplication.ActiveDocument
  3. Dim ff As CustomTable: Set ff = oDrw.ActiveSheet.CustomTables(1)
  4. ff.Columns(1).Width = (10)
  5. End Sub
  6.  


А почему ты думал что ширина столбцов меняться должна? По всей видимости передаются только данные.

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

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Re: Excel таблица в чертеже
« Ответ #37 : 01-04-2021, 07:06:11 »
Ну вот предыдущий макрос меняет ширину столбца
Вот то-то и оно - я макрос сразу опробовал - видимо функционирование зависит от версии АИ