The next script shows how to rename your parts in 3-matic based on an excel file. As input, it requires an excel file with:
- column A: current part names
- column B: new part names to which you want to rename
The second part of the script creates an example excel which can be used as input for the main function rename_xlsx.
# This script will look for objects defined in column A of an excel file # and rename them with names of column B # Requirement: Package openpyxl # Input: # - location of the folder containing the excel file # - Name (string) of the input excel # - Name (string) of the output excel # - The range: until which row of the excel you want to look. # Output: # - Object tree will be renamed # - a new excel file will be written containing info if object were found and renamed or not. # Author: Kristof Godelaine & Sofie Desiron (Materialise) # Version: 2.0 (May 2019) from openpyxl import load_workbook from openpyxl import Workbook import trimatic def rename_xlsx(xlsx_loc,name_xlsx_inp,name_xlsx_out,range_xlx): #finding excell files inp_xlsx = xlsx_loc + name_xlsx_inp out_xlsx = xlsx_loc + name_xlsx_out #Loading the excell info wb = load_workbook(filename = inp_xlsx) #sheet 1 of the excell will be used ws1 = wb.active for x in range(1,range_xlx+1): #coordinate of the position in the excell colA_posX = 'A'+ str(x) colB_posX = 'B'+ str(x) colC_posX = 'C'+ str(x) colD_posX = 'D'+ str(x) #Check if cell A is not empty name_A = ws1[colA_posX].value name_B = ws1[colB_posX].value if name_A: #Look for object A temp = trimatic.find_object(name_A) if temp: ws1[colC_posX] = 'Found' #If object A is found rename witch xlsx value of cell B #Check if cell B is not empty if name_B: #Do not rename if name in cell A and B is equal if name_B == name_A: ws1[colD_posX] = 'Not renamed - name cell A = name cell B' #Rename if name in cell A and B is different else: temp.name = name_B ws1[colD_posX] = 'Renamed' #If cell B is empty do not rename else: ws1[colD_posX] = 'Not renamed - No info in cell B' #Object A is not found else: ws1[colC_posX] = 'Not Found' ws1[colD_posX] = 'Not renamed - item is not found' #If cell A is empty do not rename else: print(" Cell A is blank") #write an excell file wb.save(filename = out_xlsx) print('------------------------------------------------------------') print("Renaming script has been completed") print("Excell file with detection rate has been saved") print('------------------------------------------------------------') ##auxiliary functions for runnable example # Input: # - location to save auxiliary excel file # - the number and the size of the boxes used for the example # Output: # - a set of boxes will be created in 3-matic # - an excel file will be written containing the current parts names and the part names which will be used to rename #Create set of boxes in 3-matic. Returns a list of the boxes created in 3-matic def create_boxes(number_of_boxes, box_size): #Clear 3-matic trimatic.clear() distance_corner_points = box_size + int(box_size/2) total_distance = distance_corner_points*number_of_boxes #create boxes for k in range(0,total_distance,distance_corner_points): trimatic.create_box_part((k,0,0),box_size,box_size,box_size) #get list of boxes parts = trimatic.get_parts() return parts #Create excel file to run example def create_example_files(xlsx_loc, number_of_boxes, box_size): parts = create_boxes(number_of_boxes, box_size) #creating workbook wb = Workbook() #activating workbook ws = wb.active #writing information to worksheet for k in range(1, number_of_boxes+1): position_current_name = "A" + str(k) position_new_name = "B" + str(k) ws[position_current_name] = str(parts[k-1].name) ws[position_new_name] = "part_" + str(k) #save excel file wb.save(filename=xlsx_loc + 'input.xlsx') #Example #xlsx_loc = r"C:\Renaming Script\\" #name_xlsx_inp = 'input.xlsx' #name_xlsx_out = 'output.xlsx' #number_of_boxes = range_xlx = 10 #box_size = 3 #create_example_files(xlsx_loc, number_of_boxes, box_size) #rename_xlsx(xlsx_loc, name_xlsx_inp, name_xlsx_out, range_xlx) #NOTE: Make sure the output directory (xlsx_loc) exists