Иван Ведерников
Посетитель
Всего сообщений: 26
Дата регистрации: 06.11.2018
|
Создано:
08.12.2021 07:48:08
|
Добрый день!
Подскажите как записать значения в таблицы Rastr используя python?
Код |
---|
x = rastr.tables("node").cols.Item("ny").Z(0) # работает
rastr.tables("node").cols.Item("ny").Z(0) = 5 # не работает
# SyntaxError: cannot assign to function call here.
rastr.tables("node").cols.Item("ny").Z[0] = 5 # не работает
# TypeError: 'method' object does not support item assignment
|
|
|
|
Станислав Богданов
Модератор
Всего сообщений: 60
Дата регистрации: 11.10.2012
|
Создано:
08.12.2021 10:10:23
|
Примерно так:
Код |
---|
column = table.Cols(column)
column.SetZ(row_id, value) # вместо column.Z(row_id) = value
|
|
|
|
Иван Ведерников
Посетитель
Всего сообщений: 26
Дата регистрации: 06.11.2018
|
Создано:
08.12.2021 10:56:52
|
Благодарю, работает!
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 231
Дата регистрации: 03.05.2011
|
Создано:
09.12.2021 09:49:20
|
А как подключить объекты растра в python?
|
|
|
Иван Ведерников
Посетитель
Всего сообщений: 26
Дата регистрации: 06.11.2018
|
Создано:
09.12.2021 10:20:27
|
установить модуль pywin32
Код |
---|
import win32com.client
rastr = win32com.client.Dispatch("Astra.Rastr")
|
|
|
|
Евгений Машалов
Администратор

Всего сообщений: 1000
Дата регистрации: 23.04.2007
|
Создано:
09.12.2021 15:42:17
|
Я прям вижу флотилию Парусов на горизонте
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 231
Дата регистрации: 03.05.2011
|
Создано:
10.12.2021 23:28:00
|
Спасибо!
Есть у него какие-то очевидные преимущества относительно обычного vbs?
|
|
|
Иван Ведерников
Посетитель
Всего сообщений: 26
Дата регистрации: 06.11.2018
|
Создано:
13.12.2021 10:40:59
|
Если простая программка или она должна работать в загруженном файле растр, то vbs, если программа посложнее то писать, отлаживать , делать графический интерфейс лучше в python. Там очень много возможностей
|
|
|
Nick_A
Посетитель
Всего сообщений: 40
Дата регистрации: 30.09.2021
|
Создано:
21.12.2022 11:01:54
|
Добрый день. А может кто-то показать какой-то пример макро на python. Чтобы начать было проще. Как происходит загрузка файлов, таблиц в них, сохранение, добавление строк, изменение параметров и прочее. Заранее благодарю
|
|
|
Александр Александров
Администратор
Всего сообщений: 642
Дата регистрации: 31.05.2008
|
Создано:
21.12.2022 13:35:04
|
 |
Здравствуйте!
макрос загружает файлы из директорий и считает оптимизацию
Код |
---|
import os
import win32com.client as c32
def GetPathToScanDir():
return r'D:VmsSHARAcrossesODU_SB2022_11_18_archmup'
def GetPathToScanDir7z():
return r'D:VmsSHARAcrossesODU_SB2022_11_18_archm'
def GetCentr():
return 45000
def GetCentrs():
return (15000,)
def GetScnaFName():
return 'roc_debug_before_OC'
def Get_RG_REPL():
return 1
def GetMaxOtv():
return 18
def Get_max_otv(tables):
table_node = tables('node')
node_col_sta = table_node.Cols('sta')
node_col_ny = table_node.Cols('ny')
node_col_otv = table_node.Cols('otv')
table_node.SetSel('sta=0')
max_otv = 0
max_otv_node_num = -1000
curent_row_node = table_node.FindNextSel(-1)
while curent_row_node != -1:
sta = node_col_sta.Z(curent_row_node)
ny = node_col_ny.Z(curent_row_node)
otv = node_col_otv.Z(curent_row_node)
if abs(max_otv) < abs(otv):
max_otv = otv
max_otv_node_num = ny
#print('sta= '+str(sta)+ ' dv='+str(otv))
curent_row_node = table_node.FindNextSel(curent_row_node)
return (max_otv, max_otv_node_num)
def rfile_analyze(rastr,path_rfile,centr):
rastr.Load(Get_RG_REPL(), path_rfile, '')
try:
tables = rastr.Tables
table_com_opf = tables('com_opf')
com_opf_col_centr = table_com_opf.Cols('centr')
res1 = rastr.opf('s')
(max_otv1, max_otv_node_num1) = Get_max_otv(tables)
com_opf_col_centr.SetZ(0,centr)
res2 = rastr.opf('s')
rastr.rgm('')
(max_otv2, max_otv_node_num2) = Get_max_otv(tables)
str_res1 = ''
str_res2 = ''
if(abs(max_otv1) > GetMaxOtv() ) : str_res1 = "FAIL1"
if(abs(max_otv2) > GetMaxOtv() ) : str_res2 = "FAIL2"
print (str(path_rfile)+ ' : ' + str(res1) + ' - ' + str(res2) +' '+ ' max_otv1= '+ str(max_otv1)+ ' max_otv2= '+ str(max_otv2) + ' <> '+ str_res1 + ' - '+ str_res2
+ ' : ny1=' + str(max_otv_node_num1)+ ' ny2=' + str(max_otv_node_num2) )
except OSError as err:
print("OS error:", err)
except ValueError:
print("Could not convert data to an integer.")
except Exception as ex:
print('type{type(ex)}')
except :
print('xz')
def scan_dir(path_2_scan_dir):
#app = c32.gencache.EnsureDispatch('astra.rastr')
rastr=c32.Dispatch('astra.rastr')
print(rastr.__module__)
print( 'scan-> ' + path_2_scan_dir )
folder_names = os.listdir(path_2_scan_dir)
#print(folder_names)
for centr in GetCentrs() :
print(centr)
print('--------------------------- '+str(centr)+' -----------------------------------')
for folder_name in folder_names:
path_2_folder = path_2_scan_dir+'\'+ folder_name
#print(path_2_folder)
if os.path.isdir(path_2_folder):
#print(path_2_folder)
path_2_file = path_2_folder+ '\'+GetScnaFName()
if os.path.isfile(path_2_file) :
#print (path_2_file)
rfile_analyze(rastr,path_2_file,centr)
continue
else:
print ( f'no file: {path_2_file}' )
scan_dir( r'D:VmsSHARAcrossesODU_SB2022_11_18_archmup')
|
|
|
|
Nick_A
Посетитель
Всего сообщений: 40
Дата регистрации: 30.09.2021
|
Создано:
21.12.2022 15:01:06
|
 |
Спасибо. В бОльшей части всё понятно... Кроме главного - при создании объекта rastrt возникает исключение (и даже при обработке первого исключения возникает второе... исключение в квадрате)
Код |
---|
Traceback (most recent call last):
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclientdynamic.py", line 86, in _GetGoodDispatch
IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221021, 'Операция недоступна', None, None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:RastrНовая схемаМакросыОбработка моделейОбновление топологииopen.py", line 4, in <module>
rastr = c32.Dispatch('astra.rastr')
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclient__init__.py", line 117, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx)
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclientdynamic.py", line 106, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclientdynamic.py", line 88, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(
pywintypes.com_error: (-2147221164, 'Класс не зарегистрирован', None, None)
|
|
|
|
Александр Александров
Администратор
Всего сообщений: 642
Дата регистрации: 31.05.2008
|
Создано:
21.12.2022 15:56:23
|
наверное у вас Растр 32 бита а Питон 64 или наоборот
|
|
|