使用python中的openpyxl操作excel詳解
python操作excel方法
1)自身有Win32 COM操作office但講不清楚,可能不支持夸平臺(tái),linux是否能用不清楚,其他有專(zhuān)業(yè)處理模塊,如下
2)xlrd:(讀excel)表,xlrd讀大表效率高于openpyxl
3)xlwt:(寫(xiě)excel)表,
xlrd和xlwt對(duì)版本上兼容不太好,很多新版excel有問(wèn)題。
新版excel處理:
openpyxl(可讀寫(xiě)excel表)專(zhuān)門(mén)處理Excel2007及以上版本產(chǎn)生的xlsx文件,xls和xlsx之間轉(zhuǎn)換容易
注意:如果文字編碼是“gb2312” 讀取后就會(huì)顯示亂碼,請(qǐng)先轉(zhuǎn)成Unicode
安裝openpyxl
1)下載openpyxl模塊:https://pypi.python.org/pypi/openpyxl
2)解壓到指定文件目錄:tar -xzvf openpyxl.tar.gz
3)進(jìn)入目錄,找到setup.py文件,執(zhí)行命令:python setup.py install
如果報(bào)錯(cuò)No module named setuptools 就使用命令“easy_install openpyxl”,easy_install for win32,會(huì)自動(dòng)安裝setuptools。
這里注意,如果不能自動(dòng)安裝,基本上python的模塊都通過(guò)命令 python 模塊名.py install 來(lái)安裝,如果setuptools模塊沒(méi)有,直接去官網(wǎng)下載,然后前面命令安裝就可以了
4)處理圖片還需要安裝pillow(PIL)
To be able to include images (jpeg, png, bmp,...) into an openpyxl file, you will also need the “pillow” library that can be installed with:
pip install pillow
openpyxl的使用
openpyxl定義多種數(shù)據(jù)格式
最重要的三種:
NULL空值:對(duì)應(yīng)于python中的None,表示這個(gè)cell里面沒(méi)有數(shù)據(jù)。
numberic: 數(shù)字型,統(tǒng)一按照浮點(diǎn)數(shù)來(lái)進(jìn)行處理。對(duì)應(yīng)于python中的float。
string: 字符串型,對(duì)應(yīng)于python中的unicode。
Excel文件三個(gè)對(duì)象
workbook: 工作簿,一個(gè)excel文件包含多個(gè)sheet。
sheet:工作表,一個(gè)workbook有多個(gè),表名識(shí)別,如“sheet1”,“sheet2”等。
cell: 單元格,存儲(chǔ)數(shù)據(jù)對(duì)象
1)導(dǎo)入
from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, Color, Fill from openpyxl.styles import colors from openpyxl.styles import Fill,fills from openpyxl.formatting.rule import ColorScaleRule
2)打開(kāi)workbook:
wb = load_workbook('file_name.xlsx')3)open sheet:
通過(guò)名字
ws = wb["frequency"]
等同于 ws2 = wb.get_sheet_by_name('frequency')
驗(yàn)證命令ws is ws2 is ws3 輸出True
不知道名字用index
sheet_names = wb.get_sheet_names()
ws = wb.get_sheet_by_name(sheet_names[index])# index為0為第一張表
或者
ws =wb.active
等同于 ws = wb.get_active_sheet() #通過(guò)_active_sheet_index設(shè)定讀取的表,默認(rèn)0讀第一個(gè)表
活動(dòng)表表名wb.get_active_sheet().title4)建新表
ws1 = wb.create_sheet() #默認(rèn)插在最后
ws2 = wb.create_sheet(0) #插在開(kāi)頭
建表后默認(rèn)名按順序,如sheet1,sheet2...
ws.title = "New Title" #修改表名稱(chēng)
簡(jiǎn)化 ws2 = wb.create_sheet(title="Pi")5)backgroud color of tab( be white by default)
ws.sheet_properties.tabColor = "1072BA" # set with RRGGBB color code
6)單元格使用
c = ws['A4'] #read 等同于 c = ws.cell('A4')
ws['A4'] = 4 #write
#ws.cell有兩種方式,行號(hào)列號(hào)從1開(kāi)始
d = ws.cell(row = 4, column = 2) #行列讀寫(xiě)
d = ws.cell('A4')
寫(xiě)入cell值
ws.cell(row = 4, column = 2).value = 'test'
ws.cell(row = 4, column = 2, value = 'test')7)訪問(wèn)多個(gè)單元格
cell_range = ws['A1':'C2'] 讀所有單元格數(shù)據(jù) get_cell_collection()
8) 按行操作,按列操作
a)逐行讀
ws.iter_rows(range_string=None, row_offset=0, column_offset=0): range-string(string)-單元格的范圍:例如('A1:C4') row_offset-添加行 column_offset-添加列
返回一個(gè)生成器, 注意取值時(shí)要用value,例如:
for row in ws.iter_rows('A1:C2'):
for cell in row:
print cell
讀指定行、指定列:
rows=ws.rows#row是可迭代的
columns=ws.columns#column是可迭代的
打印第n行數(shù)據(jù)
print rows[n]#不需要用.value
print columns[n]#不需要用.value
b)逐行寫(xiě)
(http://openpyxl.readthedocs.io/en/default/_modules/openpyxl/worksheet/worksheet.html#Worksheet.append)
ws.append(iterable)
添加一行到當(dāng)前sheet的最底部 iterable必須是list,tuple,dict,range,generator類(lèi)型的。 1,如果是list,將list從頭到尾順序添加。 2,如果是dict,按照相應(yīng)的鍵添加相應(yīng)的鍵值。
append([‘This is A1', ‘This is B1', ‘This is C1'])
append({‘A' : ‘This is A1', ‘C' : ‘This is C1'})
append({1 : ‘This is A1', 3 : ‘This is C1'})8) #顯示有多少?gòu)埍?/h4>
wb.get_sheet_names()
#顯示表名,表行數(shù),表列數(shù)
print ws.title
print ws.max_row
print ws.max_column
ws.get_highest_row() #UserWarning: Call to deprecated function
ws.get_highest_column()# UserWarning: Call to deprecated function
wb.get_sheet_names() #顯示表名,表行數(shù),表列數(shù) print ws.title print ws.max_row print ws.max_column ws.get_highest_row() #UserWarning: Call to deprecated function ws.get_highest_column()# UserWarning: Call to deprecated function
9) 獲得列號(hào)x的字母 col = get_column_letter(x), x從1開(kāi)始
from openpyxl.utils import get_column_letter
for x in range( 1, len(record)+ 1 ):
col = get_column_letter(x)
ws.cell( '%s%s' %(col, i)).value = x
通過(guò)列字母獲取多個(gè)excel數(shù)據(jù)塊
cell_range = "E3:{0}28".format(get_column_letter(bc_col))
ws["A1"] = "=SUM(%s)"%cell_range10)excel文件是gbk編碼,讀入時(shí)需要先encode為gbk,再decode為unicode,再encode為utf8
cell_value.encode('gbk').decode('gbk').encode('utf8') 11) 公式計(jì)算formulae
ws["A1"] = "=SUM(1, 1)" ws["A1"] = "=SUM(B1:C1)"
代碼實(shí)例實(shí)例(直接修改使用)
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.cell import get_column_letter
dest_filename = 'empty_book.xlsx'
wb = Workbook()
ws1 = wb.active
ws1.title = "range names"
for row in range(1, 40):
ws1.append(range(600))
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="%s" % get_column_letter(col))
print(ws3['AA10'].value)
wb.save(filename = dest_filename)
sheet_ranges = wb['range names']
print(sheet_ranges['D18'].value)
ws['A1'] = datetime.datetime(2010, 7, 21)
ws['A1'].number_format #輸出'yyyy-mm-dd h:mm:ss'
rows = [
['Number', 'Batch 1', 'Batch 2'],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
rows = [
['Date', 'Batch 1', 'Batch 2', 'Batch 3'],
[date(2015,9, 1), 40, 30, 25],
[date(2015,9, 2), 40, 25, 30],
[date(2015,9, 3), 50, 30, 45],
[date(2015,9, 4), 30, 25, 40],
[date(2015,9, 5), 25, 35, 30],
[date(2015,9, 6), 20, 40, 35],
]
for row in rows:
ws.append(row)excel中圖片的處理,PIL模塊
try:
from openpyxl.drawing import image
import PIL
except ImportError, e:
print "[ERROR]",e
report_file = self.excel_path + "/frquency_report_%d.xlsx" %id
shutil.copyfile(configs.PATTEN_FILE, report_file)
if not os.path.exists(report_file):
print "generate file failed: ", report_file
sys.exit(1)
wb = load_workbook(report_file)
ws = wb.get_sheet_by_name('frequency')
img_f = configs.IMAGE_LOGO
if os.path.exists(img_f):
try:
img = image.Image(img_f)
ws.add_image(img, 'A1')
except Exception, e:
print "[ERROR]%s:%s" % (type(e), e)
ws['A1'] = "程序化營(yíng)銷(xiāo)平臺(tái)"
else:
ws['A1'] = "程序化營(yíng)銷(xiāo)平臺(tái)"
font1 = Font(size=22)
ws['A1'].font = font1
ws['B4'] = ad_plan #等同ws.cell('B4') = ad_plan
ws['B5'] = ad_names
ws['B6'] = str(start_d) + ' to ' + str(end_d)
wb.save(report_file)
try:
wb = load_workbook(report_file)
ws = wb.get_sheet_by_name('frequency')
row = 9
for it in query_result:
one_row = it.split('\t')
print one_row
if '10' == one_row[0]:
one_row[0] = '10+'
col = 1
for one_cell in one_row:
ws.cell(row = row, column = col).value = one_cell
col = col + 1
row = row + 1
except Thrift.TException, tx:
print '[ERROR] %s' % (tx.message)
else:
wb.save(report_file)
finally:
pass示例:
from openpyxl.writer.excel import ExcelWriter
wb1=Workbook()#新建工作簿
ewb1=ExcelWriter(workbook=wb1)#新建一個(gè)ExcelWriter,用來(lái)寫(xiě)wb1
ws1=wb1.worksheets[0]#取得wb1的第一個(gè)工作表ws1
one_cell = ws1.cell(row = row, column = col).value
ws1.cell(row = row, column = col).value = one_cell
ewb1.save(filename=dest_filename)#保存一定要有,否則不會(huì)有結(jié)果 到此這篇關(guān)于使用python中的openpyxl操作excel詳解的文章就介紹到這了,更多相關(guān)python的openpyxl操作excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用pandas和openpyxl讀取Excel表格的方法詳解
- python使用openpyxl打開(kāi)及讀取excel表格過(guò)程
- python使用openpyxl實(shí)現(xiàn)對(duì)excel表格相對(duì)路徑的超鏈接的創(chuàng)建方式
- python openpyxl提取Excel圖片實(shí)現(xiàn)原理技巧
- python?openpyxl操作Excel的安裝使用
- python使用openpyxl庫(kù)處理Excel文件詳細(xì)教程
- Python通過(guò)OpenPyXL處理Excel的完整教程
- python使用openpyxl庫(kù)讀取Excel文件數(shù)據(jù)
- python如何通過(guò)openpyxl讀寫(xiě)Excel文件
- Python?Excel操作從零學(xué)習(xí)掌握openpyxl用法
- python操作Excel神器openpyxl看這一篇就夠了
- python使用Openpyxl操作Excel文件的實(shí)現(xiàn)
相關(guān)文章
Python 編碼規(guī)范(Google Python Style Guide)
本項(xiàng)目并非 Google 官方項(xiàng)目, 而是由國(guó)內(nèi)程序員憑熱情創(chuàng)建和維護(hù),對(duì)于想學(xué)習(xí)python的朋友可以參考一下2018-05-05
精選39道Python數(shù)據(jù)分析面試題提早備戰(zhàn)金三銀四
這篇文章主要為大家介紹了39道Python數(shù)據(jù)分析的面試題問(wèn)答攻略幫助大家提早備戰(zhàn)金三銀四,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多精進(jìn),早日度過(guò)寒冬2023-12-12
mac安裝scrapy并創(chuàng)建項(xiàng)目的實(shí)例講解
今天小編就為大家分享一篇mac安裝scrapy并創(chuàng)建項(xiàng)目的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python中httpx庫(kù)的詳細(xì)使用方法及案例詳解
httpx 是一個(gè)現(xiàn)代化的 Python HTTP 客戶(hù)端庫(kù),支持同步和異步請(qǐng)求,功能強(qiáng)大且易于使用,它比 requests 更高效,支持 HTTP/2 和異步操作,以下是 httpx 的詳細(xì)使用方法,感興趣的小伙伴跟著小編一起來(lái)看看吧2025-02-02
Python的加密模塊之hashlib 與 base64詳解及常用加密方法
我們來(lái)學(xué)習(xí)一下 Python 中的加密模塊,加密模塊在工作中被廣泛應(yīng)用,比如數(shù)據(jù)的傳入 不希望被捕獲,通過(guò)把數(shù)據(jù)加密。這樣即使被捕獲也無(wú)法獲取到數(shù)據(jù)的真實(shí)信息,今天我們就來(lái)學(xué)習(xí)一下關(guān)于加密的方法,感興趣的朋友跟隨小編一起看看吧2023-02-02
Python使用Tkinter庫(kù)如何設(shè)置tkinter ttk框架背景顏色
本文介紹了在Python的Tkinter庫(kù)中,如何使用style.configure方法為ttk框架設(shè)置背景顏色及其他樣式屬性,以定制美觀的GUI界面2024-09-09

