• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Открыть файлы чертежей и в штампе исправить надпись

Автор Sasha_teh, 04.10.24, 15:14:28

« назад - далее »

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

Sasha_teh

Здравствуйте! Есть такая задачка - у чертежей надо в штампе основной надписи заменить фамилию разработчика. Я написал скрипт на Python с применением макросов, а потом отредактировал под себя. Не могу понять почему получаю ошибку: "'NoneType' object has no attribute 'LayoutSheets'". Догадываюсь что ошибка из-за того что документ не открылся, но не могу понять почему. Вроде функция documents.Open(..., True, False)  должна открывать документ?  Или я чего-то не знаю?

import os
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
application.Visible = True
documents = application.Documents
try:
    script_dir = os.path.dirname(os.path.realpath(__file__))
    spisoks = os.listdir(script_dir)        # список файлов
    i = 0
    for f in spisoks:
        if f.find('.cdw') != -1:
              kompas_document = documents.Open(f, True, False)  # Открой документ
              kompas_document = application.ActiveDocument # Получи интерфейс активного документа
##  Отредактируй ячейки основной надписи на листе 1
              layout_sheets = kompas_document.LayoutSheets
              layout_sheet = layout_sheets.Item(0)
              stamp = layout_sheet.Stamp
              text = stamp.Text(110)
              text.Str = ""  # здесь будет нужный текст потом
              stamp.Update()
            i += 1
        if i >= 5:  # здесь ограничиваюсь пока 5 файлами
            print("Завершено!")
            break

except BaseException as e:
    print(e)

lavgirb

Когда объект один, КОМПАС возвращает его не массивом из одного объекта, а отдельным объектом.
Может быть в этом причина?
Откройте чертеж с двумя листами, для пробы.

Sasha_teh

У меня все чертежи в которых надо исправить состоят только из одного листа.

Валерий Изранов

Цитата: Sasha_teh от 04.10.24, 15:14:28у чертежей надо в штампе основной надписи заменить фамилию разработчика
А много ли у вас таких чертежей: 10-100-1000?

Михаил88

import os
import pythoncom
from win32com.client import Dispatch, gencache

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(
    Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID,
                                                            pythoncom.IID_IDispatch))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(
    Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID,
                                                            pythoncom.IID_IDispatch))
application = kompas_api_object.Application
application.Visible = True
documents = application.Documents

script_dir = os.path.dirname(os.path.realpath(__file__))
spisoks = os.listdir(script_dir)  # список файлов
i = 0
for f in spisoks:
    if f.find('.cdw') != -1:
        kompas_document = documents.Open(f, True, False)  # Открой документ
        # Отредактируй ячейки основной надписи на листе 1
        layout_sheets = kompas_document.LayoutSheets
        layout_sheet = layout_sheets.Item(0)
        stamp = layout_sheet.Stamp
        text = stamp.Text(110)
        text.Str = "Иванов"  # здесь будет нужный текст потом
        stamp.Update()
        i += 1
    if i >= 5:  # здесь ограничиваюсь пока 5 файлами
        print("Завершено!")
        break

У Вас отступ больше 4 пробелов был.
+ Благодарностей: 1

Sasha_teh


Sasha_teh

Цитата: Михаил88 от 04.10.24, 18:32:07import os
import pythoncom
from win32com.client import Dispatch, gencache

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(
    Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID,
                                                            pythoncom.IID_IDispatch))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(
    Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID,
                                                            pythoncom.IID_IDispatch))
application = kompas_api_object.Application
application.Visible = True
documents = application.Documents

script_dir = os.path.dirname(os.path.realpath(__file__))
spisoks = os.listdir(script_dir)  # список файлов
i = 0
for f in spisoks:
    if f.find('.cdw') != -1:
        kompas_document = documents.Open(f, True, False)  # Открой документ
        # Отредактируй ячейки основной надписи на листе 1
        layout_sheets = kompas_document.LayoutSheets
        layout_sheet = layout_sheets.Item(0)
        stamp = layout_sheet.Stamp
        text = stamp.Text(110)
        text.Str = "Иванов"  # здесь будет нужный текст потом
        stamp.Update()
        i += 1
    if i >= 5:  # здесь ограничиваюсь пока 5 файлами
        print("Завершено!")
        break

У Вас отступ больше 4 пробелов был.


Спасибо, в следующий раз буду внимательнее.

Toptotal

Цитата: Sasha_teh от 04.10.24, 15:14:28Есть такая задачка - у чертежей надо в штампе основной надписи заменить фамилию разработчика.

Цитата: Sasha_teh от 04.10.24, 16:37:40У меня все чертежи в которых надо исправить состоят только из одного листа.
Цитата: Sasha_teh от 04.10.24, 19:57:35Чуть более 2000.

одним кликом в Тотале командаре делается это.
Выбрал чертежи изменить атрибут и автор заменить надпись.
И да еще куча все го тоже.. ПО ШАБЛОНУ ДАЖЕ.
+ Благодарностей: 1

Sasha_teh

Ого!Я про это не знал. Отличная идея терез тотал, пойду делать так  :w: