python处理excel的库_【Python】处理Excel的库Xlwings

# # 引入库

import xlwings as xw

import time

# 打开Excel程序,默认设置:程序可见,只打开不新建工作薄

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

#新建工作簿 (如果不接下一条代码的话,Excel只会一闪而过,卖个萌就走了)

# wb = app.books.add()

# 打开已有工作簿(支持绝对路径和相对路径)

# wb = app.books.open(‘example.xlsx‘)

练习的时候建议直接用下面这条,这样的话就不会频繁打开新的Excel

wb = xw.Book(‘example.xlsx‘)

print(‘-----新建sheet-----‘)

wb.sheets.add(‘jenny‘)

# 引用Excel工作表,单元格

print(‘-----引用-----‘)

# 引用工作表

sht = wb.sheets[0]

#sht = wb.sheets[第一个sheet名]

# 引用单元格

rng = sht.range(‘a1‘)

# #rng = sht[‘a1‘]

# #rng = sht[0,0] 第一行的第一列即a1,相当于pandas的切片

print ("引用单元格: "+str(rng.value))

#

# # 引用区域

rng = sht.range(‘a1:a5‘)

#rng = sht[‘a1:a5‘]

#rng = sht[:5,0]

print ("引用区域: "+str(rng.value))

# 重头戏:写入数据

# (xlwings多个单元格的写入大多是以表格形式)

print(‘-----写入-----‘)

# 选择起始单元格A1,写入字符串‘Hello’

print(‘-----写入单元格-----‘)

sht.range(‘a1‘).value = ‘Hello‘

time.sleep(3)

# 默认按行插入:A1:D1分别写入1,2,3,4

print(‘-----按行写入-----‘)

sht.range(‘a1‘).value = [1,2,3,4]

time.sleep(3)

# 等同于

# sht.range(‘a1:d1‘).value = [1,2,3,4]

# 按列插入: A2:A5分别写入5,6,7,8

# 你可能会想

sht.range(‘a2:a5‘).value = [5,6,7,8]

# 但是你会发现xlwings还是会按行处理的,上面一行等同于

# sht.range(‘a2‘).value = [5,6,7,8]

# 正确语法:

print(‘-----按列写入-----‘)

sht.range(‘a2‘).options(transpose=True).value = [5,6,7,8]

# 既然默认的是按行写入,我们就把它倒过来嘛(transpose),单词要打对,如果你打错单词,它不会报错,而会按默认的行来写入(别问我怎么知道的)

# 我们输入信息的时候往往不只是写入一行或一列,

# 多行输入就要用二维列表了:

sht.range(‘a6‘).expand(‘table‘).value = [[‘a‘,‘b‘,‘c‘],[‘d‘,‘e‘,‘f‘],[‘g‘,‘h‘,‘i‘]]

#B2到E5单元格全部赋同样的值

sht.range("B2","E5").value="bb"

# 说完了写入就该讲读取了,记住了写入,读取就简单了

# 读取A1:D4(直接填入单元格范围就行了)

print(‘-----读取单元格内容-----‘)

print("读取A1:D4: "+str(sht.range(‘a1:d4‘).value))

# 返回的值是列表形式,多行多列为二维列表,但有一点要注意,返回的数值默认是浮点数

a = sht.range(‘a1:d1‘).value

print("读取A1:D1: "+str(a))

for i in a:

print("读取单元格: "+str(i))

print("单元格数据类型: "+str(type(i)))

# 读取excel的第一列怎么做?

a = sht.range(‘a:a‘).value

print (a)

print(len(a))

# 你将会得到一个1048576个元素的列表,也就是空值也包含进去了,所以这种方法不行

# 思路:先计算单元格的行数(前提是连续的单元格)

rng = sht.range(‘a1‘).expand(‘table‘)

nrows = rng.rows.count

# 接着就可以按准确范围读取了

a = sht.range(f‘a1:a{nrows}‘).value

print("读取excel的第一列: "+str(a))

# 同理选取一行的数据也一样

ncols = rng.columns.count

#用切片

fst_col = sht[0,:ncols].value

print("读取excel的第一行: "+str(fst_col))

# 获取单元格字体,大小,颜色等属性

print(‘-----读取格式-----‘)

font_name = sht.range(‘A1‘).api.Font.Name# 获取字体名称

font_size = sht.range(‘A1‘).api.Font.Size# 获取字体大小

bold = sht.range(‘A1‘).api.Font.Bold# 获取是否加粗,True--加粗,False--未加粗

color = sht.range(‘A1‘).api.Font.Color# 获取字体颜色

print("A1单元格字体:"+font_name)

print("A1单元格大小:"+str(font_size))

print("A1单元格是否加粗:"+str(bold))

print("A1单元格颜色:"+str(color))

# 设置单元格字体,大小,颜色等属性

print(‘-----设置格式-----‘)

sht.range(‘A1‘).api.Font.Name = ‘Times New Roman‘# 设置字体为Times New Roman

sht.range(‘A1‘).api.Font.Size = 15# 设置字号为15

sht.range(‘A1‘).api.Font.Bold = True# 加粗

sht.range(‘A1‘).api.Font.Color = 0x0000ff# 设置为红色RGB(255,0,0)

font_name = sht.range(‘A1‘).api.Font.Name# 获取字体名称

font_size = sht.range(‘A1‘).api.Font.Size# 获取字体大小

bold = sht.range(‘A1‘).api.Font.Bold# 获取是否加粗,True--加粗,False--未加粗

color = sht.range(‘A1‘).api.Font.Color# 获取字体颜色

print("A1单元格字体:"+font_name)

print("A1单元格大小:"+str(font_size))

print("A1单元格是否加粗:"+str(bold))

print("A1单元格颜色:"+str(color))

# 设置背景色

print(‘-----设置背景色-----‘)

sht.range(‘A6:V10‘).color = (255,0,255)

time.sleep(3)

sht["A1048576"].end(‘up‘).row #最大行,根据单元格位置

print(sht["XFD1"].end(‘left‘).column) #最大列,根据单元格位置

# 清理内容,清理数据及格式

print(‘-----清理内容,清理数据及格式-----‘)

sht.range(‘A6:V10‘).clear()

# 删除行和列,插入行和列

print(‘-----按行写入-----‘)

sht.range(‘b2‘).value = ["papi","lucy","kunal","snoopy"]

print(‘-----按列写入-----‘)

sht.range(‘b3‘).options(transpose=True).value = ["year","month"]

print(‘-----删除行和列,插入行和列-----‘)

sht.api.rows(1).delete #删除首行

time.sleep(3)

sht.api.columns(1).delete# 删除首列

sht.api.columns(2).insert #插入列

sht.api.rows(2).insert #插入行

time.sleep(3)

# 合并单元格

print(‘-----合并单元格-----‘)

sht.range(‘A1:A5‘).api.merge()

# 保存工作簿

wb.save(‘example.xlsx‘)

# 退出工作簿(可省略)

wb.close()

# 退出Excel

app.quit()

#

原文:https://www.cnblogs.com/MasterMonkInTemple/p/11857487.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值