Python實現自動化辦公、自動化測試數據驅動,都離不開對excel的操作,下面簡單介紹下,如何使用Python的openpyxl庫處理excel文檔。
首先,Python處理excel的第三方庫有:xlrd,xlwt,openpyxl等。
其中xlrd只能讀excel,xlwt只能寫excel,所以今天我們就重點了解一下openpyxl,它既可以讀寫數據,還能操作工作表,比如生成柱狀圖等。
安裝openpyxlpip install openpyxl
當然,也可以用國內鏡像安裝:
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
Excel基本概念•工作簿(workbook):一個 Excel 文檔;•工作表(sheet):一個工作簿可以包含多個表, 如:sheet1, sheet2等;•列(column): 列地址是從 A 開始的;•行(row): 行地址是從 1 開始的;•單元格(cell):指定行和列的格;
Excel操作Excel不管讀寫都是「三板斧」:加載workbook,打開sheet,操作cell
現有工作簿「學生表.xlsx」如下圖:
1.首先導入模塊:from openpyxl import load_workbook2.加載工作簿:可以使用相對路徑也可使用絕對路徑wb = load_workbook("學生表.xlsx")wb = load_workbook("D:\Python_exercises\學生表.xlsx")3.打開工作表加載工作簿後,我們要打開一個工作表:
#打開工作表兩種方式:#方式一:通過工作表名稱打開工作表sheet=wb["sheet1"]#方式二:獲取活躍的工作表sheet=wb.active #['sheet1']順帶介紹一下工作表的其他操作:
#獲取所有的工作表wb.sheetnames #['sheet1']#修改工作表名稱sheet.title="students" #獲取工作表名稱sheet.title #students4.單元格常用操作加載工作簿,打開工作表後就可以操作單元格了,以下是對單元格操作的介紹:
獲取單元格(指定行,指定列)
sheet.cell(2,3) #<Cell 'students'.C2>sheet["C2"] #<Cell 'students'.C2>如果要獲取單元格的值,使用value屬性:
#方式一sheet.cell(2,3).value #60#方式二sheet["C2"].value #60往單元格(指定行,指定列)中寫入值
#方式一sheet.cell(2,4).value="及格"#方式二sheet["D3"]="及格"#方式三sheet.cell(4,4,"良好")#保存工作簿wb.save("學生表.xlsx")獲取工作表的最大行和最大列
#獲取最大行:sheet.max_row #8#獲取最大列:sheet.max_column #4獲取多個單元格
方法一:切片方法,結果為一個元組cell1=sheet['A1:A3']cell2=sheet[1:2]cell3=sheet['A:C']方法二:iter_rows 和 iter_cols 方法,此方法得到的是一個可迭代序列cell4=sheet.iter_rows(min_row=1, max_row=2, min_col=1, max_col=4)for cell in cell4: print(cell)cell4=sheet.iter_rows(min_row=1, max_row=2, min_col=1, max_col=4,values_only=True)cell5=sheet.iter_cols(min_col=1, max_col=4,min_row=1, max_row=2)for cell in cell5: print(cell)cell5=sheet.iter_cols(min_col=1, max_col=4,min_row=1, max_row=2,values_only=True)5.插入/刪除行、列#插入行sheet.insert_rows(idx=數字編號,amount=要插入行數)#刪除行sheet.delete_rows(idx=數字編號,amount=要插入行數)#從第二行開始插入三行sheet.insert_rows(idx=2,amount=3)#第2行開始刪除3行sheet.delete_rows(idx=2,amount=3)#插入列sheet.insert_cols(idx=數字編號,amount=要插入列數)#刪除列sheet.delete_cols(idx=數字編號,amount=要插入列數)生成折線圖和柱狀圖現有Excel文檔「銷售數據.xlsx",表中數據內容如下:
現在我們在excel中生成折線圖,結果如下:
我們還可以生成柱狀圖:
代碼如下:
from openpyxl import load_workbookfrom openpyxl.chart import LineChart,Referencewb=load_workbook("銷售數據.xlsx")sheet=wb.activechart=LineChart()chart.title="手機銷售數據統計"chart.y_axis.title="銷量(單位:萬臺)"chart.x_axis.title="季度"data=Reference(worksheet=sheet,min_row=2,max_row=4,min_col=1,max_col=5)categories=Reference(sheet,min_col=2,min_row=1,max_col=5,max_row=1)chart.add_data(data,from_rows=True,titles_from_data=True)chart.set_categories(categories)sheet.add_chart(chart,"B6")wb.save("銷售數據.xlsx")from openpyxl import load_workbookfrom openpyxl.chart import BarChart,Referencewb=load_workbook("銷售數據.xlsx")sheet=wb.activebc=BarChart()bc.title="手機銷售數據統計"bc.y_axis.title="銷量(單位:萬臺)"bc.x_axis.title="季度"bc_data=Reference(worksheet=sheet,min_row=2,max_row=4,min_col=1,max_col=5)bc_cat=Reference(sheet,min_col=2,min_row=1,max_col=5,max_row=1)bc.add_data(bc_data,from_rows=True,titles_from_data=True)bc.set_categories(bc_cat)sheet.add_chart(bc,"B6")wb.save("銷售數據.xlsx")關於更多openpyxl庫的用法大家可以百度,或者去官方文檔中學習:
https://openpyxl.readthedocs.io/en/stable/