關於python操作excel的程式碼及一些感悟
首先我們來看看一些python操作excel的主流包:
xlrd-----excelread xlwt------excelwrite xlutils openpyxl xlsxwriter
我們挨個來說,故事開始.......
情景一:xlwt
小明接到老闆的命令,對,是命令,不是要求,要用python新建並構造一個excel,然後儲存。這讓小明十分的傷腦筋,為啥不直接新建一個excel……可老闆就是老闆,他的話就是聖旨!至少小明是這樣認為的,所以,他必須要硬著頭皮做這件事情。
這個就需要xlwt了,小明百度之後發現了這個包,於是關於xlwt的故事就這樣展開了。
用途:用來重新構建一個excel,從建表開始,然後往裡面寫入資料。
直接上程式碼:
import xlwt
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('sheet 1')
#在0行的第一列寫入內容
sheet.write(0,1,'demo')
wbk.save('demo.xlsx')
還有很多關於這個包的操作,但是這篇文章的主要意義是幫助讀者在眾多python關於excel的包裡找到該用哪個包,也就是給大家基本的方向,所以,具體的操作不一一展開了。下面的包也按照這個格式來寫,大家如果感興趣,可以繼續往下進行~
情景二:xlrd
小明終於完成了老闆的任務,但是老闆的想法是你永遠猜不透的,現在,他又給小明出了一個難題,如何用python讀取剛才我儲存的excel檔案,並且展示出來呢?小明陷入了沉思,然後再次打開了百度。。。
用途:用來讀取已經存在的excel裡的資料
直接上程式碼:
import xlrd
rb= xlrd.open_workbook(r'demo.xlsx')
#讀取第一個表
sheet1=rb.sheet_by_index(0)#也可以根據表名獲取excel:sheet2 = workbook.sheet_by_name(sheet_name)
row=sheet1.row_values(3)#讀取第四行的內容
col=sheet1.col_values(1)#讀取第二列的內容
#獲取單元格資料
cell_A1 = table.cell_value(0,0)
好了到這裡,小明就已經能夠完成老闆的任務了~
情景三:xlutils
你以為這樣就完了嗎?錯,老闆是不會滿足的~現在老闆提出了一個要求,我要讀取一個excel然後修改另存為一下,這樣就達到了不改動原來的excel的前提下,複製了原來的excel並作出了修改然後儲存了。
這次小明有了一些自己的想法,既然有讀取excel的操作,那麼完全可以利用剛才咱們學到的xlrd,至於修改就比較頭痛了,於是就開始百度了。
用途:複製一個excel然後修改另存為一下
直接上程式碼:
import xlrd
import xlutils
#讀取一個excel
rb= xlrd.open_workbook(r'demo.xlsx')
demo1=xlutils.copy.copy(rb)
#讀取第一個表的內容
ws = workbooknew.get_sheet(0)
#修改
ws.write(0, 0, 'change')
#儲存
domo1.save(r'demo_change.xlsx')#前面可以加路徑
情景四:openpyxl
老闆不想用xlutils來修改一個excel,於是小明又傷腦筋了,他又屈辱百度了哈哈~他發現了這麼一個神奇的包。
用途:同上而且,悄悄地告訴你,這個包還可以讀!不用藉助xlrd!噓~
直接上程式碼:
import openpyxl excel1 = openpyxl.load_workbook(r'demo.xlsx') #讀出第一個表 sheet=excel1.worksheets[0] for i,row in enumerate(sheet.rows): row[2].value=1#每一行的第三列設為1 excel1.save('demo2.xlsx')
情景五:xlsxwriter
用途:xlsxwriter可以寫excel檔案並加上圖表
老闆想不到月薪幾k的小明竟然可以做到這麼多事情,於是,老闆出大招了!!~~畫圖!這可難不倒小明,不對,準確的說是百度是個好東西~!
直接上程式碼:
import xlsxwriter
def get_chart(series):
chart = workbook.add_chart({'type': 'line'})
for ses in series:
name = ses["name"]
values = ses["values"]
chart.add_series({
'name': name,
'categories': 'A2:A10',
'values':values
})
chart.set_size({'width': 700, 'height': 350})
return chart