python操作excel
python对excel表格操作一般常用的两个库:xlrd 和xlwt;
但是xlwt具有局限性,它不能写入超过65535行,256列的数据,因此当有大量数据需要写入的时候,可以使用另一个openpyxl;
xlrd
xlrd一般是python从excel中读取数据,进行读操作的;
#打开excel文件 data = xlrd.open_workbook("go-jek.xls")
# 获取工作簿中所有表名 tables = data.sheet_names()
# 通过表名选择工作表 table_1 = data.sheet_by_name("Sheet 1")
# 通过下标选择工作表 table_2 = data.sheet_by_index(0)
# 获取第一张工作表,通过下标索引 table = data.sheets()[0]
# 获取表格的行数和列数 nrows = table.nrows ncols = table.ncols print(nrows, ncols)
# 获取整行和整列的值 table.row_values(0) table.column_values(0)
# 打印第一行数据 print(table.row_values(0)) # ['name']
# 打印第一列数据 print(table.col_values(0))
# 读取某个单元格数据 //table.cell(row, col) print(table.cell(1,0))
xlwt
xlwt 是python用来进行写操作的;
# 新建一个Excel文件(只能通过新建写入) workbook = xlwt.Workbook(encoding="utf8") # 新建工作表 cell_overwrite_ok为True表示允许重复写入覆盖 table = workbook.add_sheet("name", cell_overwrite_ok=True) # 写入数据 # table.write(row, col, data) table.write(0, 0, "leslie") # 保存文件 workbook.save("filename.xls") # xlwt支持一些其他格式 # 初始化样式 style = xlwt.XFStyle() # 创建字体 font = xlwt.Font() # 指定字体名字 font.name = "Microsoft YaHei UI" # 字体加粗 font.bold = True # 将该字体加入到样式中 style.font = font # 写文件时加入该样式 table.write(0, 0, "jason", style)
openpyxl
该模块支持新的excel版本,对excel文件可以进行读写操作;其常用操作:
# 读取Excel文件 from openpyxl.reader.excel import load_workbook wb=load_workbook(filename) # 显示工作表的索引范围 wb.get_named_ranges() # 显示所有工作表的名字 wb.get_sheet_names() # 取得第一张表 sheetnames = wb.get_sheet_names() ws = wb.get_sheet_by_name(sheetnames[0]) # 获取表名 ws.title # 获取表的行数 ws.get_highest_row() # 获取表的列数 ws.get_highest_column() # 单元格的读取,此处和xlrd的读取方式很相近,都是通过行和列的索引来读取 #读取B1单元格中的内容 ws.cell(0,1).value # 当然也支持通过Excel坐标来读取数据 ws.cell("B1").value
写操作只有一种方式,就是通过坐标进行写入;
from openpyxl.workbook import Workbook #ExcelWriter,里面封装好了对Excel的写操作 from openpyxl.writer.excel import ExcelWriter #get_column_letter函数将数字转换为相应的字母,如1-->A,2-->B from openpyxl.cell import get_column_letter #新建一个workbook wb = Workbook() #新建一个excelWriter ew = ExcelWriter(workbook = wb) #设置文件输出路径与名称 dest_filename = r'empty_book.xlsx' #第一个sheet是ws ws = wb.worksheets[0] #设置ws的名称 ws.title = "range names" #向某个单元格中写入数据 ws.cell("C1").value=u'哈哈' #最后保存文件 ew.save(filename=dest_filename)