Excel Python之Xlwings学习笔记

Xlwings学习笔记

  • 一、Python基本
    • 1.1 延时函数
    • 1.2 代码换行
      • 1.2.1 反斜杠 \ ——不影响输出结果的代码换行
      • 1.2.2 三引号 ''' ''' —— 令字符串的打印结果换行
    • 1.3 判断Excel文件是否已经打开
    • 1.4 循环函数
      • 1.4.1 for循环
      • 1.4.2 While 循环
  • 二、Xlwings
    • 2.1 导入xlwings模块
    • 2.2 打开、保存、关闭Excel文档
    • 2.3 在多个工作簿或sheet之间工作
      • 2.3.1 工作簿/sheet/单元格 引用
      • 2.3.2 读、写单元格值
    • 2.4 格式美化
      • 2.4.1 引用最后一行/列
      • 2.4.2 设置字体格式
      • 2.4.3 设置边框样式
  • 三、小结

一、Python基本

1.1 延时函数

import time
time.sleep(10) #延时10秒

1.2 代码换行

1.2.1 反斜杠 \ ——不影响输出结果的代码换行

同时适用于字符串和代码

示例1

a = b + c + d + \
e + f + g + h

示例2.a

print('a b c d e f'	\
		'g h i j k')

运行结果:

a b c d e fg h i j k

示例2.b

print('a b c d e f	\
		g h i j k')

运行结果:

a b c d e f g h i j k

(注意 f 和 g 之间有无空格的区别)

1.2.2 三引号 ‘’’ ‘’’ —— 令字符串的打印结果换行

仅适用于字符串

print(''' a b c d e
f g h i j''')

运行结果:

a b c d e
f g h i j

注意:使用时须小心行尾的反斜杠会导致打印结果换行失败

print ('''a b c d e \
f g h i j''')

运行结果

a b c d e f g h i j

Note:
1、在字符串前加 r 也可以令换行符、缩进符等失效

print (r"a\ta\na")

运行结果:

a\ta\na

print ("a\ta\n")

运行结果:

a a
a

1.3 判断Excel文件是否已经打开

运行xlwings打开excel文件时,如果该文件已经打开则会报错

方法一、通过临时文件判断Excel文档的占用情况。
(以下方法仅限于本地文件,对Onedrive等网络位置上的文档无效。)

import os
import xlwings as xw
FilePath = 'C:\\Documents\\'
FileName = 'XXXX.xlsx'
def excel_is_open(file_path,file_name):
    temp_file = file_path + '~$' + file_name
    if os.path.exists(temp_file) : return True
    else : return False
if not excel_is_open(FilePath,FileName):
    xw.books.open(FilePath+FileName)

方法二、通过捕获异常以避免程序停止运行

from pythoncom import com_error
import xlwings as xw
FilePath = 'C:\\Documents\\'
FileName = 'XXXX.xlsx'
com_error_msg_01 = "Verify that the file has not been corrupted and that the file extension matches the format of the file"
com_error_msg_02 = r"The file name or path does not exist.\n• The file is being used by another program"
def open_excel(file_path,file_name):    
    try:
        Excel.books.open(file_path + file_name)
    except com_error as error:
        if( com_error_msg_01 or com_error_msg_02 in str(error)):
            print(file_name+'已打开!')
        else:print("未知错误")
open_excel(FilePath , FileName)

1.4 循环函数

1.4.1 for循环

1.4.1.a 只定义循环终止位置:从0开始,(终止位置-1)处停止运行

for i in range(2):
	print(i)

运行结果

0
1

1.4.1.b 定义循环开始和终止位置:从开始位置开始,(终止位置-1)处停止运行

for i in range(1,3):
	print(i)

运行结果

1
2

1.4.1.c 定义循环开始、终止位置及步长:从开始位置开始,间隔步长,(终止位置-1)处停止运行

for i in range(1,5,2):
	print(i)

运行结果

1
3

Note: range(开始位置,终止位置,步长)

1.4.2 While 循环

条件满足,运行一次后再判断条件是否满足,不满足则结束循环,否则继续运行。

i=0
while i <= 3:    
    print('i = ' + str(i))    
    i+=1

运行结果

i = 0
i = 1
i = 2
i = 3

二、Xlwings

2.1 导入xlwings模块

注:xw, Excel 均为自定义名称,可以按喜好更改

# 导入xlwings模块,打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
import xlwings as xw 

#  以下用于更改默认设置
#  xw.App(visible=True,add_book=False)定义excel程序打开时是否可见,是否在打开后新建一个workbook
Excel=xw.App(visible=True,add_book=False)
#  是否开启提示,如保存提示等。
Excel.display_alerts=False
#  是否更新显示变动内容,若设为False则看不到文档的打开或变化
Excel.screen_updating=True

2.2 打开、保存、关闭Excel文档

#  打开Excel及指定路径下的工作簿
filepath=r'd:/test1.xlsx'
wb=Excel.books.open(filepath)
#  保存工作簿
wb.save()
#  新建并打开Excel文档
wb=app.books.add()
#  工作簿另存为
save2filepath=r'd:/test2.xlsx'
wb.save(save2filepath)
#  关闭工作簿
wb.close()
#  关闭所有Excel程序
Excel.quit()

2.3 在多个工作簿或sheet之间工作

2.3.1 工作簿/sheet/单元格 引用

#引用已打开的工作簿
book1=xw.books['test1.xlsx']
book2=xw.books[1] #按打开顺序从0开始索引,此处为引用打开的第二个工作簿
#  引用sheet
sheet1=book1.sheets['sheet1']
sheet2=book2.sheets[0]#按从左向右排列顺序从0开始索引,此处为引用工作簿最左侧的sheet
#  引用单元格
Cell1=sheet1.range('A1')
Cell2=sheet2.cells(1,1)#单元格行/列均从1开始索引,此处为一行一列即单元格”A1“

2.3.2 读、写单元格值

#  读、写单元格值
sheet1.range('A2').value=Cell2.value
sheet2.cells(1,2).value=Cell1.value
#  读、写同行多个单元格值
sheet1.range('A3').value=sheet2.range('A2:B2').value
#  读、写同列多个单元格值
sheet2.cells(1,3).options(transpose=True).value=sheet1.range((2,1),(2,2)).value
#  读、写二维表多个单元格值
sheet1['C1'].options(expand='table').value = sheet2['A1:C2'].value
sheet2[2,0].options(expand='table').value =    \ #指第三行第一列即A3
sheet1[:3,:2].value     #指从第一行第一列到第三行第二列范围内的单元格即A1~C2

Note

若定义
import xlwings as xw
book=xw.books[“XXXX.xlsx”]
sheet=book.sheets[‘Sheet Name’]
++++++++++++++++++++++++++++++++++++++++++++++++++++
那么,以下几种表达方式都可以用于引用单元格“A3”(即第3行第1列)

  • sheet.range( ‘A3’ )
  • sheet.cells(3,1)
  • sheet[2,0]
  • sheet[ ‘A3’ ]

此外,可以用以下几种方式引用以A2(第2行第1列)和C6(第6行第3列)两个单元格为对角的矩形区域内所有单元格

  • sheet.range( ‘A2:C6’ )
  • sheet.range( (2,1) , (6,3) )
  • sheet[1:6,:3]
    Note: 冒号前表示范围始(不包括),冒号后为范围末(包括)。冒号前若为行/列首则填0(可省略不写)

2.4 格式美化

2.4.1 引用最后一行/列

import xlwings as xw 
book=xw.books["XXXX.xlsx"]
sheet=book.sheets['Sheet Name']
UsedRange = sheet1.used_range
LastRow = UsedRange.last_cell.row
LastCol = UsedRange.last_cell.column

2.4.2 设置字体格式

Range = sheet[:LastRow,:LastCol]
Range.api.color = (255,255,255)	#背景色RGB
Range.api.Font.Name = "Arial"	#设置字体为Arial
Range.api.Font.ColorIndex = 3	#设置字体颜色,颜色表详见图“ColorIndex 颜色索引”
#Range.api.Font.Color = 0x00ff00 #设置字体颜色 十六进制数表示RGB,低2位表红色,中2位表绿色,高2位表蓝色
Range.api.Fonts.Size = 24        # 字号。
Range.api.Fonts.Bold = True      # 粗体。
Range.api.HorizontalAlignment = -4108   # 水平位置:-4108 居中 -4131 靠左  -4152 靠右。
Range.api.VerticalAlignment = -4130   	# 垂直位置:-4108 居中 -4160 靠上  -4107 靠下 -4130 自动换行对齐。
Range.api.NumberFormat = "0"      # 数字格式,详见 NumberFormat-Microsoft 帮助。

了解全部的数字格式代码参考NumberFormat-Microsoft帮助

ColorIndex 颜色索引
Excel Python之Xlwings学习笔记_第1张图片

2.4.3 设置边框样式

import xlwings as xw 
book=xw.books["XXXX.xlsx"]
sheet=book.sheets['Sheet Name']
Range=sheet[:5,:5]
Range.api.Border(11).LineStyle = -4115 #设置前5行5列的表格内部全部垂直边框为虚线
#详见表‘引用边框 Border’ 及 表‘指定边框的线条样式 Line Style’
for i in range(7,11) #循环设置上下左右表框,使外表框加粗
	Range.api.Borders(i).Weight = 4 #边框线粗,1最细,4最粗

引用边框 Border

Border(i) 名称
Border(5) 从区域中每个单元格的左上角到右下角的边框。
Border(6) 从区域中每个单元格的左下角到右上角的边框。
Border(7) 区域左边缘的边框。
Border(8) 区域顶部的边框。
Border(9) 区域底部的边框。
Border(10) 区域右边缘的边框。
Border(11) 区域中所有单元格的垂直边框(区域以外的边框除外)。
Border(12) 区域中所有单元格的水平边框(区域以外的边框除外)。

指定边框的线条样式 Line Style

说明
1 实线。
-4115 虚线。
4 点划相间线。
5 划线后跟两个点。
-4118 点式线。
-4119 双线。
-4142 无线。
13 倾斜的划线。

三、小结

Xlwings用于批量读、写Excel文档,规范格式。相较于Excel VBA,代码量可以大幅减少,运行速度有所提升。缺点是电脑里必须要有Python Xlwings环境才能运行。 (可以通过导出.exe可执行文件,在未安装Python的电脑上运行。)

你可能感兴趣的:(Python,Excel,Office,excel,python,xlwings)