Python讀寫Excel表格,就是這麼簡單粗暴又好用

2021-03-02 程序人生

點擊上方「程序人生」,選擇「置頂公眾號」

第一時間關注程序猿(媛)身邊的故事

圖片源自unsplash

作者

丁彥軍

如需轉載,請聯繫原作者授權。

最近在做一些數據處理和計算的工作,因為數據是以.csv格式保存的,因此剛開始直接用Excel來處理。但是做著做著發現重複的勞動其實並沒有多大的意義,於是就想著寫個小工具幫著處理。以前正好在一本書上看到過使用Python來處理Excel表格,可惜沒有仔細看。於是我到處查找資料,基本解決了日常所需,終於算是完成了任務,因此撰寫此文就算是總結吧,主要記錄使用過程的常見問題及解決。

python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。可從這裡下載https://pypi.python.org/pypi。下面分別記錄python讀和寫excel。

Python寫excel——xlwt

Python寫excel的難點不在構造一個workbook的本身,而是填充的數據,不過這不在範圍內。在寫excel的操作中也有棘手的問題,比如寫入合併的單元格就是比較麻煩的,另外寫入還有不同的樣式。

詳細代碼如下:

import xlwt

#設置表格樣式

def set_style(name,height,bold=False):

style = xlwt.XFStyle()

font = xlwt.Font()

font.name = name

font.bold = bold

font.color_index = 4

font.height = height

style.font = font

return style

#寫Excel

def write_excel():

f = xlwt.Workbook()

sheet1 = f.add_sheet('學生',cell_overwrite_ok=True)

row0 = ["姓名","年齡","出生日期","愛好"]

colum0 = ["張三","李四","戀習Python","小明","小紅","無名"]

#寫第一行

for i in range(0,len(row0)):

sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))

#寫第一列

for i in range(0,len(colum0)):

sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True))

sheet1.write(1,3,'2006/12/12')

sheet1.write_merge(6,6,1,3,'未知')#合併行單元格

sheet1.write_merge(1,2,3,3,'打遊戲')#合併列單元格

sheet1.write_merge(4,5,3,3,'打籃球')

f.save('test.xls')

if __name__ == '__main__':

write_excel()

結果圖:


在此,對write_merge()的用法稍作解釋,如上述:sheet1.write_merge(1,2,3,3,'打遊戲'),即在四列合併第2,3列,合併後的單元格內容為"合計",並設置了style。其中,裡面所有的參數都是以0開始計算的。

Python讀excel——xlrd

Python讀取Excel表格,相比xlwt來說,xlrd提供的接口比較多,但過程也有幾個比較麻煩的問題,比如讀取日期、讀合併單元格內容。

下面先看看基本的操作:

圖表數據

整體思路為,打開文件,選定表格,讀取行列內容,讀取表格內數據

詳細代碼如下:

import xlrd

from datetime import date,datetime

file = 'test3.xlsx'

def read_excel():

wb = xlrd.open_workbook(filename=file)#打開文件

print(wb.sheet_names())#獲取所有表格名字

sheet1 = wb.sheet_by_index(0)#通過索引獲取表格

sheet2 = wb.sheet_by_name('年級')#通過名字獲取表格

print(sheet1,sheet2)

print(sheet1.name,sheet1.nrows,sheet1.ncols)

rows = sheet1.row_values(2)#獲取行內容

cols = sheet1.col_values(3)#獲取列內容

print(rows)

print(cols)

print(sheet1.cell(1,0).value)#獲取表格裡的內容,三種方式

print(sheet1.cell_value(1,0))

print(sheet1.row(1)[0].value)

運行結果如下:


那麼問題來了,上面的運行結果中紅框框中的欄位明明是出生日期,可顯示的確實浮點數;同時合併單元格裡面應該是有內容的,結果不能為空。

別急,我們來一一解決這兩個問題:

1.python讀取excel中單元格內容為日期的方式


python讀取excel中單元格的內容返回的有5種類型,即上面例子中的ctype:

ctype :  0 empty,1 string,2 number, 3 date,4 boolean,5 error

即date的ctype=3,這時需要使用xlrd的xldate_as_tuple來處理為date格式,先判斷表格的ctype=3時xldate才能開始操作。

詳細代碼如下:

import xlrd

from datetime import date,datetime

print(sheet1.cell(1,2).ctype)

date_value = xlrd.xldate_as_tuple(sheet1.cell_value(1,2),wb.datemode)

print(date_value)

print(date(*date_value[:3]))

print(date(*date_value[:3]).strftime('%Y/%m/%d'))

2.獲取合併單元格的內容


在操作之前,先介紹一下merged_cells()用法,merged_cells返回的這四個參數的含義是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一樣,即(1, 3, 4, 5)的含義是:第1到2行(不包括3)合併,(7, 8, 2, 5)的含義是:第2到4列合併。

詳細代碼如下:

print(sheet1.merged_cells)
print(sheet1.cell_value(1,3))

print(sheet1.cell_value(4,3))

print(sheet1.cell_value(6,1))

發現規律了沒?是的,獲取merge_cells返回的row和col低位的索引即可! 於是可以這樣批量獲取:

詳細代碼如下:

merge = []

print(sheet1.merged_cells)

for (rlow,rhigh,clow,chigh) in sheet1.merged_cells:

merge.append([rlow,clow])

for index in merge:

print(sheet1.cell_value(index[0],index[1]))

運行結果跟上圖一樣,如下:

Python讀寫Excel表格,就是這麼簡單粗暴又好用,如果覺得不錯,對你工作中有幫助,動動手指分享給更多人哦。

- The End -

「若你有原創文章想與大家分享,歡迎投稿。」

加編輯微信ID,備註#投稿#:

程序 丨 druidlost  

小七 丨 duoshangshuang

若二維碼失效,請加編輯微信ID,備註#北京#:

程序 丨 druidlost  

小七 丨 duoshangshuang

更多精彩內容

相關焦點

  • Python讀寫Excel表格,就是這麼簡單粗暴又好用(文末送書)
    來源 | 戀習Python(ID:sldata2017)最近在做一些數據處理和計算的工作,因為數據是以.csv格式保存的,因此剛開始直接用Excel來處理。但是做著做著發現重複的勞動其實並沒有多大的意義,於是就想著寫個小工具幫著處理。以前正好在一本書上看到過使用Python來處理Excel表格,可惜沒有仔細看。
  • n種方式教你用python讀寫excel等數據文件
    下面整理下python有哪些方式可以讀寫數據文件。1. read、readline、readlinesread()  :一次性讀取整個文件內容。推薦使用read(size)方法,size越大運行時間越長readline()  :每次讀取一行內容。
  • n種方式教你用Python讀寫Excel等數據文件
    下面整理下python有哪些方式可以讀寫數據文件。1. read、readline、readlinesread()  :一次性讀取整個文件內容。推薦使用read(size)方法,size越大運行時間越長readline()  :每次讀取一行內容。
  • Python使用xlrd和xlwt讀寫Excel的簡單用法
    因此用Python 進行數據相關的工作時,難免要和 Excel 打交道。標準的 Excel 文件(xls/xlsx)具有較複雜的格式,並不方便像普通文本文件一樣直接進行讀寫,需要藉助第三方庫來實現。常用的庫是 python-excel 系列:xlrd、xlwt、xlutils它們有個缺陷,就是只能處理 xls 文件。如果你想用新版本的 xlsx,可以考慮 openpyxl 和 xlsxwriter。
  • 用 Python 讀寫 Excel 表格,就是這麼的簡單粗暴且乏味
    越來越多的企業開始用 Python 處理數據,特別是金融、證券、商業、網際網路等領域。在頂級公司的高端職位中,Python 更是成為了標配:舉個例子:在過去,如果老闆想要獲取 A 股所有股票近 2 年的數據,你可能需要 登錄-查詢-下載-記錄到excel 循環 500 多次,即使你是一個沒有感情的複製機器人,也需要一兩天的時間。
  • 未明學院:用excel不好嗎?為什麼還要學python?
    在大數據背景的今天,面對千萬條以上動輒成百上千G的數據,單用excel難免顯得力不從心,越來越多的人將關注點轉向python。1、易踩坑!而python在數據處理的量級和性能上明顯高於excel,對python來說,只需調用drop_duplicates方法就可以輕鬆處理大批量數據,無需擔心軟體崩潰異常退出。
  • 文職美女上班手動用Excel表格太麻煩,當學會python後easy操作
    通過程序操作excel表格是編程中比較常見的操作,python本身不能直接操作excel,需要安裝第三方的模塊來實現excel的操作。Python中可以操作excel模塊主要有:1、xlrd 模塊實現exlcel表格讀取2、xlwd 模塊實現excel表格創建和寫入3、pandas模塊也可以實現excel常規操作
  • 【Python】xlwings操作Excel表格的正確姿勢
    前面的一期課程提到如何使用xlwings操作excel表格,連結附上。簡單三步學會Python開發上位機並處理excel數據(三)用xlwings操作excel表格還是挺方便的,語法也非常貼近宏,所以還是優先推薦使用xlwings。因為之前是系列課程,所以講得比較簡略,今天結合近期的使用心得單獨更新一篇。
  • python教程實戰,json、csv等讀寫
    python教程實戰,json、csv等讀寫JSON的全稱是」JavaScript Object Notation」,意思是JavaScript
  • PDF轉EXCEL,python的這個技能知道嗎?
    當在pdf上看到自己想用的表格,卻無法將其複製下來的時候,只能默默地打開excel對照著pdf表格的形式敲打出來,既費時又費力!這裡介紹如何用python程序將pdf上的表格自動轉化為excel表!1.使用的庫簡單介紹一下要使用的庫:pdfplumber 和xlwt1.pdfplumberpdfplumber使用來解析pdf的文字與表格。
  • 詳解Python操作Excel文件
    7.win32comwin32com庫存在於pywin32中,是一個讀寫和處理Excel文件的庫。地址:http://pythonexcels.com/python-excel-mini-cookbook/8.DataNitroDataNitro是一個內嵌在Excel中的插件。
  • 「GoLang編程」Go語言中如何操作Excel表格
    我最近工作忙於作圖,圖表,需要自己準備數據源,所以經常和Excel打交道,這不又要讀寫excel文件了。以前都是用python,現在學習Go語言,剛好試試。要操作excel,自然需要找讀寫Excel的Package,前人栽好樹,等我去乘涼。
  • 堪比python、秒殺Excel表格,這個數據分析工具太猛了
    這是一個老生常談的話題,網上很多人都推薦去學習SQL、Excel的VBA、python這些語言。但其實並不是所有人都適合這些語言,很多業務人員和運營人員根本不會去學這些東西,他們不熟悉編程和代碼,沒有必要花時間學習這麼專業的軟體。
  • 放棄Excel,學習Python的理由,1個案例領略Python處理表格的魅力
    結合PyQt5的QTabWidget類用Python將電子表格Excel展示在界面中,PyQt5之QTableWidget應用其中,下面三篇內容我們介紹了Python中利用PyQt5控制項將任意一個Excel文件展示在了圖形界面中。
  • 「Python替代Excel Vba」系列(二):pandas分組統計與操作Excel
    帶你用pandas玩轉各種數據處理前言在本系列的上一章已經介紹了如何讀寫 excel 數據,並快速進行匯總處理。但有些小夥伴看完之後有些疑惑:那只是簡單讀寫數據而已,有時候需要設置 excel 的格式。
  • Excel文件另類操作,如何用Python中xlrd模塊獲取電子表格的信息
    老老實實跟著用吧。xlrd.open_workbook(excelName)# 這裡excelName傳入Excel文件的路徑即可,它比較openpyxl的強大之處在於,它的兼容性比較好,可以讀取*.xls文件,貌似openpyxl只能讀取*.xlsx文件。
  • Word怎麼轉excel表格?這幾招實用簡單
    在日常的辦公中,我們會常用到一些文檔,Word、excel、PPT等,這樣的文檔是可以互相轉換的。但經常用到最多的可能是將Word轉換成excel表格,今天小編就給大家分享幾招實用簡單的Word轉excel表格技巧。
  • 如何使用 Pandas 讀寫Excel
    其中的數據框格式將非常有利於我們對Excel表格的處理,相關介紹可以點擊上一篇內容。今天的推送主要內容圍繞讀取表格及一些參數使用,同時也徵集一下大家的使用經驗,歡迎留言。準備pandapip install pandaspython pip install pandas安裝Pandas(當然,如果沒有安裝,則安裝Python)。假設我們已經安裝了Pip,則可以使用Pip安裝Pandas。
  • Python 用xlwings庫處理Excel
    xlwing庫在網上查看了一些python處理excel庫資料,參考相關內容《Python讀寫Excel文件第三方庫匯總,你想要的都在這兒
  • Python辦公自動化| word 表格轉excel
    之前寫過一篇 Python辦公自動化 | 批量word報告生成工具 ,有小夥伴提出了逆向需求,即:從批量word中獲取內容並寫入excel,需求背景是匯總一些材料,舉例:實習鑑定表、個人簡歷、檔案等。實際需求是這樣的,現在有如下格式的若干word文檔,需要錄入標黃信息到excel,手工錄入效率太低了,能不能用python實現呢?