python--Excel模块xlwings

安装:pip install xlwings
基本操作:

xlwings的特色:
- xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
- 可以和matplotlib以及pandas无缝连接
- 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
- 开源免费,一直在更新
- 【能读出公式计算的值】
新建工作簿:
import xlwings as xw
app = xw.App(visible=True,add_book=False) #创建应用
#visible=True 显示Excel工作簿;False 不显示工作簿
#add_book=False 不再新建一个工作簿;True 另外再新建一个工作簿
wb = app.books.add() #新建工作簿
sh1=xw.books.active #引用活动工作薄
wb.activate() #激活为当前工作簿
打开已有工作簿:
方式一:
import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx') #读入已有工作簿
方式二:
import xlwings as xw
wb = xw.Book('D:\sample.xlsx') #读入已有工作簿
#工作簿不显示
保存工作簿:
import xlwings as xw
wb = xw.Book('D:\sample.xlsx')
wb.save('D:\samplelm.xlsx') #保存工作簿
参数可以省略:工作簿的原路径或脚本所在的路径
退出和关闭:
import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx')
wb.close() #关闭工作簿(程序不能编辑了)----显示的文件不关闭
app.quit() #退出应用---显示的文件也关闭
工作表操作:
import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx')
sht = wb.sheets[0] #引用工作表
#参数:工作表序号
sht1 = wb.sheets['物理'] #引用工作表
#参数:工作表名称
sht=xw.sheets.active #引用活动sheet print(sht)
print(sht1)
wb.close()
app.quit()
sht.clear() # 清除sheet的内容和格式
a=sht.name #返回表格名称
sht.delete # 删除sheet----[没有删除啊 ???]
单元格操作:
import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx')
sht = wb.sheets[0] rng = sht.range('a1') #引用单元格---方式一
#<Range [sample.xlsx]Sheet!$A$1>
#参数:可以大写,可以小写
rng = sht['b1'] #引用单元格---方式二
rng = sht[0,0] #引用单元格---方式三--第一行的第一列即a1
rng=xw.Range('c1') #引用活动sheet上的单元格
#注意Range首字母大写 print(rng)
wb.close()
app.quit()
rng = sht.range('a1:a5') #引用区域---方式一
#<Range [sample.xlsx]Sheet!$A$1:$A$5>
rng = sht['a1:b5'] #引用区域---方式二
#<Range [sample.xlsx]Sheet!$A$1:$B$5>
#rng = sht[:5,0] #引用区域---方式三---????
rng = sht.range('a1')
rng.value=10 #单元格赋值
rng = sht.range('b1')
rng.value='abcd' #单元格赋值
sht.range('c1').value = [1,2,3,4] #按行插入
#从单元格c1开始,按行依次插入数据
sht.range('a1:d4').value = [10,20,30,40] #指定区域插入数据---按行
sht.range('a2').options(transpose=True).value = [5, 6, 7, 8] #按列插入
#从单元格a2开始,按列依次插入数据
#既然默认的是按行写入,我们就把它倒过来嘛(transpose),单词要打对,如果你打错单词,它不会报错,而会按默认的行来写入
sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']] #区域赋值
#从单元格a6开始赋值
#['a','b','c'] 是一行;['d','e','f']是一行
L=sht.range('a1:d4').value #读取A1:D4区域的值
原表格数据:

返回值:

返回值是列表,每一行是一个列表
返回的数值默认是浮点数
rng=sht['d2']
a=rng.value #返回指定单元格的值
rng = sht.range('a1')
rng.add_hyperlink(r'www.baidu.com','百度','提示:点击即链接到百度') # 指定单元格加入超链接
a=rng.hyperlink #获得range的超链接
#http://www.baidu.com/
rng = sht.range('b6')
rng.formula='=SUM(B1:B5)' #输入公式
a=rng.formula #获取公式
#=SUM(B1:B5)
a=rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False) # 获得单元格的绝对地址
# $B$6
其它操作:
a=wb.fullname #返回工作簿的绝对路径
#D:\sample.xlsx
a=wb.name #返回工作簿的名称
#sample.xlsx
sht.activate() # 激活sheet为活动工作表
sht = wb.sheets[0]
rng = sht.range('a1')
a=rng.address #取得当前range的地址--$A$1
rng = sht.range('a1:c1')
a=rng.address #取得当前range的地址--$A$1:$C$1
a=rng.get_address() #与rng.address相同
rng.clear_contents() # 清除range的内容
rng.clear() # 清除格式和内容
sht = wb.sheets[0]
rng = sht.range('a1')
rng.color=(255,0,0) # 设置range的背景颜色
rng = sht.range('b1')
rng.color=(0,0,255)
a = rng.color # 取得range的背景色,以元组形式返回RGB值
#(255, 0, 0)
rng.color=None # 清除range的背景色
sht = wb.sheets[0]
rng = sht.range('c2:g4')
a=rng.column #获得range的第一列列标
#从A列是1
a=rng.count #返回range中单元格的格数
a=rng.row # 返回range的第一行行标
rng = sht.range('b2:g4')
a=rng.last_cell #获得range中右下角最后一个单元格
#<Range [sample.xlsx]Sheet!$G$4>
rng = sht.range('b6:c1')
a=rng.width # 返回range的总宽度
rng = sht.range('b6')
a=rng.column_width # 获得列宽
sht = wb.sheets[0]
rng = sht.range('b2:g4')
a=rng.row_height # 行的高度,所有行一样高返回行高,不一样返回None
a=rng.height # 返回range的总高度
a=rng.shape # 返回range的行数和列数---(3, 6)
a=rng.sheet # 返回range所在的sheet
#<Sheet [sample.xlsx]Sheet>
a=rng.rows #返回range的所有行
for i in a:
print(i)
#<Range [sample.xlsx]Sheet!$B$2:$G$2>
#<Range [sample.xlsx]Sheet!$B$3:$G$3>
#<Range [sample.xlsx]Sheet!$B$4:$G$4>
a=rng.rows[0] # range的第一行
#<Range [sample.xlsx]Sheet!$B$2:$G$2>
a=rng.rows.count # range的总行数
a=rng.columns # 返回range的所有列
for i in a:
print(i)
#<Range [sample.xlsx]Sheet!$C$2:$C$4>
#<Range [sample.xlsx]Sheet!$D$2:$D$4>
#<Range [sample.xlsx]Sheet!$E$2:$E$4>
#<Range [sample.xlsx]Sheet!$F$2:$F$4>
#<Range [sample.xlsx]Sheet!$G$2:$G$4>
rng = sht.range('b2:g4')
a=rng.columns[0] # 返回range的第一列
#<Range [sample.xlsx]Sheet!$B$2:$B$4>
a=rng.columns.count # 返回range的列数
rng.autofit() # 所有range的大小自适应
rng.columns.autofit() # 所有列宽度自适应
rng.rows.autofit() # 所有行高自适应


python--Excel模块xlwings的更多相关文章
- python中常⽤的excel模块库
python中常用的excel模块库&安装方法 openpyxl openpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂ ...
- python 写 excel 模块 : xlwt
主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...
- python 读 excel 模块: xlrd
主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...
- python自动化--模块操作之re、MySQL、Excel
一.python自有模块正则 import re # re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None print(re.match("www ...
- python xlrd 模块(获取Excel表中数据)
python xlrd 模块(获取Excel表中数据) 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了pyt ...
- Python(五)模块
本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...
- Python CSV模块简介
Table of Contents 1. CSV 1.1. 简介 1.2. 字典方式地读写 1.3. 其它 2. 参考资料 CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用R ...
- Python win32com模块 合并文件夹内多个docx文件为一个docx
Python win32com模块 合并文件夹内多个docx文件为一个docx #!/usr/bin/env python # -*- coding: utf-8 -*- from win32com. ...
- Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
- Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
随机推荐
- Docker管理面板-URLOS(易用、高效、强大)
一.介绍 URLOS是一个Docker管理面板,它把服务器端软件应用的安装行为简化到极致,堪称服务器端的应用宝,具有集群管理.自动故障转移.自动负载均衡等高级功能,可轻易搭建7*24小时在线的网站运行 ...
- Push failed: Failed with error: Could not read from remote repository. IDEA 解决方法
- DatePickerDialog与OnDateSetListener基本用法与常见问题
日期时再显示更改控件一般我们使用构造方法public DatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener li ...
- Lombok的使用与原理
在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此.相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而 ...
- inner join on会过滤掉两边空值的条件
前两天工作过程中,遇到一个问题,关于join on查询的,对于查出来的结果一直都很疑惑,这里记录一下. 1.首先看下面这条sql查询语句: 查询出来的结果是25053 2.加个 o.lat = n.l ...
- Interval List Intersections
Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order ...
- SpringDataRedis配置
1.父pom.xml配置依赖包 <dependencyManagement> <dependencies> <dependency> <groupId> ...
- 如何實現输入字符串This is an Apple on eBay 输出 Siht si na Elppa no yAbe
<?php $str = "This is an Apple on eBay"; //定义字符串 $len = strlen($str); //字符串长度 $sup = [] ...
- DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)
DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...
- Codeforces 1194A. Remove a Progression
传送门 再一次题目看错浪费一小时...退役算了 自己手玩一下发现划掉的都是奇数,最后所有奇数都划掉了,证明也挺显然的 所以直接输出 $2m$ 即可 #include<iostream> # ...