使用Python的xlrd和xlwt操作Excel詳解
1. 操作Excel庫(xlrd和xlwt)對(duì)比
xlrd :可處理Excel后綴“.xls”、“.xlsx”,只能讀取;
xlwt :可處理Excel后綴“.xls”,可寫入、修改、保存、樣式調(diào)整、插入圖片。
2. xlrd讀取Excel
首先在程序相同目錄創(chuàng)建 “test.xls”文件,并創(chuàng)建多個(gè) sheet。
注意: 直接創(chuàng)建 .xls文件,即使改了擴(kuò)展命,后續(xù)操作仍會(huì)報(bào)錯(cuò)。
2.1 xlrd操作方法匯總
xlrd對(duì).xls文件操作
函數(shù)語法 | 作用說明 | |
Excel操作 | wb = xlrd.open_workbook(path) | 打開文件 |
wb.sheet_names() | 獲取所有的表名 | |
wb.sheet_by_index(索引) 或 wb.sheet_by_name('Sheet表明') | 指定Sheet | |
Sheet表的行操作 | sheet.nrows() | 獲取sheet表總函數(shù) |
sheet.row(1) 或 sheet.row_slice(1) | 返回該行中所有單元格對(duì)象組成的列表,列表內(nèi)是鍵值對(duì),例如:['列名1':'值','列名2':'值', ...] | |
sheet.row_values(rowx, start_colx=0, end_colx=None) | 返回指定行的所有單元格數(shù)值組成的列表 | |
sheet.row_len(rowx) | 返回指定行的有效長度 | |
Sheet表的列操作 | sheet.ncols() | 返回指定sheet表的有效列數(shù) |
sheet.col(1) 或 sheet.clo_slice(1) | 返回該列中所有的單元格對(duì)象組成的列表,列表內(nèi)是鍵值對(duì),例如:['列名1':'值', '列明2':'值', ...] | |
sheet.col_values(colx, start_colx=0, end_colx=None) | 返回指定列的所有單元格數(shù)值組成的列表,例如:['列名':'值1', '值2',...] |
2.2 xlrd用法舉例
import xlrd #1.打開文件 wb = xlrd.open_workbook('./test.xls') print(wb) #輸出:<xlrd.book.Book object at 0x00000192ADAA57F0> #2.獲取所有表名 sheet_name_list = wb.sheet_names() print(sheet_name_list) #輸出:['Sheet1', 'Sheet2', 'Sheet3'] #3.指定sheet表 #3.1索引順序獲取 sheet_1 = wb.sheet_by_index(0) print(sheet_1) #輸出:Sheet 0:<Sheet1> #3.2名稱獲取 sheet_2 = wb.sheet_by_name('Sheet1') print(sheet_2) #輸出:Sheet 0:<Sheet1> #4.對(duì)sheet行操作 #4.1獲取sheet表總行數(shù):sheet.nrows print('Excel表中數(shù)據(jù)總行數(shù)為:',sheet_1.nrows) #Excel表中數(shù)據(jù)總行數(shù)為: 4 #4.2返回由該行中所有的單元格對(duì)象組成的列表,列表內(nèi)是鍵值對(duì):sheet.row(行數(shù))或者sheet.row_slice(行數(shù)) print('方法1:',sheet_1.row(1),'方法2:',sheet_1.row_slice(1)) #輸出:方法1: [text:'小明', number:165.0, number:12.0, number:50.0, number:80.0] 方法2: [text:'小明', number:165.0, number:12.0, number:50.0, number:80.0] #4.3返回指定行的所有單元格數(shù)值組成的列表:sheet.row_values(rowx, start_colx=0, end_colx=None) print(sheet_1.row_values(1)) #輸出:['小明', 165.0, 12.0, 50.0, 80.0] #4.4返回指定行的有效長度:sheet.row_len() print(sheet_1.row_len(1)) #輸出:5 print('-'*40) #5.讀取整個(gè)表 for i in range(sheet_1.nrows): print(sheet_1.row_values(i)) # 輸出: # ---------------------------------------- # ['name', 'high', 'age', 'weight', 'score'] # ['小明', 165.0, 12.0, 50.0, 80.0] # ['小紅', 160.0, 13.0, 35.0, 85.0] # ['小浪', 170.0, 23.0, 65.0, 100.0] #6.對(duì)Sheet表的列進(jìn)行操作 #6.1返回指定sheet表的有效列數(shù):sheet.ncols print('Excel表中數(shù)據(jù)總列數(shù)為:',sheet_1.ncols) #輸出:Excel表中數(shù)據(jù)總列數(shù)為: 5 #6.2返回指定列中所有的單元格組成的列表,列表內(nèi)是鍵值對(duì):sheet.col(列數(shù)) 或者 sheet.col_slice(列數(shù)) print('方法1:',sheet_1.col(1),'方法2:',sheet_1.col_slice(1)) #輸出:方法1: [text:'high', number:165.0, number:160.0, number:170.0] 方法2: [text:'high', number:165.0, number:160.0, number:170.0] #6.3返回指定列的所有單元格組成的列表:sheet.col_values(colx, start_colx=0, end_colx=None) #6.3.1帶列名 print(sheet_1.col_values(0)) #輸出:['name', '小明', '小紅', '小浪'] #6.3.2不帶列名 print(sheet_1.col_values(0,1)) #輸出列名:['小明', '小紅', '小浪'] print('-'*40) #7.讀取全部表 for i in range(sheet_1.ncols): print(sheet_1.col_values(i)) # 輸出: # ---------------------------------------- # ['name', '小明', '小紅', '小浪'] # ['high', 165.0, 160.0, 170.0] # ['age', 12.0, 13.0, 23.0] # ['weight', 50.0, 35.0, 65.0] # ['score', 80.0, 85.0, 100.0]
3. xlwt寫入Excel
xlwt 模塊是Python第三方庫,可以將數(shù)據(jù)寫入到 Excel 工作簿中。
目前支持寫入 .xls 和 .xlsx 兩種格式
3.1 xlwt操作方法匯總
函數(shù)格式 | 功能描述 |
xlwt.Workbook(encoding='utf8') | 創(chuàng)建Excel表對(duì)象 |
worksheet = workbook.add_sheet('Sheet1') | 新建Sheet對(duì)象 |
worksheet.write(0, 0, 'Python') | 寫入數(shù)據(jù)到注定單元格。第一個(gè)參數(shù)是行數(shù),第二個(gè)參數(shù)是列數(shù),第三個(gè)參數(shù)是要寫入的字符串或數(shù)字 |
workbook.save('a.xlsx') | 保存文件,目前已支持寫入 .xls 個(gè) .xlsx兩種格式 |
xlwt.Font() | 設(shè)置字體 |
xlwt.Pattern() | 設(shè)置背景 |
xlwt.Borders() | 設(shè)置邊框 |
xlwt.Alignment | 設(shè)置對(duì)準(zhǔn) |
3.2 用法舉例
3.2.1 xlwt寫入單個(gè)數(shù)據(jù)
創(chuàng)建一個(gè)Excel表格,并在(0,0)位置寫入“Python”,并使用兩種方式進(jìn)行保存文件。
注意: Office并不能打開 .xlsx 文件,所以需要 WPS 打開。
import xlwt #1.創(chuàng)建Excel表對(duì)象 workbook = xlwt.Workbook(encoding='utf8') #2.新建Sheet表 worksheet = workbook.add_sheet('Sheet1') #3.寫入數(shù)據(jù)到指定單元格 worksheet.write(0, 0, 'Python') #4.保存文件份兩種格式 workbook.save('a.xls') workbook.save('a.xlsx')
運(yùn)行結(jié)果:
3.2.2 xlwt寫入多個(gè)數(shù)據(jù)
import xlwt data = [('小明','20','男'),('小紅','21','女'),('小浪','22','男')] #1.創(chuàng)建Excel表對(duì)象 workbook = xlwt.Workbook(encoding='utf8') #2.新建Sheet表 worksheet = workbook.add_sheet('Sheet1') #3.自定義列名 col_name = ('姓名','年齡','性別') #4.將列屬性元組col_name寫進(jìn)Sheet1表單中第一行 for i in range(len(col_name)): worksheet.write(0,i,col_name[i]) #5.將數(shù)據(jù)寫入Sheet1表單中 for i in range(len(data)): In_data = data[i] for j in range(len(col_name)): worksheet.write(i+1,j,In_data[j]) #6保存文件 workbook.save('b.xls')
運(yùn)行結(jié)果:
3.2.3 xlwt設(shè)置列寬和行高
import xlwt data = [('小明','20','男'),('小紅','21','女'),('小浪','22','男')] #1.創(chuàng)建Excel表對(duì)象 workbook = xlwt.Workbook(encoding='utf8') #2.新建Sheet表 worksheet = workbook.add_sheet('Sheet1') #3.自定義列名 col_name = ('姓名','年齡','性別') #4.將列屬性元組col_name寫進(jìn)Sheet1表單中第一行 for i in range(len(col_name)): worksheet.write(0,i,col_name[i]) #5.將數(shù)據(jù)寫入Sheet1表單中 for i in range(len(data)): In_data = data[i] for j in range(len(col_name)): worksheet.write(i+1,j,In_data[j]) #6.設(shè)置列寬和行高 #6.1設(shè)置列寬 for i in range(len(col_name)): worksheet.col(i).width = 256*20 # 256為衡量單位,20表示20個(gè)字符寬度 worksheet.row(i+1).height_mismatch = True #設(shè)置行高第一步 worksheet.row(i+1).height = 1600 #設(shè)置行高第二步 #6保存文件 workbook.save('b.xls')
運(yùn)行結(jié)果:
3.2.4 xlwt設(shè)置單元格風(fēng)格
def body_style(): #1.創(chuàng)建一個(gè)樣式對(duì)象,初始化樣式style style = xlwt.XFStyle() #創(chuàng)建 Style對(duì)象 #2.字體風(fēng)格設(shè)置 font = xlwt.Font() #創(chuàng)建 Font對(duì)象 font.name = 'Simon' #設(shè)置字體類型,宋體 font.colour_index = 4 #設(shè)置字體顏色 font.height = 20*12 #設(shè)置字體大小,12為字號(hào),20為衡量值 font.bont = True #設(shè)置體字加粗 font.underline = True #下劃線 font.italic = True #斜體字 #3.背景設(shè)置 pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 可選參數(shù):NO_PATTERN, SOLID_PATTERN, 或 0x00-0x12之間的數(shù) pattern.pattern_fore_colour = 4 #設(shè)置背景顏色 #4.邊框設(shè)置 borders = xlwt.Borders() #創(chuàng)建邊框?qū)ο螅?.DASHED:虛線;.NO_LINE:沒有 #4.1上下左右添加邊框 borders.left = 1 borders.right = 1 borders.top = 1 borders.bottom = 1 #4.2設(shè)置邊框顏色 borders.left_colour = 2 borders.right_colour = 2 borders.top_colour = 2 borders.bottom_colour = 2 #5.位置設(shè)置 alignment = xlwt.Alignment() alignment.horz = 1 #設(shè)置水平位置,0是左對(duì)齊,1是居中,2是右對(duì)齊 alignment.wrap = 1 #設(shè)置自動(dòng)換行 #6.設(shè)置好后,全局加入到style中 style.alignment = alignment style.font = font style.borders = borders return style
應(yīng)用方法
- 不帶格式的: sheet.write(row, colum, i)
- 帶格式的: sheet.write(row, colim, i, style)
到此這篇關(guān)于使用Python的xlrd和xlwt操作Excel詳解的文章就介紹到這了,更多相關(guān)Python的xlrd和xlwt操作Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django代碼性能優(yōu)化與Pycharm Profile使用詳解
本文通過一個(gè)簡單的實(shí)例一步一步引導(dǎo)讀者對(duì)其進(jìn)行全方位的性能優(yōu)化,這篇文章主要給大家介紹了關(guān)于Django代碼性能優(yōu)化與Pycharm Profile使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-08-08Python連接mysql數(shù)據(jù)庫及簡單增刪改查操作示例代碼
這篇文章主要介紹了Python連接mysql數(shù)據(jù)庫及簡單增刪改查操作示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python 中的Selenium異常處理實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了Python 中的Selenium異常處理的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05Python中match語句的詳細(xì)用法實(shí)例
match語句接受一個(gè)表達(dá)式并將其值與作為一個(gè)或多個(gè)?case?塊給出的連續(xù)模式進(jìn)行比較,下面這篇文章主要給大家介紹了關(guān)于Python中match語句的詳細(xì)用法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11