用python處理Excel表

今天開始學習用python處理excel表

1、初識

首先認識一下在excel表的基本類型

  • 1 工作薄workbook即整個excel文件
  • 2 表單worksheet即excel文件中各個sheet表單
  • 3 行(row)列(column)單元格(cell)瓜晤,這是基本元素
    行號是1,2,3,列號是ABC
    不管是python還是VB驱犹,處理excel表時一定要弄清楚處理的對象是什么足画,是怎么樣的屬性和順序,例如行是從上到下遍歷荠医,列是從左到右遍歷

2桑涎、創(chuàng)建表單

對于創(chuàng)建一個新的Excel文檔兼贡,直接進行Workbook類的調(diào)用即可,對于一個已經(jīng)存在的Excel文檔等曼,可以使用openpyxl模塊的load_workbook函數(shù)進行讀取

import openpyxl
wb =openpyxl.load_workbook('ss.xlsx',)
print(wb.sheetnames)
for sheet in wb:
    #遍歷表單
    print(sheet.title)
#增加sheet表
add_sheet = wb.create_sheet("Mysheet")
print(wb.sheetnames)

運行結(jié)果

['Sheet1']
Sheet1
['Sheet1', 'Mysheet']

可以給wb.create_sheet()加索引凿蒜,

add_sheet = wb.create_sheet("Mysheet",0)

得到

['Sheet1']
Sheet1
['Mysheet', 'Sheet1']

新建成表的位置就變化了
注意,這樣load_workbook沒有改變原表格的內(nèi)容州泊,只是讀取了表格內(nèi)容放在內(nèi)存漂洋,所有原表格沒有變化

但是如果我們將wb另存,則可以看到變化

import openpyxl
wb =openpyxl.load_workbook('ss.xlsx',)
print(wb.sheetnames)
for sheet in wb:
    #遍歷表單
    print(sheet.title)
#增加sheet表
# add_sheet = wb.create_sheet("Mysheet",0)
for i in range(4):
    sheet = wb .create_sheet(str(i))
#另存文件演训,則新文件與源文件不一樣
wb.save('s1.xlsx')
print(wb.sheetnames)

選擇表單

#選擇表單
# sheet3 =wb.get_sheet_by_name('sheet3')
# sheet5 = wb['']

3贝咙、處理單元格

print(ws['A1'].value)
c = ws['B1']
#c.row,c.column,c.value分別表示行數(shù)、列數(shù)窟她、值
print('Row{},Colum{} is {}'.format(c.row,c.column,c.value))
#c.coordinate坐標,可以直接得到行列表示的值
print('cell {} is {}'.format(c.coordinate,c.value))
print(ws.cell(row =1,column=2).value)

借此機會把格式化字符串鞏固一下

各種取單元格礁苗、區(qū)域和遍歷的方式

#取行和列
#取第c列
colc =ws['c']
#注意,索引是從0開始嘁信,行標是從一開始疏叨,所以ws['c'][0]=ws['c1']
print(colc[2].value)
#取序列值
#訪問B到C所有單元格
col_range =ws['B:C']
#訪問2到6行
row_range = ws[2:6]
#遍歷
#循環(huán)先從列開始B——C
for col in col_range:
    #然后逐列從上往下取單元格
    for cell in col:
        print(cell.value)
#先行后單元格
for row in row_range:
    for cell in row:
        print(cell.value)

對區(qū)域進行處理

#取區(qū)域
#注意用iter_rows()取范圍的方式
for row in ws.iter_rows(min_row=1,max_row=2,max_col=2):
    for cell in row:
        print(cell)
cell_range = ws['A1:C3']
#區(qū)域內(nèi)的遍歷蚤蔓,先行后列
for rowofcellobjiect in cell_range:
    for cellobj in rowofcellobjiect:
        print(cellobj)
#最大行最大列
print('{}*{}'.format(ws.max_row,ws.max_column))

#列的表示不僅是A——Z,超過Z之后比較麻煩,所以改為數(shù)字
from openpyxl.utils import get_column_letter,column_index_from_string
#數(shù)字變列
print(get_column_letter(2),get_column_letter(900))
#字母變數(shù)字
print(column_index_from_string("AAH"))

4秀又、寫數(shù)據(jù)

import openpyxl
from openpyxl.utils import get_column_letter
wb = openpyxl.Workbook()
#當前活動頁
sheet = wb.active
print(sheet.title)
sheet.title = 'happy2020'
print(wb.get_sheet_names())
#新建表單
wb.create_sheet(index = 0,title='firstsheet')
wb.create_sheet(index = 1,title='secsheet')
print(wb.get_sheet_names())
#移除表單
wb.remove_sheet(wb.get_sheet_by_name('secsheet'))
print(wb.get_sheet_names())
#保存
wb.save('sss.xlsx')

#寫入單元格
#單元格有點類似字典變量吐辙,根據(jù)key索引
sheet['A1'] ='hello,world'
print(sheet['A1'].value)

ws1 = wb.create_sheet('rangename')
for row in range(1,40):
    ws1.append(range(17))

ws2 = wb.create_sheet('List')
rows =[
    ['number','batch1','batch2'],
    [2,4,6],
    [3,40,5],
    [4,50,33],
]
for row in rows:
    ws2.append(row)
ws3 = wb.create_sheet(title='bata')
for row in range(5,30):
    for col in range(15,54):
        ws3.cell(column=col,row= row,value=get_column_letter(col))
wb.save('sss.xlsx')

5、根據(jù)條件修改單元格數(shù)據(jù)

原表

現(xiàn)在要重新給不同的名字賦值
'zs':15,
'ls':20,
'ww':22,

import openpyxl
changemessage = {
    'zs':15,
    'ls':20,
    'ww':22,
}
wb = openpyxl.load_workbook('name.xlsx')
ws =wb.active
for rowNum in range(2,ws.max_row+1):
    name = ws.cell(row= rowNum,column=1).value
    if name in changemessage:
        ws.cell(row = rowNum,column=2).value = changemessage[name]
#一定要另存尊沸,不要覆蓋原文件
wb.save('name2.xlsx')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洼专,一起剝皮案震驚了整個濱河市孵构,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颈墅,老刑警劉巖精盅,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妻枕,居然都是意外死亡,警方通過查閱死者的電腦和手機屡谐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門愕掏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饵撑,你說我怎么就攤上這事」敢遥” “怎么了语卤?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钮孵。 經(jīng)常有香客問我眼滤,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任诱担,我火速辦了婚禮电爹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丐箩。我一直安慰自己,他們只是感情好施籍,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布概漱。 她就那樣靜靜地躺著,像睡著了一般竿裂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腻异,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天悔常,我揣著相機與錄音,去河邊找鬼这嚣。 笑死,一個胖子當著我的面吹牛姐帚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膳汪,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼九秀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痹换?” 一聲冷哼從身側(cè)響起都弹,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冯痢,沒想到半個月后框杜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡振劳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年油狂,在試婚紗的時候發(fā)現(xiàn)自己被綠了庐杨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夹供。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡哮洽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸟辅,到底是詐尸還是另有隱情,我是刑警寧澤枪眉,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布再层,位于F島的核電站,受9級特大地震影響蒿秦,放射性物質(zhì)發(fā)生泄漏蛋济。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一渡处、第九天 我趴在偏房一處隱蔽的房頂上張望祟辟。 院中可真熱鬧,春花似錦川尖、人聲如沸茫孔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剩晴。三九已至侵状,卻和暖如春毅整,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悼嫉。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工戏蔑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹋凝,地道東北人总棵。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓情龄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刃唤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容