Python操作Excel的Xlwings教程(六)

十先生(公眾號:Python知識學堂)發表於2020-10-20

最近在使用Xlwings的時候,發現有對Excel表格進行設定字型大小和顏色等操作。想必小夥伴們在日常的工作中也遇到了這樣的問題,為此我這裡總結一些操作供大家參考:

一、建立表格

import xlwings as xw
App = xw.App(visible=False, add_book=False)
wb = App.books.add()
sheet = wb.sheets.add('test_sets')
# Expands the range according to the mode provided. Ignores empty top-left cells (unlike ``Range.end()``).
# 將第一行置為1,2,3,4
# 將第2行開始的第一列置為11,12,13,14
sheet.range(1, 1).expand('right').value = [1, 2, 3, 4]
sheet.range(2, 1).expand('down').options(transpose=True).value = [10, 20, 30, 40]
wb.save('test_sets.xlsx')
wb.close()
App.quit()

 

建立的結果:新建了一個名test_sets.xlsx的檔案,在該檔案的test_sets頁簽上寫入了一些資料,資料顯示如下:

 

接下來我們將基於這個表格,做一些字型的大小顏色等設定的操作。

二、字型屬性設定

在官網的Xlwings的教程中沒有介紹直接設定Excel單元格字型的方式,但是提供了一個API供我們使用:

 

這句話是什麼意思呢?其實就是說使用api將返回windows Excel庫中的api呼叫,api可以參考官方文件連結:

https://docs.microsoft.com/en-us/office/vba/api/overview/excel

另外,我們在微軟官網的VBA教程中,發現了一個關於Font物件的相關操作:

VBA設定字型的方式就是:

Worksheets("Sheet1").Range("A1:C5").Font.Bold = True

Bold就是給選中的單元格進行加粗。這個Font物件其他的一些屬性還有以下幾種:

我們來介紹一下其中主要的一些屬性的意義(摘自官網):

那麼在Xlwings中該怎麼設定字型的大小呢?我們可以這樣來進行設定,在設定之前我們先看看設定之前單元格的或字型的預設值:

import xlwings as xw
App = xw.App(visible=False, add_book=False)
wb = App.books.open('test_sets.xlsx')
sheet = wb.sheets('test_sets')
sheetFont_name = sheet.range('B1').api.Font.Name
sheetFont_size = sheet.range('B1').api.Font.Size
sheetFont_bold = sheet.range('B1').api.Font.Bold
sheetFont_color = sheet.range('B1').api.Font.Color
sheetFont_FontStyle = sheet.range('B1').api.Font.FontStyle

print('字型名稱:', sheetFont_name)
print('字型大小:', sheetFont_size)
print('字型是否加粗:', sheetFont_bold)
print('字型顏色:', sheetFont_color)
print('字型型別:',sheetFont_FontStyle)
wb.save()
wb.close()
App.quit()

輸出結果如下:

字型名稱: 等線

字型大小: 11.0

字型是否加粗: False

字型顏色: 0.0

字型型別: 常規

 

接下來,我們來對單元格B1進行一些設定:

sheet.range('B1').api.Font.Name = '微軟雅黑'
sheet.range('B1').api.Font.Size = 20
sheet.range('B1').api.Font.Bold = True
sheet.range('B1').api.Font.Color = 0x0000ff
sheet.range('B1').api.Font.FontStyle = "Bold Italic"

 

上述程式碼的設定結果為,具體的顯示如下所示:

字型名稱: 微軟雅黑

字型大小: 20.0

字型是否加粗: True

字型顏色: 255.0

字型型別: 加粗傾斜

其中字型顏色為255.0,即為紅色。當然了設定的時候我們傳入的十六進位制的顏色值,這個十六進位制的顏色值大家可以百度一下這個顏色值。根據最後的輸出結果,我們在進行設定的時候也可以直接進行這樣的設定:

sheet.range('B1').api.Font.Color = 255.0

 

大家可以參考VBA中的設定:

Charts("Chart1").Axes(xlValue).TickLabels.Font.Color = _ RGB(0, 255, 0) 

三、單元格屬性設定

單元格的一些設定前期也有部分涉及到,這次我們來總結一下並增加一些其他的屬性設定。

我們先看程式碼:

sheet.range('B1').api.HorizontalAlignment = -4108    # -4108 水平居中
sheet.range('B1').api.VerticalAlignment = -4130      # -4108 垂直居中
sheet.range('B1').api.NumberFormat = "0.00"          # 設定單元格的數字格式 

檔案結果顯示如下:

上述數值是怎麼確定的呢?

是檢視Excel的文件的,拿HorizontalAlignment 舉例:

Step1: 進入到網址:

https://docs.microsoft.com/en-us/office/vba/api/overview/excel

Step2: 在Filter by title地方輸入

HorizontalAlignment。

Step3:找到屬於Range下的這個連結,點進入。

Step4: 我們就可以看到:
Range.HorizontalAlignment Property的值。

Step5:點2處的XlHAlign,就可以看到一些屬性值的介紹了:

 

所以說,大家要多閱讀官網的文件,多查一下它們的用法。

接著我們來看一下邊框的設定,在設定邊框值之前,這裡給出常用邊框的索引:

https://docs.microsoft.com/en-us/office/vba/api/excel.xlbordersindex

給定一個常用連結,包含Excel物件模型中的列舉物件的一些資訊:

https://docs.microsoft.com/en-us/office/vba/api/excel(enumerations)

我們上述查詢的xlbordersindex就可以在這個介面查詢得到。

 

假設現在我們的Excel的Sheet的資料形式如下:

我們執行一下程式碼:

# 從範圍中每個單元格的左上角到右下角的邊框
sheet.range('C1').api.Borders(5).LineStyle = 1
sheet.range('C1').api.Borders(5).Weight = 2
# 從範圍中每個單元格的左下角到右上角的邊框
sheet.range('D1').api.Borders(6).LineStyle = 1
sheet.range('D1').api.Borders(6).Weight = 2
# 左邊框,虛線
sheet.range('C3').api.Borders(7).LineStyle = 2
sheet.range('C3').api.Borders(7).Weight = 2
# 頂邊框,雙點劃線
sheet.range('C3').api.Borders(8).LineStyle = 5
sheet.range('C3').api.Borders(8).Weight = 2
# 底部邊框,直線,設定邊框粗細為2
sheet.range('C3').api.Borders(9).LineStyle = 1
sheet.range('C3').api.Borders(9).Weight = 2
# 右邊框,點劃線
sheet.range('C3').api.Borders(10).LineStyle = 4
sheet.range('C3').api.Borders(10).Weight = 2 

結果顯示如下:

是不是很簡單,就是對Borders()中傳入不同的index值就可以達到不同的效果。

 

備份表格區域:

相關文章