Xlwings 操作
Xlwings 操作
Categories:
Xlwings 操作
创建工作簿,工作表
1import xlwings as xw
2
3# 创建一个新的App,并在新App中新建一个Book
4wb = xw.Book()
5wb.save('1.xlsx')
6wb.close()
7
8# 当前App下新建一个Book
9# visible参数控制创建文件时可见的属性
10app=xw.App(visible=False,add_book=False)
11wb=app.books.add()
12
13ws = wb.sheets.avtive
14ws1 = wb.sheets.add('新建工作表', after=ws)
15
16wb.save('1.xlsx')
17wb.close()
18#结束进程
19app.quit()
打开已有工作簿
1import xlwings as xw
2app=xw.App(visible=True,add_book=False)
3#不显示Excel消息框
4app.display_alerts=False
5#关闭屏幕更新,可加快宏的执行速度
6app.screen_updating=False
7
8wb=app.books.open('1.xlsx')
9# 输出打开的excle的绝对路径
10# print(wb.fullname)
11wb.save()
12wb.close()
13# 退出excel程序,
14app.quit()
15# 通过杀掉进程强制Excel app退出
16# app.kill()
17#
18# 以第一种方式创建Book时,打开文件的操作可如下
19wb = xw.Book('1.xlsx')
20
21app = xw.App(visible=False, add_book=False)
22app.display_alerts = False # 关闭一些提示信息,可以加快运行速度。 默认为 True。
23app.screen_updating = False # 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度。
24
25wb = app.books.open("./111.xlsx")
26ws = wb.sheets['ExportOrderList11954161104']
单元格写入
1# 在A1单元格写入值
2# 实例化一个工作表对象
3sheet1 = wb.sheets["sheet1"]
4# 或者
5# sheet1 =xw.books['1.xlsx'].sheets['sheet1']
6输出工作簿名称
7# print(sheet1.name)
8# 写入值
9sheet1.range('A1').value = 'python知识学堂'
10# 读值并打印
11print('value of A1:',sheet1.range('A1').value)
12# 清空单元格内容,如果A1中是图片,此方法没有效果
13sheet1.range('A1').clear()
14# 传入列表写入多行值
15sheet1.range('A1').value = [['a','b','c'],[1,2,3]]
16
17# 当然也可以将pandas的DataFrame数据写入
18import pandas as pd
19df = pd.DataFrame([[1,2], [3,4]], columns=['A', 'B'])
20sheet1.range('A1').value = df
21# 读取数据,输出类型为DataFrame
22sheet1.range('A1').options(pd.DataFrame, expand='table').value
单元格读取
1# 读取全部行列
2max_row, max_col = sht.used_range.last_cell.row, sht.used_range.last_cell.column
3lst = sht.range((1,1), (max_row, max_col)).value
4
5rng = sht.range('A1:D3')
6for cell in rng:
7 print(cell.value)
8
9# 读取行, 列(0起始)
10rng = sht[2:5, :3]
11for cell in rng:
12 print(cell.value)
单元格设置
1"""设置单元格大小"""
2ws.autofit() #在整个工作表上自动调整宽度,可传参数
3ws.autofit(axis='c') # 在整个工作表上自动调整列的宽度
4ws.autofit(axis='r') # 在整个工作表上自动调整行的宽度
5ws.autofit('c') # 在整个工作表上自动调整列的宽度
6ws.autofit('r') # 在整个工作表上自动调整行的宽度
7ws.range(1,4).column_width = 5 # 设置第4列 列宽。(1,4)为第1行第4列的单元格
8ws.range(1,4).row_height = 20 # 设置第1行 行高
边框线
1b3 = ws.range('b3')
2
3# Borders(9) 底部边框,LineStyle = 1 直线。
4b3.api.Borders(9).LineStyle = 1
5b3.api.Borders(9).Weight = 3 # 设置边框粗细。
6
7# Borders(7) 左边框,LineStyle = 2 虚线。
8b3.api.Borders(7).LineStyle = 2
9b3.api.Borders(7).Weight = 3
10
11# Borders(8) 顶部框,LineStyle = 5 双点划线。
12b3.api.Borders(8).LineStyle = 5
13b3.api.Borders(8).Weight = 3
14
15# Borders(10) 右边框,LineStyle = 4 点划线。
16b3.api.Borders(10).LineStyle = 4
17b3.api.Borders(10).Weight = 3
18
19# Borders(5) 单元格内从左上角 到 右下角。
20b3.api.Borders(5).LineStyle = 1
21b3.api.Borders(5).Weight = 3
22
23# Borders(6) 单元格内从左下角 到 右上角。
24b3.api.Borders(6).LineStyle = 1
25b3.api.Borders(6).Weight = 3
26
27"""如果是一个区域的单元格,内部边框设置如下"""
28# Borders(11) 内部垂直边线。
29b3.api.Borders(11).LineStyle = 1
30b3.api.Borders(11).Weight = 3
31
32# Borders(12) 内部水平边线。
33b3.api.Borders(12).LineStyle = 1
34b3.api.Borders(12).Weight = 3
使用公式
1# 使用公式
2ws.range('AB2').formula='=SUM(A1,A2)'
基础代码
1# coding=utf-8
2import xlwings as xw
3# 设置程序不可见运行
4app = xw.App(visible=False, add_book=False)
5
6# =============== 第一部分,创建并写入数据 =====================
7# 创建一个test2.xlsx表,并写入数据
8# wb = app.books.add()
9# ws = wb.sheets.active
10# arr = []
11# for col in range(1,4):
12# arr_temp = []
13# for row in range(1,4):
14# arr_temp.append(col*10+row)
15# arr.append(arr_temp)
16# ws.range('A1:B3').value=arr
17# wb.save('data/test2.xlsx')
18# wb.close()
19# app.quit()
20# exit()
21
22# ============== 第二部分,插入、删除行和列 ========================
23
24# 导入已存的demo表格
25load_wb = app.books.open('data/test2.xlsx')
26# # 打开活动的工作薄的活动工作簿,或者指定的工作簿
27load_ws = load_wb.sheets.active
28# load_ws = load_wb.sheets['Sheet']
29
30# 获取总行数(存在数据)
31rows = load_ws.api.UsedRange.Rows.count
32cols = load_ws.api.UsedRange.Columns.count
33# print('该表格总共有:'+str(rows)+' 行')
34# print('该表格总共有:'+str(cols)+' 列')
35# exit()
36
37
38# 1-①在第二行前插入2行(可理解为: 在第2-4行插入空白行)
39# load_ws.api.rows('2:4').insert
40# 1-②删除第2-4行
41# load_ws.api.rows('2:4').delete
42# 2-①在第二列前插入2列(这里处理的不是很好,其实是增加了对应区域的单元格,并未直接增加列)
43# load_ws.range('B1:C'+str(cols)).api.insert
44# 2-②删除第2-4列
45# load_ws.range('B1:C'+str(cols)).api.delete
46
47# ============== 第三部分,修改指定单元格的值 ========================
48# load_ws.range('A1').value = 'x11'
49
50# ============== 第四部分,合并单元格 ========================
51# load_ws.range('A1:A2').api.merge
52
53# ============== 第五部分,获取单元格横纵坐标index ========================
54rng=xw.Range('B2')
55# 返回当前格子的行值
56# print(rng.row)
57# 返回当前格子的列值
58# print(rng.column)
59# 返回和设置当前格子的高度和宽度
60print(rng.width)
61print(rng.height)
62rng.row_height=40
63rng.column_width=50
64# 指定单元格的高度和宽度自适应
65# rng.columns.autofit()
66rng.rows.autofit()
67print(rng.width)
68print(rng.height)
69# load_ws.range('A1:A2').api.height = 20
70
71
72# ============== 第六部分,其它 ========================
73# lst=load_ws.range('A1:A'+str(load_ws['A1048576'].end('up').row)).value #把excel单列值读取到列表中
74# lst1=load_ws.range('A1:C'+str(load_ws['A1048576'].end('up').row)).value # 把excel连续两个列的值读取到列表中
75# lst=load_ws.range('A1:A'+str(load_ws['A1048576'].end('up').row)).value #A列的值
76# lst2=load_ws.range('C1:C'+str(load_ws['A1048576'].end('up').row)).value#C列的值
77# lst3=list(zip(lst,lst2))#合并起来然后转为列表
78# dicta=dict(lst3)#列表转为字典
79
80# ============== 第七部分,Office操作文档 ========================
81# https://docs.microsoft.com/en-us/office/vba/api/excel.range(object)
82
83
84
85load_wb.save()
86load_wb.close()
87app.quit()
待续……