Excel作為Office的數據處理軟體,我們幾乎每天都在使用。雖然好用,但在大量錄入、處理數據的時候,效率未免有點低。因此,很多學了Python的同學,會利用Python的第三方庫來批量操作Excel,提升效率。
Python有很多支持操作Excel的第三方庫,今天推薦的5個庫,看看它們是如何讓Excel效率起飛的!
XlwingsXlwings是非常強大的處理Excel的庫,無論是Windows還是Mac,Excel還是WPS,都可以使用。
它功能非常齊全,能十分方便地新建、打開、修改、保存Excel,可以和matplotlib、numpy以及pandas無縫連接,支持讀寫numpy、pandas數據類型,將matplotlib可視化圖表導入到excel中。另外,還可以調用Excel文件中VBA寫好的程序,也可以讓VBA調用Python寫的程序。
import xlwings as xw #導入庫
app = xw.App(visible=True,add_book=False)
wb = app.books.add() #打開Excel程序
wb = xw.Book('example.xlsx') #打開已有工作簿
wb.save('example.xlsx') #保存工作簿
wb.close() #退出工作簿(可省略)
app.quit() #退出Excel
sht = wb.sheets[0] #引用工作表,括號內是第一個sheet名
rng = sht.range('a1')
#rng = sht['a1'] #引用單元格,第一行的第一列即a1
rng = sht.range('a1:a5') #引用區域
sht.range('a1').value = 'Hello' #單元格A1,寫入字符串『Hello』
sht.range('a1').value = [1,2,3,4] #默認按行插入:A1:D4分別寫入1,2,3,4
sht.range('a2').options(transpose=True).value = [5,6,7,8] #按列插入
sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']] #多行輸入
print(sht.range('a1:d4').value) #讀取A1:D4
rng = sht.range('a1').expand('table')
nrows = rng.rows.count
a = sht.range(f'a1:a{nrows}').value #讀取Excel第一列
ncols = rng.columns.count
fst_col = sht[0,:ncols].value #讀取Excel第一行
sht.range('A1').column #獲取單元格列標
sht.range('A1').row #獲取行標
sht.range('A1').column_width #獲取列寬
sht.range('A1').row_height #獲取行高
print(sht.range('A1').column ,sht.range('A1').row ,sht.range('A1').column_width ,sht.range('A1').row_height )
sht.range('A1').rows.autofit() #行高自適應
sht.range('A1').columns.autofit()#列寬自適應
sht.range('A1').color=(34,156,65) #給單元格A1上背景色
sht.range('A1').color #返回單元格顏色的RGB值
print(sht.range('A1').color)
sht.range('A1').color = None #清楚單元格顏色
print(sht.range('A1').color)
sht.range('A1').formula='=SUM(B6:B7)' #輸入公式,相應單元格執行結果
sht.range('A1').formula_array #獲取單元格公式
sht.range('A1').value=[['a1','a2','a3'],[1,2,3]] #向指定單元格位置寫入批量信息
sht.range('A1').expand().value #使用expand()方法讀取表中批量數據
print(sht.range('A1').expand().value)
import numpy as np
np_data = np.array((1,2,3))
sht.range('F1').value = np_data #寫入numpy array數據類型
import pandas as pd
df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
sht.range('A5').value = df #將pandas DataFrame數據類型寫入excel
sht.range('A5').options(pd.DataFrame,expand='table').value #將數據讀取,輸出類型為DataFrame
import matplotlib.pyplot as plt
%matplotlib inline
fig = plt.figure()
plt.plot([1, 2, 3, 4, 5])
sht.pictures.add(fig, name='MyPlot', update=True) #將matplotlib圖表寫入到excel表格裡
xlrd主要是讀取Excel,支持xlsx和xls格式的excel表格,可以實現指定表單、指定行列、指定單元格的讀取。
import xlrd #導入庫
data = xlrd.open_workbook(filename) #文件名以及路徑,如果路徑或者文件名有中文給前面加一個r拜師原生字符
# 獲取book中一個工作表
table = data.sheets()[0] #通過索引順序獲取
table = data.sheet_by_index(sheet_indx)) #通過索引順序獲取
table = data.sheet_by_name(sheet_name) #通過名稱獲取
names = data.sheet_names() #返回book中所有工作表的名字
data.sheet_loaded(sheet_name or indx) # 檢查某個sheet是否導入完畢
nrows = table.nrows #獲取該sheet中的有效行數
table.row(rowx) #返回由該行中所有的單元格對象組成的列表
table.row_slice(rowx) #返回由該列中所有的單元格對象組成的列表
table.row_types(rowx, start_colx=0, end_colx=None) #返回由該行中所有單元格的數據類型組成的列表
table.row_values(rowx, start_colx=0, end_colx=None) #返回由該行中所有單元格的數據組成的列表
table.row_len(rowx) #返回該列的有效單元格長度
ncols = table.ncols #獲取列表的有效列數
table.col(colx, start_rowx=0, end_rowx=None) #返回由該列中所有的單元格對象組成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由該列中所有的單元格對象組成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) #返回由該列中所有單元格的數據類型組成的列表
table.col_values(colx, start_rowx=0, end_rowx=None) #返回由該列中所有單元格的數據組成的列表
table.cell(rowx,colx) #返回單元格對象
table.cell_type(rowx,colx) #返回單元格中的數據類型
table.cell_value(rowx,colx) #返回單元格中的數據
xlwt主要是寫入Excel,可以實現指定表單、指定單元格的寫入,但保存的格式只支持xls格式。
import xlwt #導入模塊
workbook = xlwt.Workbook(encoding='utf-8') #創建workbook 對象
worksheet = workbook.add_sheet('sheet1') #創建工作表sheet
worksheet.write(0, 0, 'hello') #往表中寫內容,第一各參數 行,第二個參數列,第三個參數內容
workbook.save('students.xls') #保存表為students.xls
# 為內容設置style
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')
# 設置字體樣式
font = xlwt.Font()
font.name = 'Time New Roman' # 字體
font.bold = True # 加粗
font.underline = True # 下劃線
font.italic = True # 斜體
style = xlwt.XFStyle()
style.font = font # 創建style
worksheet.write(0, 1, 'world', style)
workbook.save('students.xls') # 根據樣式創建workbook
# 合併單元格
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')
# 通過worksheet調用merge()創建合併單元格
# 第一個和第二個參數單表行合併,第三個和第四個參數列合併,
# 合併第0列到第2列的單元格
worksheet.write_merge(0, 0, 0, 2, 'first merge')
# 合併第1行第2行第一列的單元格
worksheet.write_merge(0, 1, 0, 0, 'first merge')
workbook.save('students.xls')
# 設置單元格的對齊方式
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平居中
alignment.vert = xlwt.Alignment.VERT_CENTER # 垂直居中
style = xlwt.XFStyle()
style.alignment = alignment
worksheet.col(0).width = 6666 # 設置單元格寬度
worksheet.row(0).height_mismatch = True
worksheet.row(0).height = 1000 # 設置單元格的高度
worksheet.write(0, 0, 'hello world', style)
workbook.save('center.xls')
# 設置單元格邊框
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')
border = xlwt.Borders()
# DASHED虛線
# NO_LINE沒有
# THIN實線
border.left = xlwt.Borders.THIN
border.right = xlwt.Borders.THIN
border.top = xlwt.Borders.THIN
border.bottom = xlwt.Borders.THIN
style = xlwt.XFStyle()
style.borders = border
worksheet.write(1, 1, 'love', style)
workbook.save('dashed.xls')
# 設置單元格背景色
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 3
style = xlwt.XFStyle()
style.pattern = pattern
worksheet.write(1, 1, 'shit', style)
workbook.save('shit.xls')
# 設置字體顏色
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')
font = xlwt.Font()
# 設置字體為紅色
font.colour_index=xlwt.Style.colour_map['red']
style = xlwt.XFStyle()
style.font = font
worksheet.write(0, 1, 'world', style)
workbook.save('students.xls')
XlsxWriter
XlsxWriter可以用來寫文本、數字、公式並支持單元格格式化、圖片、圖表、文檔配置、自動過濾等特性,不過缺點也很明顯,不能用來讀取和修改Excel文件。
import xlsxwriter # 導入庫
work_book = xlsxwriter.Workbook('my first.xlsx') # 創建一個excel文件,文件名為"my first.xlsx"
work_sheet1 = work_book.add_worksheet() # 添加shhet1
work_sheet2 = work_book.add_worksheet('my excel.xlsx') # 添加sheet名字為my excel.xlsx
work_sheet3 = work_book.add_worksheet() # 不加參數,默認添加sheet3
# write_number:寫入數字
# write_blank:寫入空格
# write_formula:寫入公式
# write_datetime:寫入時間格式
# write_boolean:寫入邏輯數據
# write_url:寫入連結地址
work_sheet2.write_string(0, 0, 'this is write string!')
work_sheet2.write_number('A2', 123456)
work_sheet2.write_blank('A3', None)
work_sheet2.write_number('B1', 12)
work_sheet2.write_number('B2', 24)
work_sheet2.write_number('B3', 35)
work_sheet2.write_formula('B7', '=sum(b1:b5)')
work_sheet2.write_datetime(0, 3, datetime.datetime.strptime('2019-04-18', '%Y-%m-%d'),
work_book.add_format({'num_format': 'yyyy-mm-dd'}))
work_sheet1.write_boolean(0, 0, True)
work_sheet1.write_url('A2', 'http://www.toutiao.com')
openpyxl 是比較火的操作excel表格的Python庫,只支持03版本之後的 xlsx。
# 創建工作簿 Workbook
from openpyxl import Workbook
workbook = Workbook() # 創建一個工作簿對象
workbook.save('test.xlsx') # 保存這個工作簿,命名為test
# 打開已有工作簿
from openpyxl import load_workbook
workbook = load_workbook('test.xlsx') # #打開當前路徑下的test表格
# 創建表
# 方法1:插入到最後(default)
ws1 = wb.create_sheet("Mysheet")
# 方法2:插入到最開始的位置
ws2 = wb.create_sheet("Mysheet", 0)
# 選擇現有的表
from openpyxl import load_workbook
workbook = load_workbook('test.xlsx') # 打開當前路徑下的test表格
sheet = workbook['first_sheet'] # 選擇名字為first_sheet的表格頁
# 刪除表
from openpyxl import load_workbook
workbook = load_workbook('test.xlsx') # 打開當前路徑下的test表格
sheet = workbook['first_sheet'] # 選擇名字為first_sheet的表格頁
workbook.remove(sheet) #刪除這張表
# 訪問單元格
# 方法1
cell1 = sheet['A1']
# 方法2
cell2 = sheet.cell(row=1,column=2)
cell1.value = '123456' # 設置單元格的值
sheet.merge_cells('A1:A2') #合併A1和A2單元格
今天就暫時先推薦到這裡,有需要的同學趕緊收藏起來~~