Python自动化操作Excel方法详解(xlrd,xlwt)

 更新时间:2022年06月07日 08:31:23   作者:小袁ITSuper  
Excel是Windows环境下流行的、强大的电子表格应用。本文将详解用Python利用xlrd和xlwt实现自动化操作Excel的方法详细,需要的可以参考一下

一、Python操作Excel 7大库对比

Excel是Windows环境下流行的、强大的电子表格应用。无论是在工作中还是学习中我们都几乎在不间断的使用Excel来 记录或者处理一些数据。 例如,可能有-个无聊的任务,需要从一个电子表格拷贝一些数据,粘贴到另一个电子表格中。或者可能需要从几千行中挑选几行,根据某种条件稍作修改。或者需要查看几百份部门预算电子表格,寻找其中的 指定内容。正是这种无聊无脑的电子表格任务,如果让人工来手动完成,则无论是时间升本还是精力成本都不是一件好事情,但是可以通过Python来完成。

7大库功能对比图如下(本文主要介绍:xlrd和xlwt):

二、xlrd 读取excel操作

xlrd模块用于读取Excel的数据,速度非常快。支持.xls.xlsx两种文件格式的读取

1. cmd控制台安装模块

pip install xlrd

2. 导入模块

import xlrd

测试表如下:

1. 打开文件

xlrd.open_workbook(path)

wb = xlrd.open_workbook("./a.xls")
print(wb)

运行结果:

<xlrd.book.Book object at 0x000001F905A33DC0>

2. 获取所有表名

wb.sheet_names()

sheet_names_list = wb.sheet_names()
print(sheet_names_list)

运行结果:

['Sheet1', 'Sheet2', 'Sheet3']

3. 指定sheet表

wb.sheet_by_index(索引) or wb.sheet_by_name("sheet表名")

# 方式1:索引顺序获取
sheet_1 = wb.sheet_by_index(0)

# 方式2:名称获取
sheet_2 = wb.sheet_by_name("Sheet1")

4. 对sheet表的行操作

1. 获取sheet表总函数:sheet.nrows

2. 返回由该行中所有的单元格对象组成的列表,列表内是键值对:sheet.row(1),如:[列名1:'值',列名2:'值', ...]或者sheet.row_slice(1)

3. 返回指定行的所有单元格数值组成的列表:sheet.row_values(rowx, start_colx=0, end_colx=None) ,如:['值1','值2',...]

4. 返回指定行的有效长度:sheet.row_len(rowx)

# 1.获取sheet表总函数:sheet.nrows
print("总行数为:", sheet_1.nrows)
# 2.返回由该行中所有的单元格对象组成的列表,列表内是键值对: sheet.row(1)
print(sheet_1.row(1))
# 或者sheet.row_slice(1)
print(sheet_1.row_slice(1))
# 3.返回指定行的所有单元格数值组成的列表: sheet.row_values(rowx, start_colx=0, end_colx=None)
print(sheet_1.row_values(1))
# 4.返回指定行的有效长度:sheet.row_len(rowx)
print("返回指定行的有效长度:", sheet_1.row_len(1))

print('-' * 20)
# 5. 读取整个表
for i in range(sheet_1.nrows):
    print(sheet_1.row_values(i))

运行结果:

总行数为: 4
[text:'物品1', empty:'', number:100.0, text:'EUR 0.1', text:'EUR 0.1']
[text:'物品1', empty:'', number:100.0, text:'EUR 0.1', text:'EUR 0.1']
['物品1', '', 100.0, 'EUR 0.1', 'EUR 0.1']
返回指定行的有效长度: 5
--------------------
['item', 'b', 'PCS', 'UNIT', 'TOTAL']
['物品1', '', 100.0, 'EUR 0.1', 'EUR 0.1']
['物品2', '', 100.0, 'EUR 0.1', 'EUR 0.1']
['物品3', '', 200.0, 'EUR 0.2', 'EUR 0.2']

5. 对sheet表的列操作

1. 返回指定sheet表的有效列数:sheet.ncols

2. 返回由该列中所有的单元格对象组成的列表,列表内是键值对:sheet.col(1),如:[列名1:'值',列名2:'值', ...]或者sheet.col_slice(1)

3. 返回指定列的所有单元格数值组成的列表:sheet.col_values(colx, start_colx=0, end_colx=None),如:['列名','值1','值2',...]

# 1. 返回指定sheet表的有效列数:sheet.ncols
print("总列数为:", sheet_1.ncols)
# 2. 返回由该列中所有的单元格对象组成的列表,列表内是键值对:sheet.col(1)
print(sheet_1.col(1))
# 或者sheet.col_slice(1)
print(sheet_1.col_slice(1))
# 3. 返回指定列的所有单元格数值组成的列表:sheet.col_values(colx, start_colx=0, end_colx=None)
print(sheet_1.col_values(0))  # 带列名
print(sheet_1.col_values(0, 1))  # 不带列名
print('-' * 20)

# 4. 读取全部表
for i in range(sheet_1.ncols):
    print(sheet_1.col_values(i))

运行结果:

总列数为: 5
[text:'b', empty:'', empty:'', empty:'']
[text:'b', empty:'', empty:'', empty:'']
['item', '物品1', '物品2', '物品3']
['物品1', '物品2', '物品3']
--------------------
['item', '物品1', '物品2', '物品3']
['b', '', '', '']
['PCS', 100.0, 100.0, 200.0]
['UNIT', 'EUR 0.1', 'EUR 0.1', 'EUR 0.2']
['TOTAL', 'EUR 0.1', 'EUR 0.1', 'EUR 0.2']

三、xlwt 写入Excel表操作

xlwt 模块可以将数据写入到 Excel 工作簿中。目前已支持写入.xls.xlsx两种文件格式

1. cmd控制台安装模块

pip install xlwt

2. 导入模块

import xlwt

1. 写入单个数据

1. 创建Excel表对象:xlwt.Workbook(encoding='utf8')

2. 新建sheet表:worksheet = workbook.add_sheet('Sheet1')

3. 写入数据到指定单元格:worksheet.write(0, 0, "python")。第一个参数是第 i 行,第二个是第 j 列,第三个是要写的参数(字符串或数字)

4. 保存文件:workbook.save('test.xlsx')。目前已支持写入.xls.xlsx两种文件格式

测试代码:

import xlwt

# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf8')
# 2. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 3. 写入数据到指定单元格
worksheet.write(0, 0, "python")
# 4. 保存文件分两种格式
workbook.save('test.xls')
workbook.save('test.xlsx')

运行结果如下:生成两个新文件

2. 写入多个数据

测试代码:

import xlwt

data_list = [('小白', '20', '男'), ('小黑', '21', '男'), ('小红', '20', '女')]
# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf8')
# 2. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 3. 自定义列名
col1 = ('姓名', '年龄', '性别')
# 4. 将列属性元组col写进sheet表单中第一行
for i in range(0, len(col1)):
    worksheet.write(0, i, col1[i])
# 5. 将数据写进sheet表单中
for i in range(0, len(data_list)):
    data = data_list[i]
    for j in range(0, len(col1)):
        worksheet.write(i + 1, j, data[j])
# 6. 保存文件分两种格式
workbook.save('test.xls')

运行结果:

3. 设置列宽

cols_num是列的数目,可以通过修改12这个值,修改列的宽度

for c in range(len(col1)):
    worksheet.col(c).width = 256 * 24

运行结果:

4. 设置行高

设置行高,修改1600为别的值,可以修改行的高度

测试代码:

# 5. 将数据写进sheet表单中
for i in range(0, len(data_list)):
    data = data_list[i]
    for j in range(0, len(col1)):
        worksheet.write(i + 1, j, data[j])
        # 6. 设置行高
        worksheet.row(i + 1).height_mismatch = True
        worksheet.row(i + 1).height = 1600  # 设置行高

运行结果:

5. 设置单元格风格

常用设置单元格的属性:

样式说明
xlwt.Font()字体设置
xlwt.Pattern()背景设置
xlwt.Borders()边框设置
xlwt.Alignment()对准设置

测试代码:

def body_style():
    # 一、创建一个样式对象,初始化样式 style
    style = xlwt.XFStyle()  # Create Style对象

    # 二、字体风格设置
    font = xlwt.Font()  # Create Font对象
    font.name = "SimSun"  # 设置字体类型,宋体
    font.colour_index = 4  # 设置字体颜色
    font.height = 20 * 12  # 字体大小,12为字号,20为衡量单位
    font.bont = True  # 设置字体加粗
    font.underline = True  # 下划线
    font.italic = True  # 斜体字

    # 二、背景设置
    pattern = xlwt.Pattern()
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
    pattern.pattern_fore_colour = 4  # 给背景颜色赋值

    # 三、边框设置
    borders = xlwt.Borders()  # 创建边框对象,    # .DASHED:虚线;.NO_LINE:没有
    # 上下左右都添加边框
    borders.left = 1
    borders.right = 1
    borders.top = 1
    borders.bottom = 1
    # 设置边框颜色
    borders.left_colour = 2
    borders.right_colour = 2
    borders.top_colour = 2
    borders.bottom_colour = 2

    # 四、位置设置
    alignment = xlwt.Alignment()
    alignment.horz = 1  # 设置水平位置,0是左对齐,1是居中,2是右对齐
    alignment.wrap = 1  # 设置自动换行

    # 五、设置好之后,全部都加到style上
    style.alignment = alignment
    style.font = font
    style.borders = borders
    return style

应用样式:

sheet.write(row, column, i)  # 不带格式
sheet.write(row, column, i, style)  # 有格式

运行结果:

到此这篇关于Python自动化操作Excel方法详解(xlrd,xlwt)的文章就介绍到这了,更多相关Python自动化操作Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python常见文件操作的函数示例代码

    Python常见文件操作的函数示例代码

    Python常见文件操作的函数示例代码,学习python的朋友可以参考下。
    2011-11-11
  • python 批量下载bilibili视频的gui程序

    python 批量下载bilibili视频的gui程序

    这篇文章主要介绍了python 批量下载bilibili视频的gui程序,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • 详解Python中的数据清洗工具flashtext

    详解Python中的数据清洗工具flashtext

    FlashText是GitHub上的一个开源Python库,正如之前所提到的,它在提取关键字和替换关键字任务上有着极高的性能。本文将详解一下flashtext的使用,需要的可以参考一下
    2022-06-06
  • 一篇文章了解Python中常见的序列化操作

    一篇文章了解Python中常见的序列化操作

    这篇文章主要给大家介绍了软玉Python中常见的序列化操作的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Python读写unicode文件的方法

    Python读写unicode文件的方法

    这篇文章主要介绍了Python读写unicode文件的方法,涉及Python针对文件的读取及编码操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python中TypeError: int object is not iterable错误分析及解决办法

    Python中TypeError: int object is not 

    在Python中,当你尝试对一个非迭代对象(如整数、浮点数等)使用迭代操作(如for循环、列表推导式中的迭代等)时,会触发TypeError: 'int' object is not iterable错误,所以本文给大家介绍了Python中TypeError: int object is not iterable错误分析及解决办法
    2024-08-08
  • python3 hdf5文件 遍历代码

    python3 hdf5文件 遍历代码

    这篇文章主要介绍了python3 hdf5文件 遍历代码,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python 全局变量的import机制介绍

    python 全局变量的import机制介绍

    在之前学习python设计模式(工厂模式实践篇),希望使用全局变量代替c++的宏完成服务自动注册功能时,遇到过一个问题,全局变量的定义和使用放在同一个可执行脚本中的问题
    2017-09-09
  • python游戏地图最短路径求解

    python游戏地图最短路径求解

    这篇文章主要为大家详细介绍了python游戏地图最短路径的求解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python生成器常见问题及解决方案

    Python生成器常见问题及解决方案

    这篇文章主要介绍了Python生成器常见问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论