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

ADN Club => Inventor API => Тема начата: filat от 19-05-2016, 08:13:04

Название: Excel таблица в чертеже
Отправлено: filat от 19-05-2016, 08:13:04
В чертеже вставлена таблица из файла Excel. Я вижу ее содержимое в объекте:
Dim oSheet As Sheet
oSheet.CustonTables
А вот где можно найти ссылку на файл Excel? И можно ли средствами API выполнить замену этой ссылки?
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 19-05-2016, 14:04:14
Так как никто с Invent'оровцев не откликается, то я попробую вставить свои 5 копеек.
Я проанализировал методы CustomTable и ничего подобного на путь к Excel-файлу не нашёл. Есть свойство TableSource, позволяющее понять что исходник - файл Excel. Есть метод AddLink(string FullFileName), который (IMHO) позволяет указать какой файл будет связан с этой таблицей. Есть метод Update, который (IMHO) обновляет таблицу.
Чего я не могу проверить, так это нет ли пути к Excel-файлу в атрибутах (свойство AttributeSets) - вполне возможно, что один из атрибутов указывает на путь к файлу Excel.

Если ответ тебя не удовлетворил - могу отправить твой вопрос в ADN DevHelp.
Название: Re: Excel таблица в чертеже
Отправлено: R.I.Chernov от 19-05-2016, 16:35:56
Никогда не вставлял в чертёж эксель, в 2013 таблица плохо отрисовывается. Не подскажете, как именно вы ее вставили? Быть может таблица есть в коллекции встроенных объектов?
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 19-05-2016, 16:58:31
Вручную как-то так: http://www.cad.ru/ru/forum/?PAGE_NAME=read&FID=20&TID=7721
А программно - объект CustomTables.AddExcelTable(...)
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 19-05-2016, 20:14:55
А вот где можно найти ссылку на файл Excel?
Ну филат смотрим в
Document.ReferencedOLEFileDescriptors(1)
или по локальнее
Document.ActiveSheet.CustomTables(1).ReferencedOLEFileDescriptors
там все твои ссылки на посторонние файлы

И можно ли средствами API выполнить замену этой ссылки?
Не получится, можно только удалить старую таблицу и воткнуть новую:
CustomTables.AddExcelTable
Название: Re: Excel таблица в чертеже
Отправлено: R.I.Chernov от 19-05-2016, 20:38:55
Ну филат смотрим в
Document.ReferencedOLEFileDescriptors(1)

Удобнее использовать ReferencedOLEFileDescriptors.ItemByName().
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 19-05-2016, 20:42:05
Удобнее использовать ReferencedOLEFileDescriptors.ItemByName().
У филата понятие "удобство при программировании" весьма своеобразное :)
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 19-05-2016, 22:40:31
или по локальнее
Document.ActiveSheet.CustomTables(1).ReferencedOLEFileDescriptors
там все твои ссылки на посторонние файлы
Я нашёл у CustomTable свойство ReferencedDocumentDescriptor, но не нашёл ReferencedOLEFileDescriptors. Это у тебя опечатка или я не туда смотрел?

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F102061%2F7842324.6%2F0_125d0a_2c561868_orig.png&hash=dc08f7226476efed25309ff9889007d9)

Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 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.)

Но филат бы там мимо не прошел бы :)
Название: Re: Excel таблица в чертеже
Отправлено: filat от 20-05-2016, 10:35:56
OLE - ссылка это вторичный элемент - его может и не быть. Если удалить ссылку в браузере чертежа, то таблица никуда не девается и связь с excel файлом сохраняется...
Замену, конечно, можно реализовать через удаление старой таблицы и AddExcelTable новой. Но для меня остается проблемой получения адреса таблицы, при отсутствии OLE - ссылки!?
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 20-05-2016, 10:56:05
Но для меня остается проблемой получения адреса таблицы, при отсутствии OLE - ссылки!?
Что возвращает ReferencedDocumentDescriptor для  CustomTable такой таблицы?
Название: Re: Excel таблица в чертеже
Отправлено: filat от 20-05-2016, 11:02:15
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fstatic2.keep4u.ru%2F2016%2F05%2F20%2FCustomTable72e56.jpg&hash=94bcd78e8ec2904f24cc800eb7df5f8d) (http://keep4u.ru/image/SatCA)
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 20-05-2016, 11:06:52
Ага. Значит оно не пустое. Приведи это значение к FileDescriptor и получи при помощи метода FullFileName путь к файлу.
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 20-05-2016, 11:16:32
Кстати, здесь: https://forums.autodesk.com/t5/inventor-customization/updating-custom-table-sources/td-p/4400941 и здесь: https://forums.autodesk.com/t5/inventor-customization/ilogic-change-excel-chart-loction/td-p/2838307 показано как можно заменить ссылку на excel-файл.
Название: Re: Excel таблица в чертеже
Отправлено: filat от 20-05-2016, 13:21:11
Увы, но приведение к oDesc = CType(oCTable.ReferencedDocumentDescriptor, FileDescriptor) приводит к ошибке, при отсутствии OLE-ссылки.
Также не получается реализовать замену при отсутствующей OLE-ссылки.
Прийдется, наверное, всетаки реализовывать через удаление...
Название: Re: Excel таблица в чертеже
Отправлено: filat от 20-05-2016, 13:38:39
Да, реализация через удаление - это самый надежный метод, но и у него есть минус: в новой таблице ширина колонок слетает...
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 20-05-2016, 13:44:18
: в новой таблице ширина колонок слетает...
А на таблицы чертежные стили не распространяются?
Название: Re: Excel таблица в чертеже
Отправлено: filat от 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
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 20-05-2016, 14:13:01
Но в целом, вопрос решаемый - добавляется два цикла: считывание массива ширин колонок в старой таблице(до удаления) и возврат данных из массива в новую таблицу:
Зачем два цикла если достаточно одного: цикл по колонкам старой таблицы и сразу присвоение ширин колонкам новой таблицы? И только после этого старая таблица удаляется. Конечно это справедливо только для случая, когда количество колонок в таблицах совпадает.
Название: Re: Excel таблица в чертеже
Отправлено: filat от 20-05-2016, 14:52:58
Новая таблица получается методом копирования файла старой таблицы - поэтому количество колонок одинаково всегда.
Да, старую таблицу можно у далить и после вставки новой.
Название: Re: Excel таблица в чертеже
Отправлено: filat от 29-03-2021, 08:35:08
For i2 = 1 To oCTable.Columns.Count
    oCTable.Columns.Item(i2).Width = oWidth(i2)
Next
Что-то я не понимаю: Width  похоже только для чтения?
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 29-03-2021, 10:10:33
это вопрос по экселю? или по инвенторовской таблице?
Название: Re: Excel таблица в чертеже
Отправлено: filat от 30-03-2021, 07:56:31
это вопрос по экселю? или по инвенторовской таблице?
Это по экселевской таблице в инвенторе - CustomTables
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 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.

Название: Re: Excel таблица в чертеже
Отправлено: filat от 30-03-2021, 12:04:43
Пробовал Дабл


(https://i.ibb.co/Y2Gt3Bm/Width.jpg) (https://ibb.co/H7QrVT6)
Еще пробовал Integer - пишет про тоже Int32...
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 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.  
Почему твое не срабатывает трудно сказать
Название: Re: Excel таблица в чертеже
Отправлено: Александр Ривилис от 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
Название: Re: Excel таблица в чертеже
Отправлено: R.I.Chernov от 31-03-2021, 02:39:52
В C# ширина столбца задается так:

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

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

Так что по идее должно работать
Название: Re: Excel таблица в чертеже
Отправлено: R.I.Chernov от 31-03-2021, 02:43:10
Глупость коненчо, но может стоит попробовать ширину задавать интом, а не даблом? Или, наоборот, присвоить oWidth = 6.0
Название: Re: Excel таблица в чертеже
Отправлено: filat от 31-03-2021, 07:24:11
Ребята, вот у вас работает изменение ширины таблицы - это именно таблица эксель вставленная в чертеж? в каких АИ проведен опыт?

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

чуть позже выложу файлы моего примера - может в файле что не так...
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 31-03-2021, 07:41:47
ой, я не могу, Влад, ты что экселевскую таблицу оле-объектом чтоль вставил на чертеж и пытаешься редактировать?
Название: Re: Excel таблица в чертеже
Отправлено: filat от 31-03-2021, 07:51:34
 
ой, я не могу, Влад, ты что экселевскую таблицу оле-объектом чтоль вставил на чертеж и пытаешься редактировать?
:o ну так тема вообще-то про это вся... Точнее началом было восстановление слетевшей ссылки...
Свойство Width показывает ширину колонки вставленной экселевской таблицы, интерфейс АИ позволяет ее менять, а программно - получаю то что на картинке  :'(
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 31-03-2021, 08:53:02
Не там как то не так должно быть, ты должен ссылку на книгу экселя получить, а там уже через АПИ экселя что то менять. Сам то инвентор не умеет с АПИ экселя работать.
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 31-03-2021, 08:55:27
А у тебя просто ссылка на внешний файл экселя?
Название: Re: Excel таблица в чертеже
Отправлено: filat от 31-03-2021, 10:33:43
Не там как то не так должно быть, ты должен ссылку на книгу экселя получить, а там уже через АПИ экселя что то менять. Сам то инвентор не умеет с АПИ экселя работать.
Не уверен в полной правильности этого утверждения: если изменить текст в файле экселя, то изменения отображаются в файле АИ, а если изменить ширину колонки в эксель - то для файла АИ ничего не меняется.
Название: Re: Excel таблица в чертеже
Отправлено: filat от 31-03-2021, 10:35:00
Пример
Название: Re: Excel таблица в чертеже
Отправлено: mikazakov от 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.  

(https://i.postimg.cc/7fv5py8K/image.png) (https://postimg.cc/7fv5py8K)
А почему ты думал что ширина столбцов меняться должна? По всей видимости передаются только данные.
Название: Re: Excel таблица в чертеже
Отправлено: filat от 01-04-2021, 07:06:11
Ну вот предыдущий макрос меняет ширину столбца
Вот то-то и оно - я макрос сразу опробовал - видимо функционирование зависит от версии АИ