python高階教程-python操作xlsx文件(openpyxl)
- 2019 年 11 月 20 日
- 筆記
本篇內容來自原創小冊子《python高階教程》,點擊查看目錄。
背景
在處理一些作業時,經常會碰到統計未交人數、分數等需求,雖然我們在數據庫中有了對應的數據, 但是數據庫只是面向開發者的,仍然需要將其轉換為專業的可閱讀格式-excel表格。
目前常用的操作xlsx表格的是openpyxl, 官網地址
編程模型
讀取
from openpyxl import Workbook from openpyxl.utils import get_column_letter # 在內存中創建一個workbook對象,而且會至少創建一個 worksheet wb = Workbook() #獲取當前活躍的worksheet,默認就是第一個worksheet ws = wb.active #設置單元格的值,A1等於6(測試可知openpyxl的行和列編號從1開始計算),B1等於7 ws.cell(row=1, column=1).value = 6 ws.cell("B1").value = 7 #從第2行開始,寫入9行10列數據,值為對應的列序號A、B、C、D... for row in range(2,11): for col in range (1,11): ws.cell(row=row, column=col).value = get_column_letter(col) #可以使用append插入一行數據 ws.append(["我","你","她"]) #保存 wb.save(filename="/Users/budong/Desktop/a.xlsx")
寫入
from openpyxl import load_workbook #打開一個workbook wb = load_workbook(filename="/Users/budong/Desktop/a.xlsx") #獲取當前活躍的worksheet,默認就是第一個worksheet #ws = wb.active #當然也可以使用下面的方法 #獲取所有表格(worksheet)的名字 sheets = wb.get_sheet_names() #第一個表格的名稱 sheet_first = sheets[0] #獲取特定的worksheet ws = wb.get_sheet_by_name(sheet_first) #獲取表格所有行和列,兩者都是可迭代的 rows = ws.rows columns = ws.columns #迭代所有的行 for row in rows: line = [col.value for col in row] print(line) #通過坐標讀取值 print(ws.cell('A1').value) # A表示列,1表示行 print(ws.cell(row=1, column=1).value)
處理包含學生學號和學生姓名的表格
在該例子中,xlsx表格中只有兩列,第一列是學生學號,第二列是學生姓名, 使用get_stu
可以獲取xlsx文件中的學號與姓名供使用,使用write_xlsx
可以向xlsx文件中寫入數據,其中data為二維列表。
from openpyxl import Workbook, load_workbook src_name = 'students.xlsx' def get_stu(file_name, type='code'): wb = load_workbook(file_name) ws = wb.active stu_code = [] rows = ws.rows for row in rows: if type=='code': # stu code col = row[1] elif type=='name': col = row[2] else: col = row[1] stu_code.append(str(col.value)) return stu_code def write_xlsx(file_name, data): wb = Workbook() ws = wb.active for row in range(1,len(data) + 1): for column in range(1, len(data[row-1]) + 1): ws.cell(row=row, column=column).value = data[row-1][column-1] wb.save(filename=file_name)
參考: