【Python】pyhton操作Excel

活动地址:CSDN21天学习挑战赛

**

学习日记 Day10

**

1. Python操作Excel的库对比

python中有如下库可对Excel表格操作,对比如下:
python对Excel操作的库之间比较本文讲解关于xlrd和xlwt模块,xlrd读取Excel表格,xlwt写入Excel表格。

2. xlrd模块读取Excel

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

2.1 安装xlrd模块

使用如下命令安装xlrd模块:

pip install xlrd

输入该命令后回车,显示如下表示安装成功:
安装xlrd模块

2.2 使用xlrd模块对Excel的各种操作

xlrd模块读取Excel表格可以按照如下读取:
读取的表格(1.xlsx)内容:
在这里插入图片描述
示例代码:

import xlrd

path = "./1.xlsx"
# 1. 打开文件  xlrd.open_workbook(path)打开文件
wb = xlrd.open_workbook(path)
print("打开文件:",path,wb)

# 2. 获取所有表名  wb.sheet_names()获取
lst_sheet_names = wb.sheet_names()
print("当前表格包含的表有:",lst_sheet_names)

# 3. 指定sheet表
#   3.1 使用wb.sheet_by_index(索引) 利用索引顺序获取sheet表
sheet_1 = wb.sheet_by_index(0)  # 获取第一个sheet表格
#   3.2 使用wb.sheet_by_name("sheet表名") 利用表名获取sheet表格
sheet_2 = wb.sheet_by_name(lst_sheet_names[0])

'''
4. 对sheet表的行操作
    4.1 获取sheet表的总行数  sheet.nrows
    4.2 获取某一行的所欲单元格的内容,使用 sheet.row(index)或sheet.row_slice(index)
        返回列表,列表内是键值对,形如:[列1的类型:值,列2的类型:值...]
    4.3 获取某一行所有单元格的内容,使用sheet.row_values(rowx,start_colx=0,end_colx=None)
        返回列表,列表内容是该行的值,形如:[值1,值2...]
    4.4 获取某一行的有效长度,使用sheet_row_len(rowx)
'''
rows = sheet_1.nrows
print("%s 表格有%d行" % (lst_sheet_names[0],rows))
print("第一行的内容:",sheet_1.row(1))
print("第一行的内容:",sheet_1.row_slice(1))
print("第一行的内容:",sheet_1.row_values(1))
print("第一行的有效长度为:",sheet_1.row_len(1))

# 5. 对sheet表的列操作,与对行的操作类似,只需把行操作中的row替换为col即可
#    与行不同的是,列操作中没有获取指定列的有效长度的函数
cols = sheet_1.ncols
print("%s表格有%d列" % (lst_sheet_names[0], cols))
print("第一列的内容:",sheet_1.col(1))
print("第一列的内容:",sheet_1.col_slice(1))
print("第一列的内容:",sheet_1.col_values(1))

显示结果:
在这里插入图片描述
对如上代码分析:

  • 打开文件使用 wb = xlrd.open_workbook(path);
  • 获取表名使用wb.sheet_names(),返回包含所有sheet表名的列表;
  • 获取指定的sheet表格使用sheet1 = wb.sheet_by_index(index)或sheet1 = wb.sheet_by_name(sheet_name);
  • 对sheet表格行操作或列操作:
    –获取sheet表总行或总列数:sheet.nrows/sheet.ncols;
    –返回某行的所有单元格的内容,sheet.row(1)或sheet.row_slice(1)返回包含键值对的列表;键值对是 列数据的类型:列内容
    –返回指定行的所有单元格的内容组成的列表使用sheet.row_values(rowx,start_colx=0,end_colx=None);
    –返回指定行的有效长度使用sheet.row_len(rowx),列没有该函数获取有效长度;

3. xlwt模块对Excel写入操作

3.1 安装xlwt模块

使用如下命令安装xlwt模块:

pip install xlwt

3.2 xlwt模块写单个数据

xlwt模块写单个数据的流程:

  • 创建Excel表对象:workbook = xlwt.Workbook(encoding=‘utf-8’);
  • 新建sheet表:worksheet = workbook.add_sheet(“Sheet1”);
  • 写入数据到指定单元格:worksheet.write(0,0,“python”);
    • 第一个参数是行,第二个参数是列,第三个参数是写入的数据;
  • 保存文件:workbook.save(path);

示例:

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')
print("xlwt写Excel结束")

运行结束,生成了两个文件:test.xls和test.xlsx。

注: 经实践,test.xlsx文件可以生成,但是用Office Excel打不开。

3.3 xlwt模块写入多个文件

向Excel表格中写入多个数据示例:

import xlwt

# 要写入的数据
data_list = [
    ("Tom",20,"CAT"),
    ("Jerry",12,"MOUSE"),
    ("Jack",12,"DOG")
]

# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf-8')

# 2. 新建sheet表
worksheet = workbook.add_sheet("Sheet1")

# 3. 自定义列名
col1 = ["name","age","animals"]

# 4. 将自定义的列名写入到Sheet1表的第一行
for i in range(len(col1)):
    worksheet.write(0,i,col1[i])

# 5. 将数据写入到表格中
for i in range(len(data_list)):  # 按行写入
    data = data_list[i]
    for j in range(len(col1)):
        worksheet.write(i+1,j,data[j])

# 6. 保存文件
workbook.save("test.xls")

生成的Excel表格:
在这里插入图片描述

保存多行数据到Excel中与保存单个数据类似,都需要先创建表格,然后创建sheet表,然后逐行写入数据。

3.4 设置Excel的样式

  • 设置列宽
    可以通过 worksheet.col(colx).width属性修改列的宽度

  • 设置行高
    按照如下修改行高
    worksheet.row(rowx).height_mismatch=True # =True时更改height属性才有用
    worksheet.row(rowx).height = 1600 # 要设置的行高

示例代码:

import xlwt

# 要写入的数据
data_list = [
    ("Tom",20,"CAT"),
    ("Jerry",12,"MOUSE"),
    ("Jack",12,"DOG")
]

# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf-8')

# 2. 新建sheet表
worksheet = workbook.add_sheet("Sheet1")

# 3. 自定义列名
col1 = ["name","age","animals"]

# 4. 将自定义的列名写入到Sheet1表的第一行
for i in range(len(col1)):
    worksheet.write(0,i,col1[i])
    worksheet.col(i).width = 256*24

worksheet.row(0).height_mismatch = True
worksheet.row(0).height = 1200

# 5. 将数据写入到表格中
for i in range(len(data_list)):  # 按行写入
    data = data_list[i]
    worksheet.row(i+1).height_mismatch = False
    worksheet.row(i+1).height = 1600

    for j in range(len(col1)):
        worksheet.write(i+1,j,data[j])


# 6. 保存文件
workbook.save("test.xls")

print("保存Excel表格结束")

运行结束后结果文件:
在这里插入图片描述
相比之前保存的表格,列宽和第一行的行高都有变化,但是下面的三行行高并没有变化,因为下面三行的height_mismatch属性设置为False。

  • 设置单元格风格,常用的设置单元格的属性有:
样式说明
xlwt.Font()字体设置
xlwt.Pattern()背景设置
xlwt.Borders()边框设置
xlwt.Alignment()对准设置

示例代码,设置表格的样式函数

import xlwt


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

    # 字体风格设置
    font = xlwt.Font()  # Font()创建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  # 可以是 NO_PATTERN  SOLID_PATTERN 或者 0x00 ~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
    #style.pattern = pattern

    return style

应用样式,先获取到要设置的样式,然后在写第一行内容时应用样式,如下:

style = xlwt_body_style.body_style()
# 4. 将自定义的列名写入到Sheet1表的第一行
for i in range(len(col1)):
    worksheet.write(0,i,col1[i],style)
    worksheet.col(i).width = 256*24

生成的表格如下,可以看到第一行的样式有所变化。
在这里插入图片描述

全文参考:
https://blog.csdn.net/yuan2019035055/article/details/125121936

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值