python excel openpy_python处理excel文件
一、簡介
用python來自動生成excel數據文件。python處理excel文件主要是第三方模塊庫xlrd、xlwt、xluntils和pyExcelerator,除此之外,python處理excel還可以用win32com和openpyxl模塊。
安裝:
pip install xlutils
二、使用xlrd讀取文件:
importxlrd#打開一個workbook
workbook = xlrd.open_workbook('E:\\Code\\Python\\testdata.xls')#抓取所有sheet頁的名稱
worksheets =workbook.sheet_names()print('worksheets is %s' %worksheets)#定位到sheet1
worksheet1 = workbook.sheet_by_name(u'Sheet1')"""#通過索引順序獲取
worksheet1 = workbook.sheets()[0]
#或
worksheet1 = workbook.sheet_by_index(0)"""
"""#遍歷所有sheet對象
for worksheet_name in worksheets:
worksheet = workbook.sheet_by_name(worksheet_name)"""
#遍歷sheet1中所有行row
num_rows =worksheet1.nrowsfor curr_row inrange(num_rows):
row=worksheet1.row_values(curr_row)print('row%s is %s' %(curr_row,row))#遍歷sheet1中所有列col
num_cols =worksheet1.ncolsfor curr_col inrange(num_cols):
col=worksheet1.col_values(curr_col)print('col%s is %s' %(curr_col,col))#遍歷sheet1中所有單元格cell
for rown inrange(num_rows):for coln inrange(num_cols):
cell=worksheet1.cell_value(rown,coln)printcell"""#其他寫法:
cell = worksheet1.cell(rown,coln).value
print cell
#或
cell = worksheet1.row(rown)[coln].value
print cell
#或
cell = worksheet1.col(coln)[rown].value
print cell
#獲取單元格中值的類型,類型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
cell_type = worksheet1.cell_type(rown,coln)
print cell_type"""
三、使用xlwt生成Excel文件(可以控制Excel中單元格的格式):
importxlwt#創建workbook和sheet對象
workbook = xlwt.Workbook() #注意Workbook的開頭W要大寫
sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
sheet2= workbook.add_sheet('sheet2',cell_overwrite_ok=True)#向sheet頁中寫入數據
sheet1.write(0,0,'this should overwrite1')
sheet1.write(0,1,'aaaaaaaaaaaa')
sheet2.write(0,0,'this should overwrite2')
sheet2.write(1,2,'bbbbbbbbbbbbb')"""#-----------使用樣式-----------------------------------
#初始化樣式
style = xlwt.XFStyle()
#為樣式創建字體
font = xlwt.Font()
font.name = 'Times New Roman'
font.bold = True
#設置樣式的字體
style.font = font
#使用樣式
sheet.write(0,1,'some bold Times text',style)"""
#保存該excel文件,有同名文件時直接覆蓋
workbook.save('E:\\Code\\Python\\test2.xls')print '創建excel文件完成!'
四、使用xluntils模塊修改文件:
importxlrdimportxlutils.copy#打開一個workbook
rb = xlrd.open_workbook('E:\\Code\\Python\\test1.xls')
#復制的Excel是沒有格式的,要保留原格式需要使用:rb = xlrd.open_workbook('E:\\Code\\Python\\test1.xls',formatting_info=True)
wb=xlutils.copy.copy(rb)#獲取sheet對象,通過sheet_by_index()獲取的sheet對象沒有write()方法
ws =wb.get_sheet(0)#寫入數據
ws.write(1, 1, 'changed!')#添加sheet頁
wb.add_sheet('sheetnnn2',cell_overwrite_ok=True)#利用保存時同名覆蓋達到修改excel文件的目的,注意未被修改的內容保持不變
wb.save('E:\\Code\\Python\\test1.xls')
在修改的過程中,使用ws.write()被修改的單元格會清空格式,若要保留原格式,需要使用以下函數:
#本文重點,該函數中定義:對于沒有任何修改的單元格,保持原有格式。
defsetOutCell(outSheet, col, row, value):"""Change cell value without changing formatting."""
def_getOutCell(outSheet, colIndex, rowIndex):"""HACK: Extract the internal xlwt cell representation."""row=outSheet._Worksheet__rows.get(rowIndex)if not row: returnNone
cell=row._Row__cells.get(colIndex)returncell#HACK to retain cell style.
previousCell =_getOutCell(outSheet, col, row)#END HACK, PART I
outSheet.write(row, col, value)#HACK, PART II
ifpreviousCell:
newCell=_getOutCell(outSheet, col, row)ifnewCell:
newCell.xf_idx=previousCell.xf_idx#使用函數setOutCell代替ws.write()
setOutCell(ws,col,row,"寫入內容")
五、pyExcelerator模塊與xlwt類似,也可以用來生成excel文件
讀:
importpyExcelerator#parse_xls返回一個列表,每項都是一個sheet頁的數據。#每項是一個二元組(表名,單元格數據)。其中單元格數據為一個字典,鍵值就是單元格的索引(i,j)。如果某個單元格無數據,那么就不存在這個值
sheets = pyExcelerator.parse_xls('E:\\Code\\Python\\testdata.xls')print sheets
寫:
importpyExcelerator#創建workbook和sheet對象
wb =pyExcelerator.Workbook()
ws= wb.add_sheet(u'第一頁')#設置樣式
myfont =pyExcelerator.Font()
myfont.name= u'Times New Roman'myfont.bold=True
mystyle=pyExcelerator.XFStyle()
mystyle.font=myfont#寫入數據,使用樣式
ws.write(0,0,u'ni hao 帕索!',mystyle)#保存該excel文件,有同名文件時直接覆蓋
wb.save('E:\\Code\\Python\\mini.xls')print '創建excel文件完成!'
報錯:
但是我們會發現在讀取xlsx格式的Excel時,傳入formatting_info會直接拋出異常,而讀取xls類型的文件時不存在此問題。
raise NotImplementedError("formatting_info=True not yet implemented")
不難推斷,拋異常的原因是formatting_info還沒有對新版本的xlsx的格式完成兼容。
那么如果我們要操作的文件剛好是xlsx格式,又想保存其原有的格式該怎么辦呢?
1、修改為xlsx為xls(推薦)
將xlsx另存為xls,然后再進行后續操作,親測有效,能正常保存Excel原有格式, 不用修改代碼。
2、改用 openpyxl
coding嘗試讀取文件,處理速度真的很慢...而且規則和宏全部丟失。
3、使用pywin32
這是用于Win32 (pywin32)擴展的Python擴展庫,它提供了對許多來自Python的Windows api的訪問。
4、使用老舊的版本 xlrd-0.6.1
使用xlrd-0.6.1可以讀取,沒有異常拋出。直到我傳入其他幾個xls文件,出現Expected BOF record; found 0x4b50 錯誤,原因是xlrd-0.6.1不支持office2007
參考:
總結
以上是生活随笔為你收集整理的python excel openpy_python处理excel文件的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: bim 水利枢纽 运维_BIM在运维阶段
- 下一篇: apk 路由器劫持_一种在路由器上防止网
