安装: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的更多相关文章

  1. python中常⽤的excel模块库

    python中常用的excel模块库&安装方法 openpyxl openpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂ ...

  2. python 写 excel 模块 : xlwt

    主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...

  3. python 读 excel 模块: xlrd

    主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...

  4. python自动化--模块操作之re、MySQL、Excel

    一.python自有模块正则 import re # re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None print(re.match("www ...

  5. python xlrd 模块(获取Excel表中数据)

    python xlrd 模块(获取Excel表中数据) 一.安装xlrd模块   到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了pyt ...

  6. Python(五)模块

    本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...

  7. Python CSV模块简介

    Table of Contents 1. CSV 1.1. 简介 1.2. 字典方式地读写 1.3. 其它 2. 参考资料 CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用R ...

  8. Python win32com模块 合并文件夹内多个docx文件为一个docx

    Python win32com模块 合并文件夹内多个docx文件为一个docx #!/usr/bin/env python # -*- coding: utf-8 -*- from win32com. ...

  9. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

  10. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

随机推荐

  1. Docker管理面板-URLOS(易用、高效、强大)

    一.介绍 URLOS是一个Docker管理面板,它把服务器端软件应用的安装行为简化到极致,堪称服务器端的应用宝,具有集群管理.自动故障转移.自动负载均衡等高级功能,可轻易搭建7*24小时在线的网站运行 ...

  2. Push failed: Failed with error: Could not read from remote repository. IDEA 解决方法

  3. DatePickerDialog与OnDateSetListener基本用法与常见问题

    日期时再显示更改控件一般我们使用构造方法public DatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener li ...

  4. Lombok的使用与原理

        在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此.相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而 ...

  5. inner join on会过滤掉两边空值的条件

    前两天工作过程中,遇到一个问题,关于join on查询的,对于查出来的结果一直都很疑惑,这里记录一下. 1.首先看下面这条sql查询语句: 查询出来的结果是25053 2.加个 o.lat = n.l ...

  6. Interval List Intersections

    Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order ...

  7. SpringDataRedis配置

    1.父pom.xml配置依赖包 <dependencyManagement> <dependencies> <dependency> <groupId> ...

  8. 如何實現输入字符串This is an Apple on eBay 输出 Siht si na Elppa no yAbe

    <?php $str = "This is an Apple on eBay"; //定义字符串 $len = strlen($str); //字符串长度 $sup = [] ...

  9. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)

    DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...

  10. Codeforces 1194A. Remove a Progression

    传送门 再一次题目看错浪费一小时...退役算了 自己手玩一下发现划掉的都是奇数,最后所有奇数都划掉了,证明也挺显然的 所以直接输出 $2m$ 即可 #include<iostream> # ...