2013-09-30 1 views
1

У меня есть фрагмент кода, который действительно работает для форматирования границ в excel с использованием python win32com. Моя забота - время, необходимое для форматирования границ. Я попытался записать макрос в excel, чтобы узнать необходимую информацию, чтобы транспонировать его в моем скрипте, но он не работал.python win32com excel border format

Так что лучше всего я могу запустить в цикле диапазона, где я всегда начинаю с строки 3 до счетчика строк, называемого shn [1], с шагом 1 и от столбца 1 до 10 с шагом 1 Оттуда я использую «BorderAround()», которые работают нормально, но слишком медленно. Вот мой кусок кода:

for shn in [("Beam-Beam", bb_row, bb_col), ("Beam-Col", bc_row, bc_col)]: 
sheet = book.Worksheets(shn[0]) 
sheet.Range("J3:DW3").Copy() 
if shn[0] == "Beam-Col": 
    sheet.Range("J3:AA3").Copy() 
sheet.Range(sheet.Cells(4, 10), sheet.Cells(shn[1]-1, 10) ).PasteSpecial() 
for mrow in xrange(3,shn[1],1): 
    for mcol in xrange(1,10,1): 
     sheet.Cells(mrow, mcol).BorderAround()#.Border(1) 

Есть ли что-то я могу сделать, чтобы форматировать границы с диапазоном, как ==> sheet.Range (sheet.Cells (3,1), sheet.Cells (SHN [1 ], 10))? Я попробовал «.Borders (11)» и «.Borders (12)« plus ».BorderAround()», но только «.BorderAround()» сработали.

Заранее спасибо.

ответ

4

Хмм, какой вы используете?

Это должно работать:

for shn in [("Beam-Beam", bb_row, bb_col), ("Beam-Col", bc_row, bc_col)]: 
sheet = book.Worksheets(shn[0]) 
sheet.Range("J3:DW3").Copy() 
if shn[0] == "Beam-Col": 
    sheet.Range("J3:AA3").Copy() 
## Set a variable named rng to the range 
rng = sheet.Range(sheet.Cells(4, 10), sheet.Cells(shn[1]-1, 10) ) 
rng.PasteSpecial() 
## Using this range, we can now set its borders linestyle and weight 
## -> where 7 through 13 correspond to borders for xlEdgeTop,xlEdgeBottom, 
##  xlEdgeRight, xlEdgeLeft, xlInsideHorizontal, and xlInsideVertical 
## -> LineStyle of 1 = xlContinous 
## -> Weight of 2 = xlThin 
for border_id in xrange(7,13): 
    rng.Borders(border_id).LineStyle=1 
    rng.Borders(border_id).Weight=2 
## And to finish just call 
book.Close(True) # To close book and save 
excel_app.Quit() # or some variable name established for the com instance 

Позвольте мне знать, как это работает для вас.

Также это может быть быстрее, если вы установите приложения первенствовать Видна Ложные или отключенных ScreenUpdating:

excel_app.Visible = False # This will not physically open the book 
excel_app.ScreenUpdating = False # This will not update the screen on an open book 
## 
# Do Stuff... 
## 
# Just make sure when using the ScreenUpdating feature that you reenable it before closing 
excel_app.ScreenUpdating = True 

Таким образом, первенствует не обновляет экран для каждого вызова.

 Смежные вопросы

  • Нет связанных вопросов^_^