表格处理模块
一个excle表格包含多个sheet
一个sheet中包含多行多列
每个单元格具备唯一的行号和列号
xlrd
import xlrd # 读取文件 work_book = xlrd.open_workbook("/Users/jerry/Desktop/公司机密数据.xlsx") # 选取一个表 # 获取所有所有表格名称 print(work_book.sheet_names()) # 选择第2个 索引从0开始 sheet = work_book.sheet_by_index(1) # 表格名称 print(sheet.name) # 行数 print(sheet.nrows) # 列数 print(sheet.ncols) #批量读取行数据 # 取出第6行的全部内容包含数据类型 print(sheet.row(6)) # 取出第6行的内容包含数据类型 从第3列开始获取 print(sheet.row_slice(6,start_colx=3)) # 取出第6行的内容包含数据类型 从第3列开始获取 print(sheet.row_slice(6,start_colx=4,end_colx=5)) # 获取该行所有数据类型 一数字表示 # print(sheet.row_types(6)) # print(sheet.row_values(6)) # 单元格的处理 print(sheet.cell(0,0).value) # 取值 print(sheet.cell(0,0).ctype) # 取类型 print(sheet.cell_value(2,0)) # 直接取值 print(sheet.row(0)[0]) # 先取行再取单元格 print(sheet.col(0)) # 第0列所有数据 print(sheet.col(0)) # 先取列再取单元格 print(sheet.cell_type(0,0)) # 单元格位置转换 print(xlrd.cellname(2,1)) print(xlrd.cellnameabs(0,2)) print(xlrd.colname(5)) # 时间类型转换 # print(sheet.cell(6,5).value) # print(xlrd.xldate_as_datetime(sheet.cell(6,5).value,1))
import xlwt # 创建工作簿 work = xlwt.Workbook() # 创建一个表 sheet = work.add_sheet("员工信息数据") #创建一个字体对象 font = xlwt.Font() font.name = "Times New Roman" # 字体名称 font.bold = True # 加粗 font.italic = True # 斜体 font.underline = True # 下划线 #创建一个样式对象 style = xlwt.XFStyle() style.font = font # print(sheet.write.__doc__) # 写入标题 for k in keys: sheet.write(0,keys.index(k),k,style) # 写入数据 for i in infos: for k in keys: sheet.write(1 + infos.index(i),keys.index(k),label = i[k]) # 保存至文件 work.save("test.xls")
import xlrd import traceback import xlwt import os #------------------读数据--------------------------------- def file_exist(SRC_PATH,TARGET_PATH): try: if os.path.exists(SRC_PATH): if not os.path.exists(TARGET_PATH): print("创建目标文件") f = open(TARGET_PATH, 'w') f.close() return True else: print("源文件不存在") return False except Exception as ep: print(ep) traceback.format_exc() return False def run(SRC_PATH,SRC_SHEET,TARGET_PATH,TARGET_SHEET): try: res=file_exist(SRC_PATH,TARGET_PATH) if not res: return False bk=xlrd.open_workbook(SRC_PATH) # shxrange=range(bk.nsheets) try: sh=bk.sheet_by_name(SRC_SHEET) except: traceback.format_exc() print ("代码出错") nrows=sh.nrows #获取行数 print(nrows) book = xlwt.Workbook(encoding='gbk') sheet = book.add_sheet(TARGET_SHEET) #创建一个sheet for i in range(nrows): row_data=sh.row_values(i) #---------写出文件到excel-------- print ("-----正在写入 "+str(i+1)+" 行") sheet.write(i,0, label = sh.cell_value(i,3)) #向第1行第1列写入获取到的值 sheet.write(i,1, label = sh.cell_value(i,1)) #向第1行第2列写入获取到的值 sheet.write(i,2, label = sh.cell_value(i,2)) #向第1行第2列写入获取到的值 book.save(TARGET_PATH) return True except Exception as ep: print(ep) traceback.format_exc() return False if __name__ == '__main__': #源文件 SRC_PATH = r'D:\WORK\wangzhigang\A.xlsx' #源文件中表的名字 SRC_SHEET="Sheet1" # 目标文件 TARGET_PATH = r'D:\WORK\wangzhigang\e.xls' # 目标文件中表的名字 TARGET_SHEET="Sheet1" if not run(SRC_PATH,SRC_SHEET,TARGET_PATH,TARGET_SHEET): print("表格数据处理失败")
注意写入的时候 文件格式要是 .xls
如果想要将xls转为xlsx
# pip install Pywin32 import win32com.client as win32 fname = r'D:\WORK\wangzhigang\e.xls' excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Open(fname) wb.SaveAs(fname+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension wb.Close() #FileFormat = 56 is for .xls extension excel.Application.Quit()
xlutils
插入数据
from xlutils import copy import xlrd excel_path=r'D:\WORK\wangzhigang\C.xls'#文件路径 #excel_path=unicode('D:\\测试.xls','utf-8')#识别中文路径 rbook = xlrd.open_workbook(excel_path)#打开文件 wbook = copy.copy(rbook)#复制文件并保留格式 w_sheet = wbook.get_sheet(0)#索引sheet表 row=1 col=1 value='测试' w_sheet.write(row,col,value) wbook.save(excel_path)#保存文件