使用python中的openpyxl操作excel詳解
python操作excel方法
1)自身有Win32 COM操作office但講不清楚,可能不支持夸平臺,linux是否能用不清楚,其他有專業(yè)處理模塊,如下
2)xlrd:(讀excel)表,xlrd讀大表效率高于openpyxl
3)xlwt:(寫excel)表,
xlrd和xlwt對版本上兼容不太好,很多新版excel有問題。
新版excel處理:
openpyxl(可讀寫excel表)專門處理Excel2007及以上版本產生的xlsx文件,xls和xlsx之間轉換容易
注意:如果文字編碼是“gb2312” 讀取后就會顯示亂碼,請先轉成Unicode
安裝openpyxl
1)下載openpyxl模塊:https://pypi.python.org/pypi/openpyxl
2)解壓到指定文件目錄:tar -xzvf openpyxl.tar.gz
3)進入目錄,找到setup.py文件,執(zhí)行命令:python setup.py install
如果報錯No module named setuptools 就使用命令“easy_install openpyxl”,easy_install for win32,會自動安裝setuptools。
這里注意,如果不能自動安裝,基本上python的模塊都通過命令 python 模塊名.py install 來安裝,如果setuptools模塊沒有,直接去官網下載,然后前面命令安裝就可以了
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定義多種數據格式
最重要的三種:
NULL空值:對應于python中的None,表示這個cell里面沒有數據。
numberic: 數字型,統(tǒng)一按照浮點數來進行處理。對應于python中的float。
string: 字符串型,對應于python中的unicode。
Excel文件三個對象
workbook: 工作簿,一個excel文件包含多個sheet。
sheet:工作表,一個workbook有多個,表名識別,如“sheet1”,“sheet2”等。
cell: 單元格,存儲數據對象
1)導入
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)打開workbook:
wb = load_workbook('file_name.xlsx')3)open sheet:
通過名字
ws = wb["frequency"]
等同于 ws2 = wb.get_sheet_by_name('frequency')
驗證命令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() #通過_active_sheet_index設定讀取的表,默認0讀第一個表
活動表表名wb.get_active_sheet().title4)建新表
ws1 = wb.create_sheet() #默認插在最后
ws2 = wb.create_sheet(0) #插在開頭
建表后默認名按順序,如sheet1,sheet2...
ws.title = "New Title" #修改表名稱
簡化 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有兩種方式,行號列號從1開始
d = ws.cell(row = 4, column = 2) #行列讀寫
d = ws.cell('A4')
寫入cell值
ws.cell(row = 4, column = 2).value = 'test'
ws.cell(row = 4, column = 2, value = 'test')7)訪問多個單元格
cell_range = ws['A1':'C2'] 讀所有單元格數據 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-添加列
返回一個生成器, 注意取值時要用value,例如:
for row in ws.iter_rows('A1:C2'):
for cell in row:
print cell
讀指定行、指定列:
rows=ws.rows#row是可迭代的
columns=ws.columns#column是可迭代的
打印第n行數據
print rows[n]#不需要用.value
print columns[n]#不需要用.value
b)逐行寫
(http://openpyxl.readthedocs.io/en/default/_modules/openpyxl/worksheet/worksheet.html#Worksheet.append)
ws.append(iterable)
添加一行到當前sheet的最底部 iterable必須是list,tuple,dict,range,generator類型的。 1,如果是list,將list從頭到尾順序添加。 2,如果是dict,按照相應的鍵添加相應的鍵值。
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) #顯示有多少張表
wb.get_sheet_names() #顯示表名,表行數,表列數 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) 獲得列號x的字母 col = get_column_letter(x), x從1開始
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
通過列字母獲取多個excel數據塊
cell_range = "E3:{0}28".format(get_column_letter(bc_col))
ws["A1"] = "=SUM(%s)"%cell_range10)excel文件是gbk編碼,讀入時需要先encode為gbk,再decode為unicode,再encode為utf8
cell_value.encode('gbk').decode('gbk').encode('utf8') 11) 公式計算formulae
ws["A1"] = "=SUM(1, 1)" ws["A1"] = "=SUM(B1:C1)"
代碼實例實例(直接修改使用)
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'] = "程序化營銷平臺"
else:
ws['A1'] = "程序化營銷平臺"
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)#新建一個ExcelWriter,用來寫wb1
ws1=wb1.worksheets[0]#取得wb1的第一個工作表ws1
one_cell = ws1.cell(row = row, column = col).value
ws1.cell(row = row, column = col).value = one_cell
ewb1.save(filename=dest_filename)#保存一定要有,否則不會有結果 到此這篇關于使用python中的openpyxl操作excel詳解的文章就介紹到這了,更多相關python的openpyxl操作excel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Python使用pandas和openpyxl讀取Excel表格的方法詳解
- python使用openpyxl打開及讀取excel表格過程
- python使用openpyxl實現對excel表格相對路徑的超鏈接的創(chuàng)建方式
- python openpyxl提取Excel圖片實現原理技巧
- python?openpyxl操作Excel的安裝使用
- python使用openpyxl庫處理Excel文件詳細教程
- Python通過OpenPyXL處理Excel的完整教程
- python使用openpyxl庫讀取Excel文件數據
- python如何通過openpyxl讀寫Excel文件
- Python?Excel操作從零學習掌握openpyxl用法
- python操作Excel神器openpyxl看這一篇就夠了
- python使用Openpyxl操作Excel文件的實現
相關文章
Python 編碼規(guī)范(Google Python Style Guide)
本項目并非 Google 官方項目, 而是由國內程序員憑熱情創(chuàng)建和維護,對于想學習python的朋友可以參考一下2018-05-05
精選39道Python數據分析面試題提早備戰(zhàn)金三銀四
這篇文章主要為大家介紹了39道Python數據分析的面試題問答攻略幫助大家提早備戰(zhàn)金三銀四,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多精進,早日度過寒冬2023-12-12
Python的加密模塊之hashlib 與 base64詳解及常用加密方法
我們來學習一下 Python 中的加密模塊,加密模塊在工作中被廣泛應用,比如數據的傳入 不希望被捕獲,通過把數據加密。這樣即使被捕獲也無法獲取到數據的真實信息,今天我們就來學習一下關于加密的方法,感興趣的朋友跟隨小編一起看看吧2023-02-02
Python使用Tkinter庫如何設置tkinter ttk框架背景顏色
本文介紹了在Python的Tkinter庫中,如何使用style.configure方法為ttk框架設置背景顏色及其他樣式屬性,以定制美觀的GUI界面2024-09-09

