☞ ░ 前往老猿Python博文目錄 ░
在前面老猿的文章中,《Python學習隨筆:使用xlwings讀取和操作Excel文件》、《Python學習隨筆:使用xlwings讀取和操作Excel文件的數字需要注意的問題》、《第15.25節 PyQt(Python+Qt)入門學習:Model/View開發實戰–使用QTableView展示Excel文件內容》、《第二十章、QTableView與QStandardItemModel開發實戰:展示Excel文件內容》介紹了部分使用xlwings操作excel數據的方法,最近2天在使用xlwings對excel行列數據進行批量讀寫,發現了一些前面沒介紹且有實用價值的內容,在此總結幾點介紹一下。
一、關於整行整列數據讀寫的問題
在《Python學習隨筆:使用xlwings讀取和操作Excel文件》介紹了一次讀寫整行和整列的方法,整行數據寫入時可以簡單將讀取的賦值語句交換一下等號左右兩邊的操作數據,但在寫入整列數據時不能簡單用該方式賦值,而是在列選擇中加上“options(transpose=True)”的方式,且無需使用expand方法,否則還是操作的行數據,哪怕expand的參數為‘down’。具體請見如下:
import xlwings as excel
excelApp = excel.App(False, False)
excelFile = excelApp.books.add()
sheet = excelFile.sheets.add('test')
sheet.range(1, 1).expand('right').value = [1,2,3,4] #將第一行置為1,2,3,4
sheet.range(2, 1).expand('down').value = [11,12,13,14] #將第2行開始的第一列置為11,12,13,14
excelFile.save(r"c:\temp\csdn\test.xlsx")
excelFile.close()
excelApp.quit()
執行上述語句后,excel中的結果變成了:
將上述語句改為:
def test():
import xlwings as excel
excelApp = excel.App(False, False)
excelFile = excelApp.books.add()
sheet = excelFile.sheets.add('test')
sheet.range(1, 1).expand('right').value = [1,2,3,4] #將第一行置為1,2,3,4
sheet.range(2, 1).expand('down').options(transpose=True).value = [11,12,13,14] #將第2行開始的第一列置為11,12,13,14
excelFile.save(r"c:\temp\csdn\test.xlsx")
excelFile.close()
excelApp.quit()
上面語句也可以將:sheet.range(2, 1).expand('down').options(transpose=True).value = [11,12,13,14]
替換為:sheet.range(2, 1).options(transpose=True).value = [11,12,13,14]
效果相同,執行后excel內容截圖:
二、多行多列數據讀寫的問題
如果在讀取excel數據讀取多列數據時,如果不知道讀取的結果是1列還是多列,則在此需要進行特殊處理,這是因為讀取一列數據時返回的是一個一維的列表,但讀取超過2列數據時返回的是一個兩維的列表,因此數據類型不同,可能會導致后續操作需要特別注意。對這種情況最好就在數據讀取后判斷是否二維列表還是一維列表,如果是一維列表,為了程序處理的統一性,可以轉為二維列表。
下面就是一個判斷返回值是否為二維列表的簡單案例:
if not isinstance(urlReadInfoList[0],list): #是否是一維列表
urlReadInfoList=[[i]for i in urlReadInfoList] #轉換成二維列表
寫入可以按行列寫入,但
三、一次性寫入多行多列
使用如下語句可以一次寫入多行多列數據:
def test():
import xlwings as excel
excelApp = excel.App(False, False)
excelFile = excelApp.books.add()
sheet = excelFile.sheets.add('test')
sheet.range(2, 2).expand('right').value = [[1,2,3,4] ,[11,12,13,14]]
#sheet.range(2, 1).options(transpose=True).value = #將第2行開始的第一列置為11,12,13,14
excelFile.save(r"c:\temp\csdn\test.xlsx")
excelFile.close()
excelApp.quit()
將上述語句的expand(‘right’)改為expand(‘down’)和不帶expand效果相同,結果如下:
如果將上述語句改為:
def test():
import xlwings as excel
excelApp = excel.App(False, False)
excelFile = excelApp.books.add()
sheet = excelFile.sheets.add('test')
sheet.range(2, 2).options(transpose=True).value = [[1,2,3,4] ,[11,12,13,14]]
excelFile.save(r"c:\temp\csdn\test.xlsx")
excelFile.close()
excelApp.quit()
執行行數test,行和列的數據就會交換,變成如下結果:
四、設置字體顏色和填充色
設置字體顏色和填充色需要用到api和color等屬性,參考如下語句:
def test():
import xlwings as excel
excelApp = excel.App(False, False)
excelFile = excelApp.books.add()
sheet = excelFile.sheets.add('test')
sheet.range(1, 1).options(transpose=True).value = [[1,2,3,4] ,[11,12,13,14]]
sheet.range(1, 1).expand('right').api.Font.Color = 0xffffff #設置字體為白色
sheet.range(1, 1).expand('right').color = (0, 0, 255) #設置填充色為藍色
excelFile.save(r"c:\temp\csdn\test.xlsx")
excelFile.close()
excelApp.quit()
注意:
顏色的表示方法有三種,包括顏色索引號、RGB的16進制表示法以及RGB的三元組表示法,其中的顏色索引號請參考下面引用的博文。RGB的16進制表示法以及RGB的三元組表示法在數值的排序上有區別,三元組表示法是按RGB的順序來設置顏色的如(0,0,255)表示藍色,而16進制則是反序,如藍色的值為0xFF0000。
五、設置對齊方式
對齊方式的設置使用數據單元的api.VerticalAlignment 屬性,如下語句:sheet.range(1, 1).expand('right').api.VerticalAlignment = -4130
,設置為數據自動換行。相關取值及含義參考如下語句的說明:
sheet.range(1, 1).expand('right').api.HorizontalAlignment = -4108
# -4108 水平居中。 -4131 靠左,-4152 靠右。
sheet.range(1, 1).expand('right').api.VerticalAlignment = -4130
# -4108 垂直居中(默認)。 -4160 靠上,-4107 靠下, -4130 自動換行對齊。
六、設置寬度和高度
寬度和高度通過數據單元的column_width和row_height屬性進行調整,不過老猿測試確認列寬的單位是以字符為單位,行高的單位是以像素為單位:
def test():
import xlwings as excel
excelApp = excel.App(False, False)
excelFile = excelApp.books.add()
sheet = excelFile.sheets.add('test')
sheet.range(1, 1).options(transpose=True).value = [[1,2,3,4] ,[11,12,13,14]]
sheet.range(1, 1).expand('right').api.Font.Color = 0xffffff
sheet.range(1, 1).expand('right').color = (0, 0, 255)
sheet.range('A1').row_height = 20 #行高設置為20像素
sheet.range('A1').column_width = 2 #列寬設置為2個字符
excelFile.save(r"c:\temp\csdn\test.xlsx")
excelFile.close()
excelApp.quit()
有關更多的設置可以參考《python用 xlwings庫對Excel進行 字體、邊框設置、合並單元格, 版本轉換等操作》的介紹。