openpyxl讀寫Excel文件


安裝

pip install openpyxl

 

一個簡單的實例:

最初的表格

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import openpyxl
from openpyxl import Workbook
from openpyxl import load_workbook
import datetime

file_name='/Users/chichi/Documents/TestStudy/TestExcel/data.xlsx'
wb=load_workbook(file_name)
ws=wb['Sheet1']
#直接根據位置進行賦值
ws['A5']=400
ws['B5']='楊四'
#直接存儲Python的時間類型變量
ws['A11'] = datetime.datetime.now()
#cell方法通過輸入參數row、column、value來操作單元格
ws.cell(row=6,column=1,value=500)
ws.cell(row=6,column=2,value='程五')
#讀取數據
for row in ws.rows: # 返回的row是一個tuple對象
    for cell in row:
            print 'row: %s  column: %s  value: %s' % (cell.row,cell.column,cell.value)
# 保存文件
wb.save(file_name)

 

執行以上代碼后的表格:

 

Excel文檔名詞解釋:

一個Excel表格文件(xlsx)包含一個工作薄(workbook),一個工作薄可以包含多個工作表(worksheets)。用戶正在查看的工作表是激活的工作表(active sheet)。

每個工作表都有行和列,行以數字1開始,列以字母A開始。一個工作表由單元格(cell)組成,單元格可以存儲數字和字符串

 

Workbook屬性

sheetnames: 返回所有WorkSheet的名字列表,類型為list

worksheets: 返回所有WorkSheet的列表,類型為list

active: 返回當前默認選中的WorkSheet


實例:
test.xlsx  表格如下

 
        
file_name='/Users/chichi/Documents/TestStudy/test.xlsx'
wb=load_workbook(file_name)
print(wb.sheetnames)
print(wb.worksheets)
print(wb.active)

執行結果:

python /Users/chichi/Documents/TestStudy/TestOpenpyxl.py
[u'sheet-test2', u'Original Sheet', u'sheet-test1a']
[<Worksheet "sheet-test2">, <Worksheet "Original Sheet">, <Worksheet "sheet-test1a">]
<Worksheet "sheet-test2">

 


Workbook方法
get_sheet_names(): 同sheetnames
get_active_sheet(): 同active屬性
get_sheet_by_name(name):根據名稱獲取WorkSheet
remove(worksheet): 刪除一個WorkSheet,注意是WorkSheet對象,不是名字
save(filename): 保存到文件,記住有寫入操作記得保存!!!
file_name='/Users/chichi/Documents/TestStudy/test.xlsx'
wb=load_workbook(file_name)
wb.remove(wb.get_sheet_by_name('sheet-test1a'))
print (wb.get_sheet_names())
print (wb.get_active_sheet())
wb.save(file_name)

執行結果:

[u'sheet-test2', u'Original Sheet']
<Worksheet "Original Sheet">

 

如何創建一個Workbook對象?

# 利用openpyxl來創建Workbook對象無需新建文件,可以直接實例化一個Workbook對象即可
wb = Workbook()
dest_filename = '/Users/chichi/Documents/TestStudy/test.xlsx' ws = wb.active #每個workbook創建后,默認會存在一個worksheet,對默認的worksheet進行重命名 ws.title = "Original Sheet" #再自行創建一個sheet-test ws1 = wb.create_sheet("sheet-test1") #對worksheet進行重命名 ws1.title = "sheet-test1a" #指定插入worksheet的位置,第一個默認的worksheet 從0開始,在這之前插入sheet-test2 ws2 = wb.create_sheet("sheet-test2", 0) ws.sheet_properties.tabColor = "1072BA" # 查看一個workbook中全部的Worksheet的名稱,返回值為List print wb.sheetnames # 通過遍歷方式打印所有的sheetname for sheet in wb: print sheet.title wb.save(filename = dest_filename)

 

執行結果:

[u'sheet-test2', u'Original Sheet', u'sheet-test1a']
sheet-test2 Original Sheet sheet-test1a

 

 

WorkSheet屬性

rows: 返回所有有效數據行,有數據時類型為generator,無數據時為tuple
columns:返回所有有效數據列,類型同rows
max_column:有效數據最大列
max_row:有效數據最大行
min_column:有效數據最小列,起始為1
min_row:有效數據最大行,起始為1
values:返回所有單元格的值的列表,類型為tuple
title:WorkSheet的名稱
 
表格如下:

 

file_name='/Users/chichi/Documents/TestStudy/test.xlsx'
wb=load_workbook(file_name)
ws = wb.active
#打印出所有的單元格的值
for i in ws.rows:
    for j in i:
        print u"第%s行第%s列的值是%s:"   %(j.row,j.column,j.value)
print ws.rows
print ws.columns
print ws.max_column
print ws.max_row
print ws.title

print ws.values

執行結果:

第1行第A列的值是name:
第1行第B列的值是password:
第1行第C列的值是None:
第1行第D列的值是None:
第1行第E列的值是一:
第1行第F列的值是五:
第2行第A列的值是abc:
第2行第B列的值是kjklj:
第2行第C列的值是None:
第2行第D列的值是None:
第2行第E列的值是二:
第2行第F列的值是六:
第3行第A列的值是bbb:
第3行第B列的值是jklj:
第3行第C列的值是None:
第3行第D列的值是None:
第3行第E列的值是三:
第3行第F列的值是七:
第4行第A列的值是ccc:
第4行第B列的值是jkjlk:
第4行第C列的值是None:
第4行第D列的值是None:
第4行第E列的值是四:
第4行第F列的值是八:
第5行第A列的值是dddd:
第5行第B列的值是fd:
第5行第C列的值是None:
第5行第D列的值是None:
第5行第E列的值是雖:
第5行第F列的值是影響力:
<generator object _cells_by_row at 0x10cfaef00>
<generator object _cells_by_col at 0x10cfaef00>
6
5
sheet-test2
<generator object values at 0x10cfaef00>

 

Cell屬性

column:所在列,起始為1 row:所在行,起始為1 coordinate: 所在坐標,如'A1' parent: 所屬的WorkSheet value: 單元格的值

表格如下:

 



file_name='/Users/chichi/Documents/TestStudy/test.xlsx'
wb=load_workbook(file_name)
ws = wb.active
c1=ws['C7']
c1.value=300
print c1.row
print c1.column
print c1.coordinate
print c1.parent
c2=ws.cell(row=10,column=1,value=10)
print c2.value
wb.save(file_name)

執行結果:

7
C
C7
<Worksheet "sheet-test2">
10

 

 

 

如何操作Workbook中的數據?

file_name='/Users/chichi/Documents/TestStudy/test.xlsx'
wb=load_workbook(file_name)
#直接通過worksheet中單元格的位置來獲取單元格的值:
ws=wb['sheet-test2']
a = ws["A3"]
print a.value
#對單元格賦值或者修改單元格原有的值
ws["A4"] = "123"
print ws["A4"].value
#通過cell屬性操作單元格
b = ws.cell(row=6, column=1,value=100)
print b.value

執行結果:

 

如何一次性讀取很多單元格組成的塊的數據呢?

file_name='/Users/chichi/Documents/TestStudy/test.xlsx'
wb=load_workbook(file_name)
ws = wb.active
#通過索引切片的方式來獲取一組單元格的數據
cell_range = ws["A1":"C3"]
for i in cell_range:
    for j in i:
        print j.value
# 針對列的切片
cell_range = ws["A":"B"]
print  "A列至B列的數據如下:"  
for i in cell_range:
    for j in i:
        print j.value
# 針對行的切片
cell_range = ws["1":"2"]
print  "第1行至第2行的數據如下:"  
for i in cell_range:
    for j in i:
        print j.value      
# 針對worksheet提供了iter_rows方法來獲取一組單元格
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
    for cell in row:
        print cell.value

 

 

參考:https://www.missshi.cn/api/view/blog/5a001868e519f50d04000350

https://www.jianshu.com/p/ce2ba7caa414

http://blog.topspeedsnail.com/archives/5404 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM