2013-09-30 201 views
1

我在這裏有一段代碼,實際上它使用python win32com在Excel中格式化邊框。我關心的是格式化邊界的時間。我試圖在excel中記錄一個宏,以找出所需的信息以將其轉置到我的腳本中,但它不起作用。python win32com excel邊框格式

所以我能做的最好的是運行在一個範圍循環中,我總是從第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)」加上「.BorderAround()」,但只有「.BorderAround()」有效。

在此先感謝。

回答

4

嗯,你用什麼excel?

這應該工作:

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 

讓我知道這對你的作品。

此外,如果你設置了Excel應用程序可見的虛假或關閉screenupdating可能更快:

​​

這樣Excel未更新屏幕爲每個呼叫。