excel 2010及以上(xlsx)使用 openpyxl
excel 2007 (xls)使用xlrd
pandas也是依赖xlrd,openpyxl
xlrd
- 摘自
https://www.cnblogs.com/insane-Mr-Li/p/9092619.html
详细:https://www.jianshu.com/p/f2c9dff344c6 - 示例:
import xlrd
data = xlrd.open_workbook(r'excel1.xls')
names = data.sheet_names()
print(names)
table = data.sheet_by_index(2)
print(table)
rows = table.nrows # 获取行数
ncols = table.ncols # 获取列数
print(rows, ncols)
print(table.row_values(0)) # 获取第一行行内容
print(table.col_values(0)) # 获取第一列内容
print(table.cell_value(2, 2))
获取工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(sheet_indx)) #通过索引顺序获取
table = data.sheet_by_name(sheet_name)#通过名称获取
以上三个函数都会返回一个xlrd.sheet.Sheet()对象
names = data.sheet_names() #返回book中所有工作表的名字
data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕
行的操作
nrows = table.nrows #获取该sheet中的有效行数
table.row(rowx) #返回由该行中所有的单元格对象组成的列表
table.row_slice(rowx) #返回由该列中所有的单元格对象组成的列表
table.row_types(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据类型组成的列表
table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表
table.row_len(rowx) #返回该列的有效单元格长度
列的操作
ncols = table.ncols #获取列表的有效列数
table.col(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据类型组成的列表
table.col_values(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据组成的列表
获取单元格
table.cell_value(rowx,colx) #返回单元格中的数据
修改
没有直接修改 xls 文件的方法。通常的做法是,读取出文件,复制一份数据,对其进行修改,再保存。
在复制时,需要用到 xlutils 中的方法。
from xlrd import open_workbook
from xlutils.copy import copy
# 打开文件
rb = open_workbook("example.xls")
# 复制
wb = copy(rb)
# 选取表单
s = wb.get_sheet(0)
# 写入数据
s.write(0, 1, 'new data')
# 保存
wb.save('example.xls')
- 特别要注意的是,选取读取表单时,要使用 sheet_by_index,而在选取写入表单时,则要用 get_sheet。不要问我为什么,我也很想知道这么设定的用意何在……
openyxl
from openpyxl import load_workbook
from openpyxl import Workbook
wb = load_workbook('测试表.xlsx')
print(wb)
print(wb.sheetnames) #
ws = wb['工作表1']
# 两种获取单元格方式,都是对象,获取值使用value属性
c = ws['D1']
d = ws.cell(1,1)
# 访问多个单元格
cells = ws['A1':'D3']
# print(c,d)
# print(d.value)
# print(cells)
# 行
row_10 = ws[10]
row_range = ws[5:10]
# 列
col_c = ws['C']
col_range = ws['C':'D']
print(col_c)
Worksheet.iter_rows() # 逐行返回
Worksheet.iter_cols() # 逐列返回,只读模式下不可用
ws.rows # 返回所有行
ws.columns # 返回所有列
- 添加保存
Workbook.create_sheet() # 添加工作表
ws.title = "New Title" # 修改工作表的名字sheet1
ws['A1'] = 3 # 单元格直接赋值
wb.save('temp.xlsx') # 保存工作簿