Python3 讀、寫(xiě)Excel文件的操作方法
首先,簡(jiǎn)單介紹一下EXECL中工作簿和工作表的區(qū)別:
工作簿的英文是BOOK(WORKBOOK),工作表的英文是SHEET(WORKSHEET)。
•一個(gè)工作簿就是一個(gè)獨(dú)立的文件
•一個(gè)工作簿里面可以有1個(gè)或者多個(gè)工作表
•工作簿是工作表的集合
1:使用python實(shí)現(xiàn)對(duì)Excel文件的讀寫(xiě),首先需要安裝專(zhuān)用的模塊(可以自己編寫(xiě))xlrd,xlwt模塊
2:讀取excel數(shù)據(jù)(注意事項(xiàng):sheet編號(hào),行號(hào),列號(hào)都是從索引0開(kāi)始)
import xlrd # 設(shè)置路徑 path = 'E:/input.xlsx' # 打開(kāi)execl workbook = xlrd.open_workbook(path) # 輸出Excel文件中所有sheet的名字 print(workbook.sheet_names()) # 根據(jù)sheet索引或者名稱(chēng)獲取sheet內(nèi)容 Data_sheet = workbook.sheets()[0] # 通過(guò)索引獲取 # Data_sheet = workbook.sheet_by_index(0) # 通過(guò)索引獲取 # Data_sheet = workbook.sheet_by_name(u'名稱(chēng)') # 通過(guò)名稱(chēng)獲取 print(Data_sheet.name) # 獲取sheet名稱(chēng) rowNum = Data_sheet.nrows # sheet行數(shù) colNum = Data_sheet.ncols # sheet列數(shù) # 獲取所有單元格的內(nèi)容 list = [] for i in range(rowNum): rowlist = [] for j in range(colNum): rowlist.append(Data_sheet.cell_value(i, j)) list.append(rowlist) # 輸出所有單元格的內(nèi)容 for i in range(rowNum): for j in range(colNum): print(list[i][j], '\t\t', end="") print() # 獲取整行和整列的值(列表) rows = Data_sheet.row_values(0) # 獲取第一行內(nèi)容 cols = Data_sheet.col_values(1) # 獲取第二列內(nèi)容 # print (rows) # print (cols) # 獲取單元格內(nèi)容 cell_A1 = Data_sheet.cell(0, 0).value cell_B1 = Data_sheet.row(0)[1].value # 使用行索引 cell_C1 = Data_sheet.cell(0, 2).value cell_D2 = Data_sheet.col(3)[1].value # 使用列索引 print(cell_A1, cell_B1, cell_C1, cell_D2) # 獲取單元格內(nèi)容的數(shù)據(jù)類(lèi)型 # ctype:0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error print('cell(0,0)數(shù)據(jù)類(lèi)型:', Data_sheet.cell(0, 0).ctype) print('cell(1,0)數(shù)據(jù)類(lèi)型:', Data_sheet.cell(1, 0).ctype) print('cell(1,1)數(shù)據(jù)類(lèi)型:', Data_sheet.cell(1, 1).ctype) print('cell(1,2)數(shù)據(jù)類(lèi)型:', Data_sheet.cell(1, 2).ctype) # 獲取單元格內(nèi)容為日期的數(shù)據(jù) date_value = xlrd.xldate_as_tuple(Data_sheet.cell_value(1,0),workbook.datemode) print(type(date_value), date_value) print('%d:%d:%d' % (date_value[0:3]))
3:創(chuàng)建excel并寫(xiě)入數(shù)據(jù)
import xlwt def set_style(name, height, bold=False): style = xlwt.XFStyle() # 初始化樣式 font = xlwt.Font() # 為樣式創(chuàng)建字體 font.name = name font.bold = bold font.color_index = 4 font.height = height style.font = font return style def write_excel(path): # 創(chuàng)建工作簿 workbook = xlwt.Workbook(encoding='utf-8') # 創(chuàng)建sheet data_sheet = workbook.add_sheet('demo') row0 = [u'字段名稱(chēng)', u'大致時(shí)段', 'CRNTI', 'CELL-ID'] row1 = [u'測(cè)試', '15:50:33-15:52:14', 22706, 4190202] # 生成第一行和第二行 for i in range(len(row0)): data_sheet.write(0, i, row0[i], set_style('Times New Roman', 220, True)) data_sheet.write(1, i, row1[i], set_style('Times New Roman', 220, True)) # 保存文件 # workbook.save('demo.xls') workbook.save(path) if __name__ == '__main__': # 設(shè)置路徑 path = 'E:/demo.xls' write_excel(path) print(u'創(chuàng)建demo.xls文件成功')
再看一個(gè)例子:
轉(zhuǎn)載:Ryan in C++
基本的write函數(shù)接口很簡(jiǎn)單:
•新建一個(gè)excel文件: file = xlwt.Workbook() (注意這里的Workbook首字母是大寫(xiě))
•新建一個(gè)sheet: table = file.add_sheet('sheet_name')
•寫(xiě)入數(shù)據(jù)table.write(行,列,value): table.write(0,0,'test')
•如果是寫(xiě)入中文,則要用u'漢字'的形式。比如: table.write(0,0, u'漢字')
•合并單元格: table.write_merge(x, x + m, y, y + n, string, style)
•x表示行,y表示列,m表示跨行個(gè)數(shù),n表示跨列個(gè)數(shù),string表示要寫(xiě)入的單元格內(nèi)容,style表示單元格樣式
""" 設(shè)置單元格樣式 """ import xlwt def set_style(font_name, font_height, bold=False): style = xlwt.XFStyle() # 初始化樣式 font = xlwt.Font() # 為樣式創(chuàng)建字體 font.name = font_name # 'Times New Roman' font.bold = bold font.color_index = 4 font.height = font_height borders = xlwt.Borders() borders.left = 6 borders.right = 6 borders.top = 6 borders.bottom = 6 style.font = font style.borders = borders return style # 寫(xiě)excel def write_excel(output_path): f = xlwt.Workbook() # 創(chuàng)建工作簿 ''' 創(chuàng)建第一個(gè)sheet: sheet1 ''' sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) # 創(chuàng)建sheet row0 = [u'業(yè)務(wù)',u'狀態(tài)',u'北京',u'上海',u'廣州',u'深圳',u'狀態(tài)小計(jì)',u'合計(jì)'] column0 = [u'機(jī)票',u'船票',u'火車(chē)票',u'汽車(chē)票',u'其它'] status = [u'預(yù)訂',u'出票',u'退票',u'業(yè)務(wù)小計(jì)'] # 生成第一行 for i in range(0, len(row0)): sheet1.write(0, i, row0[i], set_style('Times New Roman', 220, True)) # 生成第一列和最后一列(合并4行) i, j = 1, 0 while i < 4*len(column0) and j < len(column0): sheet1.write_merge(i, i+3, 0, 0, column0[j], set_style('Arial', 220, True)) # 第一列 sheet1.write_merge(i, i+3, 7, 7) # 最后一列"合計(jì)" i += 4 j += 1 sheet1.write_merge(21,21,0,1,u'合計(jì)',set_style('Times New Roman',220,True)) # 生成第二列 i = 0 while i < 4*len(column0): for j in range(0,len(status)): sheet1.write(j+i+1, 1, status[j]) i += 4 f.save(output_path) if __name__ == '__main__': write_excel('E:/demo.xls') # 保存文件.這里如果是.xlsx的話(huà)會(huì)打不開(kāi)。
注意:如果對(duì)一個(gè)單元格重復(fù)操作,會(huì)引發(fā)error。所以在打開(kāi)時(shí)加cell_overwrite_ok=True解決
table = file.add_sheet('sheet name',cell_overwrite_ok=True)
生成的demo.xls效果如下:
總結(jié)
以上所述是小編給大家介紹的Python3 讀、寫(xiě)Excel文件的操作方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- python3中關(guān)于excel追加寫(xiě)入格式被覆蓋問(wèn)題(實(shí)例代碼)
- Python3+Requests+Excel完整接口自動(dòng)化測(cè)試框架的實(shí)現(xiàn)
- python3.7 利用函數(shù)os pandas利用excel對(duì)文件名進(jìn)行歸類(lèi)
- Python3.6+selenium2.53.6自動(dòng)化測(cè)試_讀取excel文件的方法
- Python3操作Excel文件(讀寫(xiě))的簡(jiǎn)單實(shí)例
- python3實(shí)現(xiàn)mysql導(dǎo)出excel的方法
- python3 讀取Excel表格中的數(shù)據(jù)
- python3結(jié)合openpyxl庫(kù)實(shí)現(xiàn)excel操作的實(shí)例代碼
- python3讀取excel文件只提取某些行某些列的值方法
- Python3使用pandas模塊讀寫(xiě)excel操作示例
- Python3讀取Excel數(shù)據(jù)存入MySQL的方法
- 使用python3+xlrd解析Excel的實(shí)例
- Python3讀寫(xiě)Excel文件(使用xlrd,xlsxwriter,openpyxl3種方式讀寫(xiě)實(shí)例與優(yōu)劣)
相關(guān)文章
matplotlib 向任意位置添加一個(gè)子圖(axes)
這篇文章主要介紹了matplotlib 向任意位置添加一個(gè)子圖(axes),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python為tornado添加recaptcha驗(yàn)證碼功能
tornado作為微框架,并沒(méi)有自帶驗(yàn)證碼組件,recaptcha是著名的驗(yàn)證碼解決方案,簡(jiǎn)單易用,被很多公司運(yùn)用來(lái)防止惡意注冊(cè)和評(píng)論。tornado添加recaptchaHA非常容易2014-02-02利用Anaconda簡(jiǎn)單安裝scrapy框架的方法
今天小編就為大家分享一篇利用Anaconda簡(jiǎn)單安裝scrapy框架的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06用Python批量把文件復(fù)制到另一個(gè)文件夾的實(shí)現(xiàn)方法
這篇文章主要介紹了用Python批量把文件復(fù)制到另一個(gè)文件夾的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08python爬取數(shù)據(jù)中的headers和代理IP問(wèn)題分析
這篇文章主要為大家介紹了python爬取數(shù)據(jù)中的headers和代理IP問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06python鏈接oracle數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)的增刪改查實(shí)例
下面小編就為大家分享一篇python鏈接oracle數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)的增刪改查實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01python打印經(jīng)典故事從前有座山的幾種寫(xiě)法
在定義了函數(shù)之后,就可以使用該函數(shù)了,下面這篇文章主要給大家介紹了關(guān)于python打印經(jīng)典故事從前有座山的幾種寫(xiě)法,通過(guò)這個(gè)有意思的實(shí)例幫助大家學(xué)習(xí)python,需要的朋友可以參考下2022-05-05