J'essaie de traduire le code VBA trouvé dans this link en IronPython. Quelqu'un peut-il recommander une bonne ressource VBA pour expliquer comment faire mieux pour un programmeur Python?Portage VBA à IronPython
j'ai toutes les parties Excel mises en œuvre, telles que le traitement et l'utilisation des objets, des classeurs, des feuilles de calcul, etc.
Je vais aussi se contenter d'une explication de ce bout de code:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Put the index value of the sheet into Arr. Ensure there
' are no duplicates. If Arr(N) is not zero, we've already
' loaded that element of Arr and thus have duplicate sheet
' names.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Arr(N) > 0 Then
ErrorText = "Duplicate worksheet name in NameArray."
SortWorksheetsByNameArray = False
Exit Function
End If
pourquoi Arr (N) ne serait jamais plus grand que 0?
Voici mon code actuel, qui est rompu:
def move_worksheets_according_to_list(self, name_list):
wb = self.com_workbook
temp_list = []
for n in range(len(name_list)):
if name_list.count(name_list[n]) > 1:
raise Exception("Duplicate worksheet name in NameArray.")
else:
temp_list.append(wb.Worksheets(name_list[n]).Index)
for m in range(len(temp_list)):
for n in range(m, len(temp_list)):
if temp_list[n] < temp_list[m]:
l = temp_list[n]
temp_list[n] = temp_list[m]
temp_list[m] = l
if not all(temp_list[i] <= temp_list[i+1] for i in xrange(len(temp_list)-1)):
return False
print "current order"
for sheet in wb.Worksheets:
print sheet.Name
wb.Worksheets(name_list[0]).Move(Before=wb.Worksheets(1))
#WB.Worksheets(NameArray(LBound(NameArray))).Move before:=WB.Worksheets(Arr(1))
for n in range(len(name_list)-1):
print 'moving ', name_list[n], 'before ', name_list[n+1]
wb.Worksheets(name_list[n]).Move(Before=wb.Worksheets(name_list[n + 1]))
Note:
Avec this answer comme référence, voici tout ce que je devais faire:
def move_worksheets_according_to_list(self, name_list):
wb = self.com_workbook
l = []
# since wb.Worksheets is a com_object, you can't use the "if _ in XXX"
# construct without converting to a list first
for s in wb.Worksheets:
l.append(s.Name)
for n in range(len(name_list)):
if name_list[n] in l:
wb.Worksheets(name_list[n]).Move(After=wb.Worksheets(wb.Worksheets.Count))
@Remou Les contractions sont standard dans l'utilisation informelle, pas dans l'utilisation formelle, ce que l'article wiki rend clair. Voir Strunk et White pour référence. Cependant, il a été clair pour moi que les contractions sont une pratique standard pour SO. Je vais modifier mes pratiques en conséquence. Merci d'avoir noté mon erreur. – JackOrangeLantern