背景:生活中常常因日常工作,在記錄統(tǒng)計(jì)方面需頻繁處理較多 Excel 表格,這部分工作雖可由人工完成,但這樣會(huì)顯得有些繁瑣且可能存在偏差,遂閑時(shí)查閱了是否有相關(guān)基于python處理Excel表格的學(xué)習(xí)文檔,后獲知這主要可以運(yùn)用 win32 和 openpyxl 等第三方庫來幫助完成。在此分享一下學(xué)習(xí)過程中有關(guān) openpyxl 庫的基本使用方法和一些心得體會(huì)。
10年的無為網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整無為建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“無為網(wǎng)站設(shè)計(jì)”,“無為網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。openpyxl 是一個(gè)用于處理 xlsx 格式Excel表格文件的第三方python庫,其支持Excel表格絕大多數(shù)基本操作。
安裝方法
使用 pip 或通過專門python IDE(如pyCharm)進(jìn)行安裝
其中pip安裝方法,命令行輸入:? pip install openpyxl
基本使用
第一步先是要導(dǎo)入 openpyxl 模塊
importopenpyxl
讀取Excel文檔
通過調(diào)用方法load_workbook(filename)進(jìn)行文件讀取,該方法中還有一個(gè)read_only參數(shù)用于設(shè)置文件打開方式,默認(rèn)為可讀可寫,該方法最終將返回一個(gè)workbook的數(shù)據(jù)對(duì)象
# 文件必須是xlsx格式,如果是其他格式在執(zhí)行前可利用win32輔助轉(zhuǎn)化wb = openpyxl.load_workbook(‘example.xlsx’)
(一)獲取工作表
每一個(gè)Excel表格中都會(huì)有很多張sheet工作表,在對(duì)表格操作前需要先選定一張工作表
(二)獲取單元格
對(duì)Excel表格的操作最終都落于對(duì)單元格的操作,獲取單元格有兩種獲取方法:sheet[列行名]和sheet.cell(row,column)
需要注意的是,sheet.cell(row,column)中參數(shù)分別是行和列,且必須為整數(shù),如果列為英文字母,可以利用?openpyxl.utils?中的?column_index_from_string(char)進(jìn)行字母數(shù)字的轉(zhuǎn)化。順便一說,同理也可以利用get_column_letter(number)進(jìn)行數(shù)字字母間的轉(zhuǎn)化
(三)獲取行和列
在處理Excel表格有時(shí)可能需要對(duì)表格進(jìn)行遍歷查找,openpyxl中便提供了一個(gè)行和列的生成器(sheet.rows和sheet.columns),這兩個(gè)生成器里面是每一行(或列)的數(shù)據(jù),每一行(或列)又由一個(gè)tuple包裹,借此可以很方便地完成對(duì)行和列的遍歷
學(xué)習(xí)時(shí)還發(fā)現(xiàn)也可以通過list(sheet.rows)[index](或list(sheet.columns)[index])對(duì)某一行或列進(jìn)行遍歷,而在此值得注意的是,由于sheet.rows(或sheet.columns)是生成器類型,是不能直接調(diào)用的,需將其轉(zhuǎn)化為一個(gè)list類型,然后再通過索引遍歷
同時(shí),也可以通過使用sheet[行列值:行列值]來對(duì)給定單元格范圍進(jìn)行遍歷
另外,有時(shí)候我們還可能需要確定表格的大小,即獲取表格行和列的大值,可以用max_row和max_column來獲取
寫入Excel文檔
在開頭讀取時(shí)已經(jīng)介紹,默認(rèn)的打開方式為可讀可寫,那么使用load_workbook(filename)讀取Excel文檔后也就可以直接寫入了。另外,如果需要新建一個(gè)Excel文件,可以使用Workbook()方法,同時(shí)它會(huì)自動(dòng)提供一個(gè)sheet工作表。對(duì)于刪除一個(gè)工作表,則可以使用workbook對(duì)象的remove(sheet)方法刪除
(一)寫入單元格
獲取工作表和之前一樣,如果使用load_workbook(filename)讀取,那么獲取工作表后可以直接通過sheet[行列值]寫入單元格。學(xué)習(xí)時(shí),有資料介紹還可以傳入Excel中的公式進(jìn)行賦值,不過要注意,在讀取文件時(shí)需要加上參數(shù)data_only=True,這樣才能返回?cái)?shù)字,否則將返回字符串,即公式本身
另外,也可使用sheet.append(parameters)一行或多行寫入
(二)保存文件
寫完文件后,使用workbook.save(path+filename)進(jìn)行保存,不過要注意文件擴(kuò)展名一定要是xlsx格式
# 保存文件至當(dāng)前目錄wb.save('new_file.xlsx')
設(shè)置單元格樣式
單元格樣式主要包括字體、邊框、顏色以及對(duì)齊方式等,這些均位于openpyxl.styles庫中
# 導(dǎo)入字體、邊框、顏色以及對(duì)齊方式相關(guān)庫fromopenpyxl.stylesimportFont, Border, Side, PatternFill, colors, Alignment
(一)字體
通過sheet單元格font屬性設(shè)置字體風(fēng)格
# 設(shè)置字體風(fēng)格為Times New Roman,大小為16,粗體、斜體,顏色藍(lán)色sheet['A1'].font = Font(name='Times New Roman', size=16, bold=True, italic=True, color=colors.BLUE)
(二)對(duì)齊方式
通過sheet單元格alignment屬性設(shè)置文本對(duì)齊風(fēng)格
# 通過參數(shù)horizontal和vertical來設(shè)置文字在單元格里的對(duì)齊方式,此外設(shè)置值還可為left和rightsheet['B1'].alignment = Alignment(horizontal='center',vertical='center')
(三)邊框
通過sheet單元格border屬性設(shè)置字體風(fēng)格
(四)設(shè)置行高和列寬
行和列的長(zhǎng)度大小可以通過row_dimensions[序號(hào)].height和column_dimensions[標(biāo)號(hào)].width來設(shè)置
(五)合并和拆分單元格
對(duì)單元格的合并與拆分,主要是通過sheet的merge_cells(args1:args2)和unmerge_cells(args1:args2)兩個(gè)方法來實(shí)現(xiàn)的
當(dāng)然,除了對(duì)角矩形區(qū)域化合并,也可以對(duì)一行或一列進(jìn)行合并,只需相應(yīng)修改參數(shù)即可。不過,這里要注意的是,合并后單元格顯示的文本內(nèi)容是合并前最左上角單元格的內(nèi)容,而其他單元格內(nèi)容則會(huì)自動(dòng)清除。
其他
在學(xué)習(xí)過程中,發(fā)現(xiàn)了一個(gè)有趣的現(xiàn)象:在對(duì)Excel文件利用前面所介紹的workbook.save(path+filename)方法保存后,再次打開保存的文件時(shí)發(fā)現(xiàn)之前已合并的單元格都只保留了原最左上角單元格的邊框效果,而其他單元格的效果則全部被去除了。就此問題,起初是通過對(duì)合并區(qū)域內(nèi)所有子單元格設(shè)置邊框以防止保存后邊框效果的消失,不過這種策略難免有一些麻煩。究此現(xiàn)象原因,目前博客論壇上較少有相關(guān)問題的提出和解釋,我也暫時(shí)未能很好地解決此問題,如大家有更好的想法或見解,歡迎留言分享。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。