python 对excel表格进行读,写,更新

1,181 阅读2分钟

1.库的选择

xlrd库一般用于读取excel文件中的数据;

xlwt库用于将数据写入excel文件;

xlutils库通过复制一个副本文件进行操作后保存一个新文件,通过copy模块将xlrd.Book对象转换为xlwt.Workbook对象,从而实现了原始excel文件的编辑功能。 PS:一般如果数据量不是很大可以用这3个库完成读写更新,如果数据量很大直接用pandas库

2.读取数据

1)库的安装 pip install xlrd

2)支持xlsx、xls格式的excel表格

3)操作步骤:

  • 打开工作薄(Workbook)
  • 选择工作表(sheets)
  • 操作单元格(cell)

4)举例

import xlrd
# 读取表格数据
wd = xlrd.open_workbook("D:\my_project\up_ver_sn_V1.xlsx")
# 通过名称获取
sheet = wd.sheet_by_name("off") 
# 获取行数
rows = sheet.nrows
# 获取列数
cols = sheet.ncols
# 获取具体某一整行数据
rowData = sheet.row_values(** **行索引号** **)
# 获取具体某一整列数据
colDate = sheet.col_values(** **列索引号** **)
# 通过循环读取表格的所有行
for i in range(0, rows):
    print(sheet.cell_value(i, 2))# 打印具体某一单元格数据
# 获取单元格的值
a = sheet.row(0)[0]
a = sheet.cell(0,0)
a = sheet.col(0)[0]


3.写数据

1)库的安装 pip install xlwt

2)操作步骤:

  • 新建工作薄(Workbook)
  • 添加工作表(add_sheet)
  • 写入数据(write)
  • 保存工作薄(save)

3)创建样式:

#初始化样式

style=xlwt.XFStyle()

#为样式创建字体

font=xlwt.Font() 

#指定字体名字

font.name='Times New Roman' 

#字体加粗

font.bold=True

#将该font设定为style的字体

style.font=font 

#写入到文件时使用该样式

sheet.write(0,1,'XXXx',style)

4)举例

import xlwt
# 创建Excel文件对象、表格页sheet
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet名称')

# sheet页中写入表头
worksheet.write(0, 0, label='key')
worksheet.write(0, 1, label='value')

#写入具体内容
worksheet.write(1, 0, label='XXXX')
worksheet.write(1, 1, label='YYYY')

# 保存Excel文件
workbook.save(file_name)

4.更新数据

1)库的安装 pip install xlutils

2)操作步骤:

  • 打开需要更改的excel(Workbook)
  • 将操作文件对象拷贝,变成workbook对象(copy)
  • 获取工作表(sheet)
  • 写入更新数据(write)
  • 保存工作薄(save)

3)注意点 formatting_info默认为False,改成True可以将表格的格式、规则、宏等带过来 但是如果文件为xlsx格式时,formatting_info=True会抛出异常,而读取xls类型的文件时不存在此问题。

解决方式: 修改xlsx为xls(推荐)

4)举例

import xlrd
import xlwt
from xlutils.copy import copy
# 打开想要更改的excel文件
old_excel = xlrd.open_workbook('test.xlsx', formatting_info=True)
# 将操作文件对象拷贝,变成可写的workbook对象
new_excel = copy(old_excel)
# 获得第一个sheet的对象
ws = new_excel.get_sheet(0)
# 写入数据
ws.write(0, 0, '第一行,第一列')
ws.write(0, 1, '第一行,第二列')
ws.write(0, 2, '第一行,第三列')
ws.write(1, 0, '第二行,第一列')
ws.write(1, 1, '第二行,第二列')
ws.write(1, 2, '第二行,第三列')
# 另存为excel文件,并将文件命名,可以重新命名,也可以覆盖掉
new_excel.save('test.xlsx')