前言 用
這些庫都不如 OpenPyXL 強(qiáng)大,, 安裝 在終端中輸入命令,,如下: pip install openpyxl
由于最近天朝在召開兩會,因此必須翻-墻才能安裝,。 使用方法 新建Excel表格 新建Excel表格,,默認(rèn)有一個名為 from openpyxl import Workbook
wb = Workbook() #創(chuàng)建文件對象 ws = wb.active #獲取默認(rèn)sheet
wb.save('sample.xlsx') 打開已有的Excel表格 對已有的Excel表格進(jìn)行操作,,如下:
新建/獲取Sheet表格 使用 ws1 = wb.create_sheet('Mysheet') #默認(rèn)在最后插入
ws2 = wb.create_sheet('Mysheet', 0) #在第一個位置插入
wb.remove(ws1) #刪除sheet 也可以后期隨時修改sheet的名字,,如下:
修改sheet標(biāo)簽顏色,,如下: ws.sheet_properties.tabColor = '1072BA' 若知道sheet的名字,可以用如下方式獲取sheet :
也可獲取全部sheet的名字,,遍歷sheet名字,,如下: sheets = wb.sheetnames for sheet in sheets: print(sheets)
for sheet in wb: print sheet.title ['Sheet1', 'New Title', 'Sheet2'] 也可以定位到相應(yīng)sheet頁,[0]為sheet頁索引,如下:
復(fù)制Sheet表格 僅能復(fù)制 source = wb.active target = wb.copy_worksheet(source) 操作單元格 由
獲取區(qū)域內(nèi)的單元格,,如下: cell_range = ws['A1':'C2'] #獲取A1-C2內(nèi)的區(qū)域
colC = ws['C'] #獲取第C列 col_range = ws['C:D'] #獲取第C-D列 row10 = ws[10] #獲取第10列 row_range = ws[5:10] #獲取第5-10列 如果得到單元格,可以賦值,,如下:
獲取單元格的值,,如下: cellValue = ws.cell(row=i, column=j).value 獲取行列數(shù),如下:
一行行的獲取數(shù)據(jù),,如下: >>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2): ... for cell in row: ... print(cell)
<Cell Sheet1.A1> <Cell Sheet1.B1> <Cell Sheet1.C1> <Cell Sheet1.A2> <Cell Sheet1.B2> <Cell Sheet1.C2> 一列列的獲取數(shù)據(jù),,如下:
因為性能的原因, 獲取所有的列或行,,如下: rows = ws.rows
columns = ws.columns 因為性能的原因,, 如果只想從worksheet中獲取值,,可以使用
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True): print(row) 保存文件 使用
獲取單元格類型 from openpyxl import Workbook, load_workbook import datetime
wb = load_workbook('sample.xlsx')
ws=wb.active wb.guess_types = True #開啟獲取單元格類型
ws['A1']=datetime.datetime(2010, 7, 21) print ws['A1'].number_format
ws['A2']='12%' print ws['A2'].number_format
ws['A3']= 1.1 print ws['A4'].number_format
ws['A4']= '中國' print ws['A5'].number_format
wb.save('sample.xlsx')
# 執(zhí)行結(jié)果: # yyyy-mm-dd h:mm:ss # 0% # General # General # 如果是常規(guī),顯示general,如果是數(shù)字,,顯示'0.00_ ',,如果是百分?jǐn)?shù)顯示0% 使用公式
合并單元格 from openpyxl import Workbook, load_workbook
wb = load_workbook('sample.xlsx') ws1=wb.active
ws.merge_cells('A2:D2') ws.unmerge_cells('A2:D2') #合并后的單元格,,腳本單獨(dú)執(zhí)行拆分操作會報錯,需要重新執(zhí)行合并操作再拆分
# or equivalently ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4) ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)
wb.save('sample.xlsx') 插入一個圖片 需要
from openpyxl import load_workbook from openpyxl.drawing.image import Image
wb = load_workbook('sample.xlsx') ws1=wb.active
img = Image('1.png') ws1.add_image(img, 'A1')
wb.save('sample.xlsx') 隱藏單元格
優(yōu)化模式 在處理非常大的xlsx 文件時,,openPyXL 的常規(guī)模式無法處理這種負(fù)載。幸運(yùn)的是,,有兩種模式可以在(幾乎)恒定內(nèi)存消耗的情況下讀寫無限量的數(shù)據(jù),。from openpyxl import load_workbook wb = load_workbook(filename='large_file.xlsx', read_only=True) ws = wb['big_data']
for row in ws.rows: for cell in row: print(cell.value)
插入/刪除行/列,,移動區(qū)域單元格 插入行/列 在第7行之上插入一行,,如下: ws.insert_rows(7) 在第7列的左邊插入一列,,如下:
刪除行/列 從第6列開始,刪除3列,,即刪除6,、7、8列,,如下: ws.delete_cols(6, 3) 移動區(qū)域單元格 將
如果區(qū)域內(nèi)包含 ws.move_range('G4:H10', rows=1, cols=1, translate=True) 注釋
讀注釋,,如下:
寫注釋,,如下: comment = Comment('Text', 'Author') comment.width = 300 # 設(shè)置寬度 comment.height = 50 # 設(shè)置高度 ws['A1'].comment = comment ws['B2'].comment = comment 表格樣式 字體樣式 字體名稱、字體大小,、字體顏色,、加粗、斜體,、縱向?qū)R方式(有三種:
字體顏色可以用 font = Font(color='FFBB00')
font = Font(color='FFFFBB00') 繼承并重寫樣式,,如下:
填充樣式 詳情請移步 填充樣式 from openpyxl.styles import PatternFill
# fill_type 的樣式為 None 或 solid cell2.fill = PatternFill(fill_type=cell1.fill.fill_type, fgColor=cell1.fill.fgColor) 邊框樣式 詳情請移步 邊框樣式
對齊樣式 horizontal 的值有: from openpyxl.styles import Alignment
alignment=Alignment(horizontal='general', vertical='bottom', text_rotation=0, wrap_text=False, shrink_to_fit=False, indent=0) 保護(hù)樣式 鎖定、隱藏
整行或整列應(yīng)用樣式 col = ws.column_dimensions['A'] col.font = Font(bold=True) row = ws.row_dimensions[1] row.font = Font(underline='single') 更改合并的單元格樣式 合并的單元格可以想想成為左上角的那個單元格來操作,。 篩選和排序
生成的Excel表格,,有篩選排序的操作,但是沒有實際表現(xiàn)出效果,,如下圖: 需要手動點(diǎn)擊 密碼保護(hù) 該功能僅能提供一個很基礎(chǔ)的密碼保護(hù),沒有進(jìn)行加密處理,,網(wǎng)上普通的破解軟件都可以破解密碼,。不過,日常使用還是可以的,。 該功能僅可用于新建excel表格,,不能用于已存在的excel表格。 workbook工作薄保護(hù) 防止查看隱藏sheet,,避免增加,、移動、刪除,、隱藏或重命名sheet等操作,,可以保護(hù)workbook的結(jié)構(gòu),如下: wb.security.workbookPassword = '...' wb.security.lockStructure = True worksheet保護(hù) worksheet保護(hù)不需要密碼,,如下:
使用 Pandas 和 NumPy 詳情請移步 Working with Pandas and NumPy 圖表 圖表由至少一個系列的一個或多個單元格區(qū)域數(shù)據(jù)點(diǎn)組成,。更多內(nèi)容請移步 圖表介紹。 (點(diǎn)擊文末“閱讀全文”獲取跳轉(zhuǎn)外鏈) |
|