Я пытаюсь перевести код VBA, найденный в по этой ссылке , в IronPython. Кто-нибудь может порекомендовать хороший ресурс VBA, чтобы объяснить, как лучше всего это сделать для программиста на Python?
У меня реализованы все части Excel, такие как обработка и использование объектов, рабочие книги, рабочие таблицы и т. Д.
Я также остановлюсь на объяснении этого фрагмента кода:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 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
почему Arr (N) НЕ будет больше 0?
Вот мой текущий код, который не работает:
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]))
Примечание:
С ответом , вот все, что мне нужно было сделать:
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))