Python3 進行讀取、修改和寫Excel表格(.xlsx檔案)的常用功能示例
讀取我一般用xlrd(僅支援讀),修改用openpyxl(支援讀寫改),寫用xlsxwriter(僅支援寫 )
xlrd安裝命令 pip install xlrd
openpyxl安裝命令 pip install openpyxl
xlsxwriter安裝命令 pip install xlsxwriter
(不多介紹,新手可以參考Ipython的安裝過程)
Win10中如何裝IPython?(其他Windows版本也通用)
https://blog.csdn.net/COCO56/article/details/81058483
下面是我經常用到的一些功能:
基礎功能:
xlrd
匯入庫,開啟test.xlsx,獲取該檔案的所有sheet名(呼叫的是函式,返回的是一個列表 )
import xlrd
workbook = xlrd.open_workbook('test.xlsx')
sheetnames = workbook.sheet_names()
通過名字遍歷每一個sheet,列印總行數和總列數以及第一行第一列的單元格的值(從0開始)
for sheetN in sheetnames: sheet = workbook.sheet_by_name(sheetN) print(sheet.nrows) print(sheet.ncols) print(sheet.cell(0,0).value)
openpyxl
載入一個已存在的檔案的例子(如果是需要新建的可以使用openpyxl.Workbook(‘hello.xlxs‘),不過單純新建的話建議用xlsxwriter)並列印Sheet_names
import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
print(wb.get_sheet_names())
接著上面的程式碼,訪問第一個worksheet,獲取該sheet的最大行數和最大列數(此外還有:min_row:表格的最小,min_column:表格的最小列,rows:按行獲取單元格(Cell物件) - 生成器,columns:按列獲取單元格(Cell物件) - 生成器,values:按行獲取表格的內容(資料) - 生成器)
ws = wb[wb.sheetnames[0]]
print(ws.max_row)
print(ws.max_column)
列印第一行第一列的單元格的值(注意是從1開始,不是從0開始,另外 row=和column=可預設)
print(ws.cell(row=1, column=1).value)
print(ws.cell(1, 1).value) #row=和column=可預設
修改第一行第一列的單元格的值為1並儲存(可以等全部修改完之後再儲存,不需要每次修改都儲存一下)
ws.cell(1, 1).value = 1
wb.save('test.xlsx')
xlsxwriter
開啟一個xlsx檔案(如果開啟的檔案存在 ,則清空該檔案,如果檔案不存在,則新建)
新建一個Sheet(名字預設的話,預設從Sheet1開始,可以新增自己的sheet名字workbook.add_worksheet(‘TestSheet’))
修改該Sheet的第一行的第一列的元素為1(行號和列號預設從0開始)
最後關閉檔案
import xlsxwriter
workbook = xlsxwriter.Workbook('test2.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0,0,1)
workbook.close()
進階功能:
openpyxl
https://blog.csdn.net/COCO56/article/details/84590544
xlsxwriter
官方文件:https://xlsxwriter.readthedocs.io/
1.設定自動換行、水平居中和垂直居中
import xlsxwriter
wb = xlsxwriter.Workbook('test.xlsx')
cell_format_wrap = wb.add_format({'text_wrap':True})
cell_format_vcenter = wb.add_format({'valign':'vcenter'})
cell_format_center = wb.add_format({'align':'center'})
cell_format_vcenter_and_center = wb.add_format({'align':'center', 'valign':'vcenter'})
ws = wb.add_worksheet()
ws.write(0, 0, 'data', cell_format_wrap)