python操作excel方法示例
1.python处理Excel的几种方法:
方法一:利用pandas、
方法二、xlrd和xlwt两个模块分别用来读Excel和写Excel,只支持.xls和.xlsx格式,xlutils模块可以同时读写一个已存在的Excel文件,依赖于xlrd和xlwt
方法三、openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件;2007一下的版本为xls结尾的文件,需要使用xlrd(读)和xlwt(写)库进行操作
当然还有其它包。
备注:
1、Python自带的csv模块可以处理.csv文件。
2、excel表的文字编码如果是“gb2312” 读取后就会显示乱码,请先转成Unicode
3、workbook: 工作簿,一个excel文件包含多个sheet。
4、sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
5、cell: 单元格,存储数据对象
6、Python读取Excel中单元格的内容返回的有5种类型,即sheet.cell(x,y)的ctype属性返回的是数值型:ctype : 0 empty,1 string,2 number, 3 date,4 boolean,5 error
2、用xlrd包读取Excel文件
用法示例:
# -*- coding: utf-8 -*- import xlrd file_path = "D:/MyData/ex_lizq5/PycharmProjects/read_excel/ratedate.xlsx" #打开文件,获得excel文件的工作簿对象 excel = xlrd.open_workbook(file_path,encoding_override='utf-8') # 返回所有的sheet对象的list all_sheet = excel.sheets() # 获得工作簿sheet对象的方法,得到一个sheet列表 print(all_sheet) # 通过索引得到sheet对象 print excel.sheet_by_index(0) # 通过索引得到sheet对象的名称 print excel.sheet_by_index(0).name # 通过sheet表的表名获得对象 print excel.sheet_by_name("Sheet0").name # 遍历sheet列表,对每一个sheet进行操作 for each_sheet in all_sheet: # 从对象列表中获得sheet对象 print each_sheet # 获得sheet表的名字 print "sheet的名字是:%s".decode('utf-8') % each_sheet.name# 格式化打印 print("表名称为:{0},类型为:{1}".format(excel.sheet_by_index(0), type(excel.sheet_by_index(0)))) # 获取工作表的基本信息,表名、行数,列数等 sheet_name = [] row_num = [] col_num = [] for each_sheet in all_sheet: sheet_name.append(each_sheet.name) print "该excel文件共有%d个sheet,当前sheet的名称是%s,该sheet有%d行,%d列".decode('utf-8') % (len(all_sheet),each_sheet.name,each_sheet.nrows,each_sheet.ncols) row_num.append(each_sheet.nrows) col_num.append(each_sheet.ncols) print sheet_name print row_num print col_num # 遍历sheet1的所有行和列 print "--------------读取每行----------------------".decode('utf-8') # 得到某个sheet的总行数 print excel.sheet_by_name('Sheet0').nrows # 通过sheet的报名获得sheet对象 mysheet = excel.sheet_by_name('Sheet0') # 每行形成一个列表 print "-----打印序号为1的行,结果是一个列表------" print mysheet.row_values(1) # 打印序号为1的行的第0列 print mysheet.row_values(1)[0] # 遍历每行的值 for value in mysheet.row_values(1): print value, print "" print "-----用row(index)方法打印,结果是一个字典列表-----" # Sheet.row(r)或Sheet.col(c)可以获得指定行或列,返回Cell对象的list,得到的是一个字典列表 print mysheet.row(1) # 获取单元格(1,1)的值 print mysheet.cell_value(1,1)
3、尽量不用xlwt包写入Excel文件
在xlwt中生成的xls文件最多能支持65536行数据,如果数据太多,会报这个错误:
ValueError: row index (65536)not an intin range(65536)错误
写入示例:
# 1. 导入模块 import xlwt def write_excel(): # 2. 创建Excel工作薄 myWorkbook = xlwt.Workbook() # 3. 添加Excel工作表 mySheet = myWorkbook.add_sheet('A Test Sheet') # 4. 写入数据 myStyle = xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00') #数据格式 mySheet.write(i, j, 1234.56, myStyle) mySheet.write(2, 0, 1) #写入A3,数值等于1 mySheet.write(2, 1, 1) #写入B3,数值等于1 mySheet.write(2, 2, xlwt.Formula("A3+B3")) #写入C3,数值等于2(A3+B3) #5. 保存 myWorkbook.save('excelFile.xls') if __name__ == '__main__': # 写入Excel write_excel(); print ('写入成功')
4、用openpyxl包写入Excel文件
# 导包 import openpyxl #写excel def write_excel(): f = openpyxl.Workbook() #创建工作簿 sheet1 = f.create_sheet() #sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet row0 = [u'L1',u'L2',u'L3',u'L4',u'问题',u'答案'] #生成第一行 #for i in range(len(row0)): # sheet1.cell(column=i,row=0).value='L1') #生成后续 for jkey in range(len(newTables)): jk = 1 for cT in range(arrayNum): jk = jkey + 1 if cT == 0: sheet1.cell(row=jk,column=cT+1).value='1' else: sheet1.cell(row=jk,column=cT+1).value='2' f.save("chatPy.xlsx") #保存文件 if __name__ == '__main__': # 写入Excel write_excel(); print ('写入成功')
5 用pandas读写excel
用pandas处理excel和csv文件方法相同
https://blog.csdn.net/liufang0001/article/details/77856255