Openpyx是一個用於讀寫Excel2010各種xlsx/xlsm/xltx/xltm文件的python庫。
現在大多數用的都是office2010了,如果之前之前版本的可以使用xlrd讀,xlwt寫,這里就不介紹了。
入門范例
from openpyxl import Workbook
wb=Workbook()#創建一個工作簿
ws=wb.active#獲取工作的激活工作表
ws['A1']=42#在A1中插入內容
ws.append([1,2,3])#這里其實是在第二行插入了3個數字,占用了三個單元格
import datetime
ws['A2']=datetime.datetime.now()#在A2中插入了當前時間,把上一句的那個1擠掉了
wb.save('sample.xlsx')#保存到當前目錄
簡單操作
創建一個workbook
一般創建workbook后至少會有一個worksheet,我們可以通過active屬性來獲取。
我們還可以通過create_sheet()方法來創建新的worksheet。
一般默認創建的sheet的名字是序列化的,我們可以更改title屬性來設置想要的名稱。
一旦我們指定了名稱,可以使用key的方法獲取,wb['Title']
from openpyxl import Workbook
wb=Workbook()
ws=wb.active
ws1=wb.create_sheet('Mysheet')#默認插入到最后
ws2=wb.create_sheet('Mysheet1',0)#指定插入到第一個位置
ws.title='New Title'
ws3=wb['New Title']
如果我們想要遍歷所有的sheet,可以用for循環。
for sheet in wb:
print(sheet.title)
我們還可以在同一個workbook內拷貝sheet
source=wb.active
target=wb.copy_worksheet(source)
控制單元格
單元格可以通過key的方式直接獲取,如果不存在這個key,會創建一個。
並且可以直接指定單元格的值
c=ws['A3']
ws['A4']=4
另外一直是通過worksheet的cell()方法來指定單元格。
d=ws.cell(row=4,colum=2,value=10)
如果我們在內存中創建一個worksheet,它是默認沒有包含cell的,只有第一次使用的時候才會創建。
所以我們可以提前將所需要的單元格過一遍,不指定值,就可以創建出來。
for i in range(1,101):
for j in range(1,101):
ws.cell(row=i,colum=j)
矩陣型的單元格組可以使用切片獲取:
cell_range=ws['A1':'C2']
單列或者單行的單元格,也是類似的獲取方式
colC=ws['C']
col_range=ws['C:D']
row10=ws[10]
row_range=ws[5:10]
或者采用迭代器的方法,iter_rows()和iter_cols()方法。
for row in ws.iter_rows(min_row=1,max_col=3,max_row=2):
for cell in row:
print(cell)
數據存儲
一旦我們得到一個cell,我們就可以指定值了。
c.value='hello world'
print(c.value)
d.value=3.14
print(d.value)
保存文件
workbook的save方法,指定文件保存路徑即可。
不過save方法會覆蓋相同路徑的文件。
wb=Workbook()
wb.save('sample.xlsx')
加載文件
需要引入load_workbook()
from openpyxl import load_workbook
wb2=load_workbook('sample.xlsx')
print(wb2.get_sheet_names())
幾個范例
寫workbook
在一個book中創建了3個sheet。
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.utils import get_column_letter
wb=Workbook()
dest_filename='empty_book.xlsx'
ws1=wb.active
ws1.title='range names'
for row in range(1,40):
ws1.append(range(600))
ws2=wb.create_sheet(title='Pi')
ws2['F5']=3.14
ws3=wb.create_sheet(title='Data')
for row in range(10,20):
for col in range(27,54):
ws3.cell(column=col,row=row,value='{0}'.format(get_column_letter(col)))
print(ws3['AA10'].value)
wb.save(filename=dest_filename)
讀取一個workbook
from openpyxl import load_workbook
wb=load_workbook(filename='empty_book.xlsx')
sheet_ranges=wb['range names']
print(sheet_ranges['D18'].value)
其他諸如插入圖片、構建圖表等情況,用到的時候再講解。
