python处理exce方法:xlrd、openyxl

excel 2010及以上(xlsx)使用 openpyxl
excel 2007 (xls)使用xlrd
pandas也是依赖xlrd,openpyxl

xlrd

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') # 保存工作簿

posted @ 2020-05-10 18:39  太虚真人  阅读(1012)  评论(0编辑  收藏  举报