CreateAliasForTable : Une macro pour créer facilement les alias dans un tableau à deux dimensions
This commit is contained in:
143
createAliasForTable.FCMacro
Normal file
143
createAliasForTable.FCMacro
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
__Name__ = "Create alias for table"
|
||||||
|
__Comment__ =""
|
||||||
|
__Author__ = "2cv001"
|
||||||
|
__Title__ = "Macro Create Alias For Table"
|
||||||
|
__Date__ = "2024/01/31" #YYYY/MM/DD 20:13 Béta
|
||||||
|
__Version__ = __Date__
|
||||||
|
# https://forum.freecad.org/viewtopic.php?p=734928#p734928
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import FreeCAD, FreeCADGui
|
||||||
|
from PySide import QtGui
|
||||||
|
import re
|
||||||
|
|
||||||
|
addNumberIfOther=True
|
||||||
|
|
||||||
|
def get_column(cell):
|
||||||
|
column = ''.join([c for c in cell if not c.isdigit()])
|
||||||
|
return column
|
||||||
|
|
||||||
|
def get_row(cell):
|
||||||
|
row = ''.join([c for c in cell if c.isdigit()])
|
||||||
|
if row=='' :
|
||||||
|
row='1'
|
||||||
|
return int(row)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#################################################################################
|
||||||
|
# part code for alias
|
||||||
|
#################################################################################
|
||||||
|
# parameters for alias creation
|
||||||
|
separateur = " " # typically put " " so blanks will be replaced by nouveauCaract
|
||||||
|
nouveauCaract = '' #Put for example "_" to have the separators replaced by "_". Put "" to have no separator
|
||||||
|
majuscule = True #set to True if you want "Diametre du cercle" to be "DiametreDuCercle"
|
||||||
|
changeTexteCellule = False # the text will only be changed if changeCellText is True.
|
||||||
|
# This does not change anything for the allias itself
|
||||||
|
premierCaractereEnMinuscule = False # Force the first character to be in lower case
|
||||||
|
|
||||||
|
# list of characters to be replaced by an equivalent. for example an @ will be replaced by 'a'
|
||||||
|
# if you add characters, please send me a private message. Il will eventually add it in my code.
|
||||||
|
caracEquivalents = [ ['é','e'],['è','e'],['ê','e'],['à','a'],['@','a'],['&','e'],['ç','c'],
|
||||||
|
['²','2'],["'",''],['?',''],['"',''],['(',''],[')',''],['#',''],['.',''],
|
||||||
|
[',',''],[';',''],['$',''],['+',''],['-',''],['*',''],['/',''],['\\',''] ,
|
||||||
|
['[',''],[']',''],
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def traitementChaineSource(chaineSource, separateur, nouveauCaract, majuscule):
|
||||||
|
# If separator is ' ' and nouveauCaract is '_', and majuscule is True
|
||||||
|
# transforms "Diametre du cylindre" into "Diametre_Du_Cylindre
|
||||||
|
|
||||||
|
def remplaceCararcDansMot(mot):
|
||||||
|
|
||||||
|
def remplaceCartatParEquivalent(caractere):
|
||||||
|
# replaces a character with its equivalent if it exists
|
||||||
|
caracResult = caractere
|
||||||
|
for couple in caracEquivalents:
|
||||||
|
if (couple[0] == caractere):
|
||||||
|
caracResult = couple[1]
|
||||||
|
break
|
||||||
|
return caracResult
|
||||||
|
|
||||||
|
#replaces all characters of the word with its equivalent if it exists
|
||||||
|
motResult = mot
|
||||||
|
for caract in mot:
|
||||||
|
a = remplaceCartatParEquivalent(caract)
|
||||||
|
motResult = motResult.replace(caract, a)
|
||||||
|
return motResult
|
||||||
|
|
||||||
|
|
||||||
|
chaineResult = ''
|
||||||
|
first = True
|
||||||
|
carctDeSeparation = ''
|
||||||
|
for mots in chaineSource.split(separateur):
|
||||||
|
mots = remplaceCararcDansMot(mots)
|
||||||
|
if (not (first)):
|
||||||
|
carctDeSeparation = nouveauCaract
|
||||||
|
if (majuscule):
|
||||||
|
chaineResult = chaineResult + nouveauCaract + mots[:1].upper() + mots[1:]
|
||||||
|
# We use "[:1]" instead of "[0]",
|
||||||
|
# for no crash in case of an empty string (which happens if the cell is empty)
|
||||||
|
else:
|
||||||
|
chaineResult = chaineResult + nouveauCaract + mots
|
||||||
|
first=False
|
||||||
|
if premierCaractereEnMinuscule :
|
||||||
|
chaineResult = chaineResult[:1].lower() + chaineResult[1:]
|
||||||
|
return chaineResult
|
||||||
|
|
||||||
|
|
||||||
|
def create_alias_for_table_cells_Selected():
|
||||||
|
mySpreadsheet = Gui.ActiveDocument.ActiveView.getSheet()
|
||||||
|
aw = Gui.getMainWindow().centralWidget().activeSubWindow() # Store the active window
|
||||||
|
# To get list of all selected cells
|
||||||
|
sel_items = aw.widget().findChild(QtGui.QTableView).selectedIndexes()
|
||||||
|
|
||||||
|
getCellName = lambda r,c:'{}{}{}'.format(chr(c//26 + 64) if c//26 > 0 else '', chr(c%26 + 65), r + 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for item in sel_items: # The selected cells are scanned
|
||||||
|
|
||||||
|
if (sel_items[0].column()!=item.column() and sel_items[0].row()!=item.row()) :
|
||||||
|
cellName=getCellName(item.row(), item.column())
|
||||||
|
firstcellName=getCellName(sel_items[0].row(), sel_items[0].column())
|
||||||
|
cellTextLine=get_column(firstcellName)+str(get_row(cellName))
|
||||||
|
cellTextColumn=get_column(cellName)+ str(get_row(firstcellName))
|
||||||
|
try :
|
||||||
|
textLine = mySpreadsheet.get(cellTextLine)
|
||||||
|
textColumn = mySpreadsheet.get(cellTextColumn)
|
||||||
|
|
||||||
|
except :
|
||||||
|
#print('Des cellules en première colonne ou en première ligne ne sont pas conformes')
|
||||||
|
continue
|
||||||
|
textAlias = str(textLine) + '_' + str(textColumn)
|
||||||
|
textAlias=traitementChaineSource(textAlias, separateur, nouveauCaract, majuscule)
|
||||||
|
if addNumberIfOther :
|
||||||
|
startIndexForTextAlias=1
|
||||||
|
for i in range(startIndexForTextAlias, 201):
|
||||||
|
try:
|
||||||
|
if i == 1:
|
||||||
|
mySpreadsheet.setAlias(cellName, textAlias)
|
||||||
|
else:
|
||||||
|
mySpreadsheet.setAlias(cellName, textAlias + '_' + str(i-1))
|
||||||
|
startIndexForTextAlias=i+1
|
||||||
|
break # Arrête la boucle si aucune exception n'est levée
|
||||||
|
except:
|
||||||
|
continue # Passe à l'itération suivante si une exception est levée
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
create_alias_for_table_cells_Selected()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
||||||
Reference in New Issue
Block a user