Excel VBA和Python都提供了进行字符串大小写转换的函数,可以将字符串所有字母转换为大写字母或小写字母,或者将首字母大写后面的字母小写。
设置字符串的大小写
【Excel VBA】
Excel VBA中用LCase函数或UCase函数将字符串中所有字母转换为小写或大写。示例文件的存放路径为Samples\ch06\Excel VBA\大小写.xlsm。
Sub Test()
strL = "Hello Dqexcel & VBA!"
Debug.Print LCase(strL)
Debug.Print UCase(strL)
End Sub
运行程序,在立即窗口中输出转换结果:
hello dqexcel & vba!
HELLO DQEXCEL & VBA!
也可以使用StrConv函数转换字符串的大小写,该函数的第1个参数指定字符串,第2个参数指定转换方式。示例文件的存放路径为Samples\ch06\Excel VBA\大小写.xlsm。
Sub Test2()
strL = "Hello Dqexcel & VBA!"
Debug.Print StrConv(strL, vbUpperCase) '全部大写
Debug.Print StrConv(strL, vbLowerCase) '全部小写
Debug.Print StrConv(strL, vbProperCase) '首字母大写,其他小写
End Sub
运行程序,在立即窗口中输出转换结果:
HELLO DQEXCEL & VBA!
hello dqexcel & vba!
Hello Dqexcel & Vba!
【Python】
Python提供了一些返回字符串长度和进行字符串字母大小写转换的函数和方法,如表6-6所示。
表6-6 字符串基本操作函数或方法
| 函数或方法名称 | 说 明 |
|---|---|
str.upper() |
字符串中的字母全部大写 |
str.lower() |
字符串中的字母全部小写 |
str.capitalize() |
首字母大写,其余字母小写 |
str.swapcase() |
交换字母大小写 |
下面是一些进行演示的例子。
>>> a = 'Hello Dqexcel & VBA!'
>>> a.upper() #全部大写
'HELLO DQEXCEL & VBA!'
>>> a.lower() #全部小写
'hello dqexcel & vba!'
>>> a.capitalize() #首字母大写
'Hello dqexcel & vba!'
>>> a.swapcase() #交换大小写
'hELLO dqexcel & vba!'
注意capitalize方法处理结果与Excel VBA的不同,它只将整句的首字母大写了,其他的字母小写。如果希望得到Excel VBA的处理结果,即将每个单词的首字母大写,其他字母小写,可以导入string包,利用包中的capwords函数进行操作。例如:
>>> import string
>>> a = 'Hello Dqexcel & VBA!'
>>> print(string.capwords(a,' ')) #首字母大写
显示结果:
Hello Dqexcel & Vba!
设置字符串的大小写示例-列数据统一大小写
图6-3中上表B列的姓名都是大写的,将它们转换为姓和名首字母都大写,其他字母小写的形式。
图6-3 将B列姓名转换为首字母大写其他字母小写的形式
【Excel VBA】
遍历B列每行数据,用StrConv函数将姓名转换为首字母大写其他字母小写的形式。示例文件的存放路径为Samples\ch06\Excel VBA\姓名首字母大写.xlsm。
Sub Test()
Dim intI As Integer
Dim intRows As Integer
Dim strName As String
'获取数据行数
intRows = ActiveSheet.Range("B1").End(xlDown).Row
'对每个名字进行操作
For intI = 2 To intRows
strName = ActiveSheet.Cells(intI, 2).Value
'首字母大写,其他字母小写
ActiveSheet.Cells(intI, 2).Value = StrConv(strName, vbProperCase)
Next
End Sub
运行程序,在工作表中第2列输出转换结果,如图6-3中下表所示。
【Python】
遍历B列每行数据,用string包中的capwords函数将姓名转换为首字母大写其他字母小写的形式。本示例的数据文件存放路径为Samples\ch06\Python\姓名首字母大写.xlsx,py文件保存在相同目录下,文件名为sam06-03.py。
import xlwings as xw #导入xlwings包
import string #导入string包
#从constants类中导入Direction
from xlwings.constants import Direction
import os #导入os包
#获取本py文件的当前路径
root = os.getcwd()
#创建Excel应用,可见,没有工作簿
app=xw.App(visible=True, add_book=False)
#打开数据文件,可写
bk=app.books.open(fullname=root+\
r'\姓名首字母大写.xlsx',read_only=False)
sht=bk.sheets(1) #获取第1个工作表
#工作表中第1列数据最大行号
rows=sht.api.Range('B1').End(Direction.xlDown).Row
n=1 #记录当前行号
#遍历数据区域的单元格
for rng in sht.range('B2:B'+str(rows)):
n+=1 #行号加1
#首字母大写,其他字母小写
sht.cells(n,2).value=string.capwords(rng.value)
运行脚本,在工作表中第2列输出转换结果,如图6-3中下表所示。