python操作excel的模塊簡直不要太多,
今天就為大家比較下各模塊之間的優(yōu)缺點(diǎn)。
最原始的莫過于兩位老牌黃金搭檔xlrd xlwt
了,針對二者的封裝有如下模塊:
模塊 | 官網(wǎng) |
---|
xlutils | https:///project/xlutils/ |
xlrd | https:///project/xlrd/ |
xlwt | https:///project/xlwt/ |
為什么把這三個(gè)一起說?
首先,xlutils封裝了xlrd xlwt,所以在使用前,會(huì)先下載這兩個(gè)依賴的模塊。
其次,這兩個(gè)模塊主要用于處理xls文件,而對xlsx的文件處理很挫,甚至xlwt不支持…
但為何到現(xiàn)在依然在使用這些模塊,因?yàn)樗麑ls文檔處理的優(yōu)勢….
模塊 | 官網(wǎng) |
---|
win32com | http:///python-excel-mini-cookbook/ |
DataNitro | https:/// |
這兩個(gè)模塊又是怎么一回事兒?他倆僅支持windows系統(tǒng)環(huán)境
win32com這個(gè)模塊大家不算陌生了,windows下的操作,哪兒他都能插一腿…至于使用,就點(diǎn)擊鏈接自己看吧…
至于DataNitro,本來不想說的,但畢竟很多帖子都提到了它,我不寫不太好,但大家知道他是一個(gè)Excel 的插件,安裝也需單獨(dú)到官網(wǎng)下載即可….
模塊 | 官網(wǎng) |
---|
pandas | https://www./ |
pandas作為數(shù)據(jù)分析利器,在處理excel方面也是犀利的一腿….
import pandas as pd
#方法一:默認(rèn)讀取第一個(gè)表單
df=pd.read_excel('lemon.xlsx')#這個(gè)會(huì)直接默認(rèn)讀取到這個(gè)Excel的第一個(gè)表單
data=df.head()#默認(rèn)讀取前5行的數(shù)據(jù)
print('獲取到所有的值:\n{0}'.format(data))#格式化輸出
#方法二:通過指定表單名的方式來讀取
df=pd.read_excel('lemon.xlsx',sheet_name='student')#可以通過sheet_name來指定讀取的表單
data=df.head()#默認(rèn)讀取前5行的數(shù)據(jù)
print('獲取到所有的值:\n{0}'.format(data))#格式化輸出
#方法三:通過表單索引來指定要訪問的表單,0表示第一個(gè)表單
#也可以采用表單名和索引的雙重方式來定位表單
#也可以同時(shí)定位多個(gè)表單,方式都羅列如下所示
df=pd.read_excel('lemon.xlsx',sheet_name=['python','student'])#可以通過表單名同時(shí)指定多個(gè)
# df=pd.read_excel('lemon.xlsx',sheet_name=0)#可以通過表單索引來指定讀取的表單
# df=pd.read_excel('lemon.xlsx',sheet_name=['python',1])#可以混合的方式來指定
# df=pd.read_excel('lemon.xlsx',sheet_name=[1,2])#可以通過索引 同時(shí)指定多個(gè)
data=df.values#獲取所有的數(shù)據(jù),注意這里不能用head()方法哦~
print('獲取到所有的值:\n{0}'.format(data))#格式化輸出
模塊 | 官網(wǎng) |
---|
xlsxwriter | https://xlsxwriter./ |
xlsxwriter擁有豐富的特性,支持圖片/表格/圖表/篩選/格式/公式等,功能與openpyxl相似,優(yōu)點(diǎn)是相比 openpyxl 還支持 VBA 文件導(dǎo)入,迷你圖等功能,缺點(diǎn)是不能打開/修改已有文件,意味著使用 xlsxwriter 需要從零開始。
代碼示例:
import xlsxwriter
# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()
# Some data we want to write to the worksheet.
expenses = (
['Rent', 1000],
['Gas', 100],
['Food', 300],
['Gym', 50],
)
# Start from the first cell. Rows and columns are zero indexed.
row = 0
col = 0
# Iterate over the data and write it out row by row.
for item, cost in (expenses):
worksheet.write(row, col, item)
worksheet.write(row, col + 1, cost)
row += 1
# Write a total using a formula.
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')
workbook.close()
模塊 | 官網(wǎng) |
---|
xlwings | http://docs./en/stable/ |
xlwings簡單強(qiáng)大,使用方便。而且搞笑的是,這是為數(shù)不多的模塊開發(fā)者,在平臺(tái)賣課的,哈哈….
image.pngimport xlwings as xw
#連接到excel
workbook = xw.Book(r'path/myexcel.xlsx')#連接excel文件
#連接到指定單元格
data_range = workbook.sheets('Sheet1').range('A1')
#寫入數(shù)據(jù)
data_range.value = [1,2,3]
#保存
workbook.save()
模塊 | 官網(wǎng) |
---|
openpyxl | https://openpyxl./en/latest/ |
最后要說說個(gè)人比較常用,也很方便的一個(gè)excel處理模塊openpyxl….這個(gè)模塊突出的優(yōu)勢在于,對excel單元格樣式的設(shè)置方面特別詳細(xì)。所以針對openpyxl,詳細(xì)的介紹一下.
>>> from openpyxl import Workbook
>>> 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)
AA
>>> wb.save(filename = dest_filename)
>>> from openpyxl import load_workbook
>>> wb = load_workbook(filename = 'empty_book.xlsx')
>>> sheet_ranges = wb['range names']
>>> print(sheet_ranges['D18'].value)
3
>>> from openpyxl import Workbook
>>> from openpyxl.drawing.image import Image
>>>
>>> wb = Workbook()
>>> ws = wb.active
>>> ws['A1'] = 'You should see three logos below'
>>> # create an image
>>> img = Image('logo.png')
>>> # add to worksheet and anchor next to cells
>>> ws.add_image(img, 'A1')
>>> wb.save('logo.xlsx')
以下是默認(rèn)值
>>> from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
>>> font = Font(name='Calibri',
... size=11,
... bold=False,
... italic=False,
... vertAlign=None,
... underline='none',
... strike=False,
... color='FF000000')
>>> fill = PatternFill(fill_type=None,
... start_color='FFFFFFFF',
... end_color='FF000000')
>>> border = Border(left=Side(border_style=None,
... color='FF000000'),
... right=Side(border_style=None,
... color='FF000000'),
... top=Side(border_style=None,
... color='FF000000'),
... bottom=Side(border_style=None,
... color='FF000000'),
... diagonal=Side(border_style=None,
... color='FF000000'),
... diagonal_direction=0,
... outline=Side(border_style=None,
... color='FF000000'),
... vertical=Side(border_style=None,
... color='FF000000'),
... horizontal=Side(border_style=None,
... color='FF000000')
... )
>>> alignment=Alignment(horizontal='general',
... vertical='bottom',
... text_rotation=0,
... wrap_text=False,
... shrink_to_fit=False,
... indent=0)
>>> number_format = 'General'
>>> protection = Protection(locked=True,
... hidden=False)
>>>