python處理excel文件可以使用openpyxl庫。
1.創建和保存excel文件,查看工作表標題:
>>> import openpyxl #引用openpyxl庫
>>> mywb=openpyxl.Workbook() #此時只創建一個工作表
>>> mywb.get_sheet_names() #.get_sheet_names()為棄用的函數,警告
Warning (from warnings module):
File "__main__", line 1
DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames).
['Sheet']
>>> mywb.sheetnames() #不該加括號
Traceback (most recent call last):
File "
", line 1, in
mywb.sheetnames()
TypeError: 'list' object is not callable
>>> mywb.sheetnames #新函數
['Sheet']
>>> sheet=mywb.active
>>> sheet.title #查看工作表標題
'Sheet'
>>> sheet.title='MyNewTitle' #更改工作表標題
>>> mywb.sheetnames
['MyNewTitle']
>>> mywb.save('NewExcelFile.xlsx') #在根目錄下將excel文件保存為NewExcelFile.xlsx
>>> mywb.save('E://desktop/NewExcelFile.xlsx') ##在桌面將excel文件保存為NewExcelFile.xlsx
保存文件時磁盤符(C、D、E、F等,大小寫均可) 后面必須跟冒號,斜線或反斜線可添加任意多個或0個,兩文件夾之間至少有一個斜線或反斜線,可無文件名,此時只有后綴。文件格式保存為.xlsx或.xls均可
2.已有excel文件另存:
>>> import openpyxl
>>> mywb=openpyxl.load_workbook('NewExcelFile.xlsx') #載入原有excel文件
>>> sheet=mywb.active
>>> sheet.title='Working on Save as' #修改工作表標題
>>> mywb.save('example_NewExcelFile.xlsx') #在根目錄下另存為'example_NewExcelFile.xlsx'
3.在excel中創建和刪除工作表:
>>> import openpyxl
>>> mywb=openpyxl.Workbook()
>>> mywb.get_sheet_names()
['Sheet']
>>> mywb.create_sheet() #創建新工作表
>>> mywb.get_sheet_names()
['Sheet', 'Sheet1']
>>> mywb.create_sheet(index=0,title='1stSheet') #創建新工作表1stSheet并放在最前面
>>> mywb.get_sheet_names()
['1stSheet', 'Sheet', 'Sheet1']
>>> mywb.create_sheet(index=2,title='2ndSheet') #創建新工作表1stSheet并放在第3個
>>> mywb.get_sheet_names()
['1stSheet', 'Sheet', '2ndSheet', 'Sheet1']
>>> mywb.remove_sheet(mywb.get_sheet_by_name('1stSheet')) #用棄用的函數刪除工作表彈出警告
Warning (from warnings module):
File "__main__", line 1
DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
Warning (from warnings module):
File "__main__", line 1
DeprecationWarning: Call to deprecated function remove_sheet (Use wb.remove(worksheet) or del wb[sheetname]).
>>> mywb.remove_sheet(mywb.get_sheet_by_name('Sheet1'))
>>> mywb.get_sheet_names()
['Sheet', '2ndSheet']
>>> mywb.remove_sheet(mywb['1stSheet']) #刪除不存在的工作表會報錯
Traceback (most recent call last):
File "
", line 1, in
mywb.remove_sheet(mywb['1stSheet'])
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\openpyxl\workbook\workbook.py", line 278, in __getitem__
raise KeyError("Worksheet {0} does not exist.".format(key))
KeyError: 'Worksheet 1stSheet does not exist.'
>>> mywb.remove_sheet(mywb['Sheet'])
>>> mywb.get_sheet_names()
['2ndSheet']
>>> del mywb['2ndSheet'] #新語法刪除工作表
>>> mywb.get_sheet_names() #工作表完全刪除
[]
4.單元格寫入數據、公式:
>>> import openpyxl
>>> mywb=openpyxl.Workbook()
>>> mysheet=mywb.get_sheet_by_name('Sheet')
>>> mysheet['F6']="Writing new Value!" #F6單元格寫入
>>> mysheet["f6"].value #單元格索引字母大小寫均可
'Writing new Value!'
>>> import openpyxl
>>> mywb=openpyxl.Workbook()
>>> mysheet=mywb.active
>>> mysheet["F6"]=500
>>> mysheet["F7"]=800
>>> sheet["D3"]='=SUM(F6:F7)' #單元格寫入公式
>>> mywb.save('Applyingformula.xlsx')
當需要用變量表示單元格時, 可以使用ws.cell(row,column)方式引用,其中列號也使用數字表示,列號的字母數字轉換函數如下:
col_number=openpyxl.utils.column_index_from_string(char)
col_char=openpyxl.unils.get_column_letter(number)
>>> from openpyxl.utils import*
>>> col_number=column_index_from_string('AAA')
>>> col_number
703
>>> col_char=get_column_letter(100)
>>> col_char
'CV'
>>> from openpyxl import load_workbook
>>> wb=load_workbook('NewExcelFile.xlsx')
>>> wb
>>> type(wb)
>>> ws=wb[wb.sheetnames[0]]
>>> ws
>>> type(ws)
>>> ws['A1']
>>> type(ws['A1'])
>>> ws['A1']=1 #A1單元格賦值
>>> ws['A1'].value
1
>>> ws.cell(1,1)
>>> ws.cell(1,2).value=2 #B1單元格cell()方式賦值
>>> ws.cell(1,2).value #用cell().value查看值
2
|
|
5.合并和取消合并單元格:
>>> import openpyxl
>>> mywb=openpyxl.Workbook()
>>> mysheet=mywb.active
>>> mysheet.merge_cells('B2:D3') #B2:D3合并,前者為左上角單元格,后者為右下角單元格,合并后的單元格寫入時用左上角的單元格
>>> mysheet['A1']='cells merged together.'
>>> mysheet.merge_cells('F6:F7') #F6:F7合并
>>> mysheet['G5']='Two merged cells.'
>>> mywb.save('Mergingcells.xlsx')
>>> import openpyxl
>>> mywb = openpyxl.load_workbook('Mergingcells.xlsx')
>>> mysheet = mywb.active
>>> mysheet.unmerge_cells('B2:D3') #單元格取消合并
>>> mysheet.unmerge_cells('F6:F7')
>>> mywb.save('unmerged.xlsx')
后者為右下角單元格,合并后的單元格寫入時用左上角的單元格。?
6.設置行高列寬:
>>> import openpyxl
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.active
>>> mysheet['F6'] = 'Tall row'
>>> mysheet['D7'] = 'Wide column'
>>> mysheet.row_dimensions[3].height = 65 #設置第3行行高為65
>>>mysheet.column_dimensions['F'].width = 25 #設置F列寬為25
>>>mywb.save('Heightandwidth.xlsx')
默認行高為12.75 points,1 point等于1/72 inch,行高范圍為0-409.
列寬范圍為0-255,可以是整數或浮點數。
行高列寬設為0時,被隱藏。
7.插入與刪除行、列:
ws.insert_rows(n) # 在第n行插入一行
ws.insert_cols(m,n) # 從第m列開始插入n列
ws.delete_cols(m, n) # 從第m列開始,刪除n列
ws.delete_rows(n) # 刪除第n行
上述兩種方式刪除行(列)后,下(后)面的表格自動上(前)移。
8.行列遍歷:
行列遍歷有兩種方式:
1.ws.max_row獲得表格的最大行數,取得遍歷次數,使用for循環遍歷:
>>>for row in range(2, ws.max_row + 1): # 一般第一行是表頭,所以從2開始,range()不含右邊界
for cell in row:
print(cell)
2.openpyxl中提供了行列生成器(ws.rows和ws.columns),這兩個生成器里面存儲了每一行(列)的數據,每一行由一個tuple包裹,便于對行列進行遍:
>>>for row in ws.rows:
for cell in row:
print(cell)
由于ws.rows或ws.columns是生成器類型,不能直接調用,使用時往往將其轉化未list類型,然后索引遍歷獲得某一行(列)的內容:
>>>for cell in list(ws.rows)[0]: #打印第一行的內容
print(cell.value)
此外,還可以使用sheet[行列值: 行列值]來對給定單元格范圍進行遍歷:
>>>for area_date in sheet[‘A1’:’H8’]: #打印A1到H8范圍內的內容
for cell in area_date:
print(cell.value)
9.設置字體:
>>> import openpyxl
>>> from openpyxl.styles import Font, Style
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.get_sheet_by_name('Sheet')
>>> italic32Font = Font(size=32, italic=True)
>>> sobj = Style(font=italic32Font)
>>> mysheet['F6'].style = sobj #設置F6單元格樣式為字號32,斜體
>>> mysheet['F6'] = 'Applying Styles!'
>>> mywb.save('Appliedstyle.xlsx')
>>> import openpyxl
>>> from openpyxl.styles import Font, Style
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.get_sheet_by_name('Sheet')
>>> firstFontObj = Font(name='Arial', bold=True) #斜體和加粗均為布爾類型
>>> firstStyleObj = Style(font=firstFontObj)
>>> mysheet['F6'].style/firstStyleObj
>>> mysheet['F6'] = 'Bold Arial'
>>> secondFontObj = Font(size=32, italic=True)
>>> secondStyleObj = Style(font=secondFontObj)
>>> mysheet['D7'].style/secondStyleObj
>>> mysheet['D7'] = '32 pt Italic'
>>> mywb.save('ApplicationofStyles.xlsx')
譯自:Python Excel Writer - Python Excel http://www.pythonexcel.com/python-excel-writer.php
參考:Python利用openpyxl處理Excel文件(單元格及行列具體操作)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
