xlwings模块学习

xlwings的优点

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

打开已保存的excel文件

import xlwings as xw
import time

"""
visible
Ture:可见excel
False:不可见excel

add_book
True:打开excel并且新建工作簿
False:不新建工作簿
"""
app = xw.App(visible=False, add_book=False)

# 警告提醒及屏幕更新关闭
app.display_alerts  = False
app.screen_updating = False

# 文件位置:filepath,打开test文档
filepath = r'.\src\test.xlsx'
wb = app.books.open(filepath)
print('open file...')

time.sleep(3)

# 保存文档
wb.save()
# 退出工作簿(可省略)
wb.close()
# 退出Excel
app.quit()

新建工作簿并保存

import xlwings as wx

app = wx.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False

wb = app.books.add()

# 若文件存在,则会覆盖原文件
wb.save(r'src\test2.xlsx')
wb.close()
app.quit()

修改单元格中数据并保存

import xlwings as xw

app = xw.App(visible=True, add_book=True)

# wb = app.books.add()
wb = app.books.open(r'src\test3.xlsx')

# print(wb.sheets[0].name) # 可以通过索引获取工作表
wb.sheets['Sheet1'].range('C5').value = '李四'

ws1 = wb.sheets['Sheet1']
ws2 = wb.sheets['Sheet2']

# api: Returns the native object (pywin32 or appscript obj) of the engine being used.
# 也即是说xlwings的API暗含了Excel的宏的功能,完全没有必要用xlwings调用宏了
# 通过api调用
print(ws1.api.Visible) # 通过api查看工作表的可见性

# xlSheetHidden 0 隐藏工作表,用户可以通过菜单取消隐藏。
# xlSheetVeryHidden 2 隐藏对象,若要可见需要宏编辑器中此属性设置为True(用户无法使该对象可见)
# xlSheetVisibl -1 显示工作表。
ws2.api.Visible = 1
print(ws2.api.Visible) # 仍未-1,于是可知隐藏工作表

wb.save()
wb.close()
app.quit()

数据的引用

import xlwings

xw = xlwings.App(visible=True, add_book=True)

xw.display_alerts  = False
xw.screen_updating = False

# 引用工作簿,注意工作簿应该首先被打开
wb = xw.books.open(r'src\data_for_read.xlsx')

# 引用活动工作簿
# wb = xw.books.active

# 引用工作簿中的sheet
sht = wb.sheets['Sheet1']
# 或则
# sht = xw.books[r'src\data_for_read.xlsx'].sheets['Sheet1']

# 引用活动sheet
# sht = wb.sheets.active

# 1)range形式的引用
# 引用A1单元格
rng = sht.range('A1')
print(rng.value)

# 也可以使用R1C1形式的range引用
# A1单元格的引用
rng = sht.range(1,1)
print(rng.value)
# A1:C3单元格的引用
rng = sht.range((1,1),(3,3))
print(rng.value)

# 2)直接引用
rng = sht['A1']
print(rng.value)

# A1:B5单元格
rng = sht['A1:B5']
print(rng.value)

# 在第i+1行,第j+1列的单元格
# B1单元格
rng=sht[0,1]
print(rng.value)

# A1:J10
rng=sht[:10,:10]
print(rng.value)

# 获取工作表总行列数
info = sht.used_range
nrows = info.last_cell.row
ncols = info.last_cell.column

wb.save()
wb.close()
xw.quit()

数据的存储

import xlwings as xw

app = xw.App(visible=True, add_book=True)
app.display_alerts = False
app.screen_updating = False

wb = app.books.open(r'src/data_for_write.xlsx')

sht = wb.sheets["Sheet1"]

# 注意".value“
sht.range('A1').value = 1
# 储存列表
# 将列表[1,2,3]储存在A1:C1中
sht.range('A1').value = [1,2,3]
# 将列表[1,2,3]储存在A1:A3中
sht.range('A1').options(transpose=True).value = [1,2,3]
# 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
# expand:
# Expands the range according to the mode provided.
# Ignores empty top-left cells (unlike Range.end()).
# One of 'table' (=down and right), 'down', 'right'.
sht.range('A1').options(expand='table').value = [[1,2],[3,4]]
# 将二维数组存储到C5:D6中
sht[4:6, 2:4].value = [[1,2], [3,4]]

wb.save()
wb.close()
app.quit()

常用的API

import xlwings as xw

app = xw.App(visible=True, add_book=True)
app.display_alerts = False
app.screen_updating = False

wb = app.books.open(r'src/data_for_read.xlsx')

# 1.工作簿
# 1.1 获取工作表个数
num = len(wb.sheets)
print(num)

# 2.工作表
# 2.1 工作表的名字
for i in range(num):
    sht_name = wb.sheets[i].name
    print(sht_name)

# 2.2 激活sheet为活动工作表
# sht.activate()

# 2.3 清除sheet的内容和格式
# sht.clear()

# 2.4 清除sheet的内容
# sht.contents()

# 2.5 删除sheet
# sht.delete

# 2.6 sheet中表格的自适应宽度
# To autofit rows, use one of the following: rows or r
# To autofit columns, use one of the following: columns or c
# To autofit rows and columns, provide no arguments
wb.sheets['Sheet1'].autofit('c') # 列自适应宽度
wb.sheets['Sheet1'].autofit('r') # 行自适应宽度
wb.sheets['Sheet1'].autofit() # 行列自适应宽度

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

wb.save()
wb.close()
app.quit()

复制工作表

import xlwings as xw

app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False
wb = app.books.open(r'src/copy.xlsx')

start_sheet = wb.sheets[0]
sht_sample = wb.sheets['src'] # 要复制的sheet

# 重点是copy
# 将src工作表复制到工作簿第一张
sht_sample.api.Copy(Before = start_sheet.api)
# 重新获取工作簿第一张工作表,即是刚才复制好的工作表
sht = wb.sheets[0]
new_sheet_name = 'new sheet'
sht.api.Name = new_sheet_name

wb.save()
wb.close()
app.quit()
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值