Python之Xlwings操作excel

news2024/12/26 11:42:39

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、xlwings简介
  • 二、安装与使用
    • 1.安装
    • 2.使用
    • 3.xlwings结构说明
  • 二、xlwings对App常见的操作
    • App基础操作
    • 工作簿的基础操作
    • 工作表的基础操作
      • 工作表其他操作
    • 读取单元格的基础操作
      • Range其他操作
    • 写入单元格的基础操作
    • 写入一行或一列Excel数据(函数式)

一、xlwings简介

python操作Excel的模块,python中能操作Excel的库,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl等,一共九个库
在这里插入图片描述
所以我综合了一下就打算用xlwings
他的特点:

  1. xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
  2. 可以和matplotlib以及pandas无缝连接
  3. 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
  4. 开源免费,一直在更新

二、安装与使用

1.安装

pip install xlwings

中文使用文档说明:https://www.kancloud.cn/gnefnuy/xlwings-docs/1127450

2.使用

app=xw.App()
wb=app.books.open(r'文件地址') # 这里的r指的是不转义特殊字符
# 1.打开Excel
app=xw.App(visible=True,add_book=False)
# visible是否可见,False表示在后台运行,add_book是否新增一张Excel操作,在新增wb上运行
# 2.对excel操作时候屏幕是否更新
app.screen_updating=True   #默认True
# 3.返回所有book对象集合
print(app.books)    #只返回通过xw打开的workbook,手动打开的不返回
# 4.退出excel
app.kill()  #终止进程
app.quit()  #退出excel程序

3.xlwings结构说明

根据我们写的代码也可以看出
excel基本结构分为 Application ——> Workbooks ——> Worksheets ——> Range
即应用程序 ——> 工作簿 ——> 工作表 ——> 单元格。
在这里插入图片描述
其他的没什么不好理解的(如果用过excel)这里的range的含义其实指的是范围也称为区域,(你所需要进行操作的范围)比如a1到f1这样

二、xlwings对App常见的操作

App基础操作

import xlwings as xw
 
app = xw.App(visible=True, add_book=False)
app.display_alerts = False    # 关闭一些提示信息,可以加快运行速度。 默认为 True。
app.screen_updating = True    # 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度。
wb = app.books.add()
sht = wb.sheets.active

工作簿的基础操作

 wb = app.books.add()                   # 新建工作簿。
 wb = app.books.open(r'file_path')      # 打开现有的工作簿
 wb = app.books.active                  # 获取当前活动的工作簿

工作表的基础操作

sht = wb.sheets.active                 # 获取当前活动的工作表
sht = wb.sheets[0]                     # 按索引获取工作表
sht = wb.sheets['Sheet1']              # 按表名获取工作表
sht1 = wb.sheets.add()                 # 新建工作表,默认新建的放在最前面。
sht1 = wb.sheets.add('新建工作表', after=sht)   # 新建工作表,放在sht工作表后面。

工作表其他操作

app=xw.App()
wb=app.books.open(r'C:\Users\Administrator\Desktop\1test.xlsm')
sht=wb.sheets[0]
1.sheets返回所有的工作表
print(wb.sheets)
2.active返回正在被操作的sht,
sht=wb.sheets[0]
print(sht.activate)
3.add(name=None,before=None,after=None)添加sht
wb.sheets.add(name='hello_xlwings')
4.autofit(axis=None)自动调整行和列
栗子
import xlwings as xw
wb=xw.Book()
wb.sheets[0].range('a1').value='hello xlwings'  #对第一张表a1赋值
wb.sheets[0].autofit('c')   #columns=c
wb.sheets[0].autofit('r')   #rows=r
wb.sheets[0].autofit()
5.book sht所属的workbook
sht=wb.sheets[0]
print(sht.book) #属于workbook<Book [1test.xlsm]>
6.cells返回一个range对象,表示sheet上的所有单元格
print(sht.cells)
print(sht.cells.shape)
7.charts返回sheet中所有图标的集合
print(sht.charts)
8.clear()
print(sht.clear())  #清除内容颜色格式...
9.clear_contents()
print(sht.clear_contents()) #清除内容
10.delete() 删除sheet
sht.delete()
11.pictures 返回所有pictures对象的集合
print(sht.pictures)
12.index 返回工作表的索引
print(sht.index)    #第一个为1
13.name,sheet name的操作
print(sht.name) #获得sht的名字
sht.name='xlwingstest'  #修改sht的名字
print(sht.name)

读取单元格的基础操作

cell1 = sht.range('cell1')
# 获取 cell1 中的值
v = cell1.value
# 也可以根据行列号读取
cell1_value = sht.range(3,2).value
# 读取一段区间内的值
a1_c4_value = sht.range('a1:c4').options(ndim=2).value       # 加上 option 读取二维的数据
a1_c4_value = sht.range((1,1),(4,3)).options(ndim=2).value   # 和上面读取的内容一样。

Range其他操作

app=xw.App()
wb=app.books.open(r'C:\Users\Administrator\Desktop\1test.xlsm')
sht=wb.sheets[0]
1.add_hyperlink(address,text_to_display=None,screen_tip=None)添加超链接
sht.range('a1').add_hyperlink(address='www.baidu.com',text_to_display='百度',screen_tip='我是百度哦')
2.clear()删除range里面的内容和格式
3.clear_contents()删除内容
4.color获取单元格的背景颜色
print(sht.range('a1').color)    #没有颜色的时候返回None
sht.range('a1').color=(100,100,100)   #设置颜色
print(sht.range('a1').color)
5.column返回range的列
6.column_width获取单元格的列宽
print(sht.range('a1').column_width)  #获取宽度
sht.range('a1').column_width=33 #设置宽度
print(sht.range('a1').column_width)
7.columns返回RangeColumns对象,表示指定范围内的列
print(sht.range('a1:c3').columns)
8.count返回单元格数量
9.end(direction),返回一个range对象,类似Ctrl+Up(down,left,right)
print(sht.range('a1:a65536').end('down').row)   #返回最后有值一行
10.formula 获取设置单元格的公式
sht.range('a1').formula='=b1+c1'    #设置
# print(sht.range('a1').formula)  #获取
11.formula_array 获取设置单元格的数组公式
sht.range('a1').formula_array='=b1+c1'    #设置
print(sht.range('a1').formula_array)  #获取的值并没有{}包裹
12.get_address(row_absolute=True,column_absolute=True,include_sheetname=False,external=False)返回地址
13.height返回高度 row_height
print(sht.range('a1').height) #获取行高
sht.range('a1').row_height=33   #设置行高
print(sht.range('a1').row_height)   #获取行高
14.hyperlink返回地址
15.last_cell返回指定range右下角的单元格
16.left返回从第一列到range第一列的距离
17.name设置获取range的名称
18.number_format获取设置range的内容格式
19.offset(row_offset=0,column_offset=0)
rng=sht.range('a1:c3')
rng=rng.offset(row_offset=2,column_offset=2)
print(rng)  #返回偏移后的array c3:e5
20.options(convert=None,)...
21.raw_value获取设置传递的值
22.row返回行
23.row_height 在上方height的时候已经举栗子
24.rows返回rangerows
25.select()
26.shape返回几行几列
27.size返回range中元素数量
print(sht.range('a1:d100').size)    #有400个cell
28.top返回第一行到range第一行的距离
29.value获取设置range的值
sht.range('a1').value='123'
print(sht.range('a1').value)



# 引用当前活动工作表的单元格
rng=xw.Range('A1')
# 加入超链接
# rng.add_hyperlink(r\'www.baidu.com\',\'百度\',‘提示:点击即链接到百度\')
# 取得当前range的地址
rng.address
rng.get_address()
# 清除range的内容
rng.clear_contents()
# 清除格式和内容
rng.clear()
# 取得range的背景色,以元组形式返回RGB值
rng.color
# 设置range的颜色
rng.color=(255,255,255)
# 清除range的背景色
rng.color=None
# 获得range的第一列列标
rng.column
# 返回range中单元格的数据
rng.count
# 返回current_region
rng.current_region
# 返回ctrl + 方向
rng.end('down')
# 获取公式或者输入公式
rng.formula='=SUM(B1:B5)'
# 数组公式
rng.formula_array
# 获得单元格的绝对地址
rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
# 获得列宽
rng.column_width
# 返回range的总宽度
rng.width
# 获得range的超链接
rng.hyperlink
# 获得range中右下角最后一个单元格
rng.last_cell
# range平移
rng.offset(row_offset=0,column_offset=0)
#range进行resize改变range的大小
rng.resize(row_size=None,column_size=None)
# range的第一行行标
rng.row
# 行的高度,所有行一样高返回行高,不一样返回None
rng.row_height
# 返回range的总高度
rng.height
# 返回range的行数和列数
rng.shape
# 返回range所在的sheet
rng.sheet
#返回range的所有行
rng.rows
# range的第一行
rng.rows[0]
# range的总行数
rng.rows.count
# 返回range的所有列
rng.columns
# 返回range的第一列
rng.columns[0]
# 返回range的列数
rng.columns.count
# 所有range的大小自适应
rng.autofit()
# 所有列宽度自适应
rng.columns.autofit()
# 所有行宽度自适应
rng.rows.autofit()

写入单元格的基础操作

一维

sht.range(3,2).value = ='welcome'
sht.range('A1').value=[1,2,3]
# 将A1,B1,C1单元格的值存入list1列表中
list1=sht.range('A1:C1').value
# 将1,2,3分别写入了A1,A2,A3单元格中
sht.range('A1').options(transpose=True).value=[1,2,3]
# 将A1,A2,A3单元格中值存入list1列表中
list1=sht.range('A1:A3').value

二维

# 将a1,a2,a3输入第一列,b1,b2,b3输入第二列
list1=[['a1','a2','a3'],['b1','b2','b3']]
sht.range('A1').value=list1

在这里插入图片描述

写入一行或一列Excel数据(函数式)

import xlwings as xw
def write_col(io, sheet, col='A1', data=None):
    """
    一次写多列
	注意点:此方法所需的data参数必须是list嵌套,如:[[1, 9], [2, 8], [3, 7], [4, 6]],并且里面的每个list的长度必须一致
    写入一列数据
    :param io: Excel文件
    :param sheet: sheet,int或者str类型
    :param col: 哪一列,如:'A1'
    :param data: 要写入的数据,list类型
    :return:
    """
    wb = xw.Book(io)
    if isinstance(sheet, str):
        sht = wb.sheets(sheet)
    else:
        sht = wb.sheets[sheet]
    sht.range(col).options(transpose=True).value = data
    wb.save()
    wb.app.quit()

 
def write_row(io, sheet, row=\'A1\', data=None):
    """
    写入一行数据
    一次写多行
	注意点:此方法所需的data参数必须是list嵌套,如:[[1, 2], [3, 4], [5, 6]],并且里面的每个list的长度必须一致
    :param io: Excel文件
    :param sheet: sheet,int或者str类型
    :param row: 哪一行,如:'A1'
    :param data: 要写入的数据,list类型
    :return:
    """
    wb = xw.Book(io)
    if isinstance(sheet, str):
        sht = wb.sheets(sheet)
    else:
        sht = wb.sheets[sheet]
    sht.range(row).value = data
    wb.save()
	wb.app.quit()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 自定义View之圆形进度条

很多场景下都用到这种进度条&#xff0c;有的还带动画效果&#xff0c; 今天我也来写一个。 写之前先拆解下它的组成&#xff1a; 底层圆形上层弧形中间文字 那我们要做的就是&#xff1a; 绘制底层圆形&#xff1b;在同位置绘制上层弧形&#xff0c;但颜色不同&#xff…

【0908练习】shell脚本使用expr截取网址

题目&#xff1a; 终端输入网址&#xff0c;如&#xff1a;www.hqyj.com&#xff0c; 要求&#xff1a;截取网址每个部分&#xff0c;并放入数组中&#xff0c;不能使用cut&#xff0c;使用expr解决 #!/bin/bash read -p "请输入一个网址" net lenexpr length $net …

协程 VS 线程,Kotlin技术精讲

协程(coroutines)是一种并发设计模式&#xff0c;您可以在Android 平台上使用它来简化异步执行的代码。协程是在版本 1.3 中添加到 Kotlin 的&#xff0c;它基于来自其他语言的既定概念。 在 Android 上&#xff0c;协程有助于管理长时间运行的任务&#xff0c;如果管理不当&a…

无脑014——linux系统,制作coco(json)格式数据集,使用mmdetection训练自己的数据集

电脑&#xff0c;linux&#xff0c;RTX 3090 cuda 11.2 1.制作coco&#xff08;json&#xff09;格式数据集 这里我们使用的标注软件是&#xff1a;labelimg 选择voc格式进行标注&#xff0c;标注之后使用以下代码&#xff0c;把voc格式转换成coco格式&#xff0c;注意最后的路…

机房运维管理软件不知道用哪个好?

云顷网络还原系统V7.0是一款专业的机房运维管理产品&#xff0c;基于局域网络环境&#xff0c;针对中高端机房中电脑运维管理需求所设计开发的。网络还原系统软件通过全面的规划和设计&#xff0c;遵从机房部署、使用到维护阶段化使用方式&#xff0c;通过极速网络同传/增量对拷…

TypeScript的函数

ts与js函数区别 tsjs传参需要规定类型无类型箭头函数箭头函数ES6函数类型无函数类型必填和可选参数所有参数都是可选的能设置默认参数能设置默认参数剩余参数剩余参数 函数重载 函数重载 注释 TypeScript 允许您指定函数的输入和输出值的类型。 输入值注释 // 传参必须为字…

如何理解图神经网络的傅里叶变换和图卷积

图神经网络&#xff08;GNN&#xff09;代表了一类强大的深度神经网络架构。在一个日益互联的世界里&#xff0c;因为信息的联通性&#xff0c;大部分的信息可以被建模为图。例如&#xff0c;化合物中的原子是节点&#xff0c;它们之间的键是边。图神经网络的美妙之处在于它们能…

【设计模式】二、UML 类图概述

文章目录 常见含义含义依赖关系&#xff08;Dependence&#xff09;泛化关系&#xff08;Generalization&#xff09;实现关系&#xff08;Implementation&#xff09;关联关系&#xff08;Association&#xff09;聚合关系&#xff08;Aggregation&#xff09;组合关系&#x…

【赠书活动】AI 时代,程序员无需焦虑

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

9.8day59

503. 下一个更大元素 II - 力扣&#xff08;LeetCode&#xff09; 知识点&#xff1a;单调栈 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09;

初学python爬虫学习笔记——爬取网页中小说标题

初学python爬虫学习笔记——爬取网页中小说标题 一、要爬取的网站小说如下图 二、打开网页的“检查”&#xff0c;查看html页面 发现每个标题是列表下的一个个超链接&#xff0c;从183.html到869.html 可以使用for循环依次得到&#xff1a; x range(183,600) for i in x:pr…

NoSQL数据库入门

一、NoSQL数据库概述 NoSQL 是一种不同于关系数据库的数据库管理系统设计方式&#xff0c;是对非关系型数据库的统称&#xff0c;它所采用的数据模型并非传统关系数据库的关系模型&#xff0c;而是类似键/值、列族、文档等非关系模型。NoSQL 数据库没有固定的表结构&#xff0c…

W25Q16_Flash手册总结

文章目录 前言一、概述&特点1、概述W25Q16BV1、特点2、引脚说明3、内部结构示意图4、操作指令5、操作示例时序图1、写入启用指令&#xff1a;Write Enable&#xff08;06h&#xff09;2、读取状态寄存器指令&#xff1a;Read Status Register-1&#xff08;05h&#xff09;…

【PowerShell代码】清除掉文件中的非英文字母

如果你尝试从网上下载一些带有非ASCII的文件时候&#xff0c;你在这台机器上会发现没有问题&#xff0c;但是将文件传递到其他的地方或者其他电脑你会发现存在比较大的问题&#xff0c;我如何才能将这些文件中的非英文字母去掉呢&#xff1f; 如何才能将文件中的这些非英文字母…

无涯教程-JavaScript - IMLOG2函数

描述 IMLOG2函数以x yi或x yj文本格式返回复数的以2为底的对数。可以从自然对数计算复数的以2为底的对数,如下所示- $$\log_2(x yi)(log_2e)\ln(x yi)$$ 语法 IMLOG2 (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the bas…

为什么零基础选择语言首选python

在众多编程语言中&#xff0c;似乎已经没有什么能够阻挡Python的步伐。本月Python又是第一名&#xff0c;市场份额达到了13.42%&#xff0c;在2023年&#xff0c;Python已经连续7个月蝉联榜首&#xff0c;遥遥领先于其他对手。 每个月榜单发布后&#xff0c;都有小伙伴会好奇&…

Blender中的高级边缘控制和纹理映射

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 步骤 1 首先&#xff0c;您需要创建一组无阴影材质&#xff0c;每种材质具有不同的颜色&#xff0c;确保您有足够的材质来覆盖模型&#xff0c;而不会有相同的颜色相互重叠。然后&#xff0c;切换到“着色”&#xff…

即拼七人拼团系统开发模式是怎么盈利赚钱的?

即拼七人拼团是市场上最近比较火爆的一款商业模式&#xff0c;它结合了二二复制和拼团两种模式玩法&#xff0c;不仅能让消费者从中获利&#xff0c;还能让平台快速获流裂变&#xff0c;对平台起盘初期和发展中期具有很强的推广能力。那么这个模式是怎么盈利赚钱的呢&#xff1…

使用内网负载机(Linux)执行Jmeter性能测试

一、背景 ​ 在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试&#xff0c;一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢&#xff1f; 遇到公网环境下性能测试达到了带宽瓶颈。那么这时&#xff0c;我们就需要考虑在内网环境负载机下来执行我们…

Mac brew -v 报错 fatal: detected dubious ownership in repository

Mac 电脑查询 brew版本时报错&#xff0c;如下错误&#xff1a; Last login: Fri Sep 8 14:56:21 on ttys021 sunshiyusunshiyudeMacBook-Pro-2 ~ % brew -v Homebrew 4.0.3-30-g7ac31f7 fatal: detected dubious ownership in repository at /usr/local/Homebrew/Library/Ta…