输出数字、字符串和日期等数据时,常常要求按照指定的格式进行输出。本节介绍字符串格式化输出的函数及其使用方法。
实现字符串的格式化输出
【Excel VBA】
Excel VBA中使用Format函数对字符串进行格式化输出。Format函数的语法格式为:
strA=Format(strString,strFormat)
其中,strString是给定的字符串,strFormat是指定输出格式的字符串,参见表6-4,strA为格式化后的字符串。
表6-4 Format函数的格式
| 格 式 | 说 明 |
|---|---|
| General Number | 普通数字,去掉千位分隔号和无效的0 |
| Currency | 货币类型,添加千位分隔号和货币符号,保留两位小数点 |
| Fixed | 带两位小数的数字 |
| Standard | 带千位分隔号和两位小数 |
| Percent | 带两位小数点的百分数 |
| Scientific | 科学记数法 |
| Yes/No | 数值为非0数字时返回Yes,否则返回No |
| True/False | 数值为非0数字时返回True,否则返回False |
| ""或省略 | 返回原字符串,但去除小数点前后的无效0 |
| 0 | 占位格式化,不足位时补足0 |
| # | 占位格式化,不足位时不补足0 |
| % | 转化为百分数,%代表乘以100 |
| \ | 强制显示某字符 |
| ; | 分段显示不同格式 |
| General Date | 基本日期和时间类型,例如2021/5/23 11:05:12 |
| Long Date | 操作系统定义的长日期,例如2021年5月23日 |
| Medium Date | 操作系统定义的中日期,例如21-05-23 |
| Short Date | 操作系统定义的短日期,例如2021-5-23 |
| Long Time | 操作系统定义的长时间,例如11:05:12 |
| Medium Time | 带AM/PM(上午/下午)的12小时制,不带秒,例如11:05 上午 |
| Short Time | 24时制的时间,不带秒,例如11:05 |
| c | 格式化为国标的日期和时间,例如2021/5/23 11:05:12 |
| y | 一年中的第几天(1-366),例如100 |
| yy | 两位数的年份(00-99) ,例如21 |
| yyy | 上面的yy与y结合在一起,例如21100 |
| yyyy | 四位数的年份(0100-9999) ,例如2021 |
| d | 一个月中的第几天(1-31),例如2 |
| dd | 与d相同,但不足两位时补足 0,例如02 |
| ddd | 三个英文字母表示的星期几,例如"Sat" |
| dddd | 英文表示的星期几,例如"Saturday" |
| ddddd | 标准日期,例如2021/5/23 |
| dddddd | 长日期,例如2021年5月23日 |
| w | 一个星期中的第几天(始于周日,周日为1),例如6 |
| ww | 一年中的第几周,例如12 |
| m | 月份数(当用于时间时,也可以表时为分钟) ,例如5 |
| mm | 当小于10时带前导0的月数(当用于时间时,也可以表示为两位数的分钟数),例如05 |
| mmm | 三个英文字母表示的月份数,例如"May" |
| mmmm | 英文表示的月份数,例如"May" |
| h, hh | 小时数(0-23),例如3, 03 |
| n, nn | 分钟数(0-59),例如9, 09 |
| s, ss | 秒数(0-59),例如5,05 |
下面结合一些例子进行演示,格式参数请参照表2- 进行查阅,不多说明。示例文件的存放路径为Samples\ch06\Excel VBA\格式化输出.xlsm。
Sub Test()
Debug.Print Format("7,294,269.60", "General Number")
Debug.Print Format("12.69", "0.0000")
Debug.Print Format("12.69", "#.####")
Debug.Print Format("1.269", "0.00%")
Debug.Print Format("12345.6098", "Currency")
Debug.Print Format("35267", "Fixed")
Debug.Print Format("7294269.609", "Standard")
Debug.Print Format("0.30", "Percent")
Debug.Print Format("0", "Yes/No")
Debug.Print Format("2021-5-20 13:14:22", "General Date")
Debug.Print Format("2021-5-20 13:14:22", "Short Date")
Debug.Print Format("2021-5-20 13:14:22", "Long Time")
End Sub
运行程序,在立即窗口中输出结果:
7294269.6
12.6900
12.69
126.90%
¥12,345.61
35267.00
7,294,269.61
30.00%
No
2021/5/20 13:14:22
2021/5/20
13:14:22
【Python】
用print函数输出字符串时,可以指定字符串的输出格式。其基本格式为:
print('占位符1 占位符2' % (字符串1,字符串2))
其中,占位符用于表示该位置字符串的内容和格式。各占位符位置上字符串的内容按先后顺序取百分号后面小括号里面的字符串。常见的字符串占位符如表6-5所示。
表6-5 用于字符串格式化的占位符
| 格 式 | 说 明 |
|---|---|
| %c | 格式化字符及其ASCII码 |
| %s | 格式化字符串 |
| %d | 格式化整数 |
| %o | 格式化八进制数 |
| %x | 格式化十六进制数 |
| %X | 格式化十六进制数(大写) |
| %f | 格式化浮点数字,可指定小数点后的精度 |
| %e | 用科学计数法格式化浮点数 |
| %E | 作用同%e,用科学计数法格式化浮点数 |
| %g | 自动选择%f或%e |
| %G | 自动选择%F或%E |
| %p | 用十六进制数格式化变量的地址 |
下面结合实例说明字符串占位符的使用。
>>> print('大谦Excel %s' % 'dqexcel')
大谦Excel dqexcel
>>> print('%s %s %d' % ('hello', 'dqexcel',2021))
hello dqexcel 2021
可以指定显示数字的符号、宽度和数字精度。下面指定按浮点数输出圆周率的值,数字宽度为10个字符,小数位为5位,显示正号。
>>> print('%+10.5f' % 3.1415927)
+3.14159
结果显示,小数点算1个字符,如果整个数字的宽度不足10个字符,数字前面用空格补齐。如果显示负号,则在数字末尾用空格补齐。不足位也可以用0补齐,如:
>>> print('%010.5f' % 3.1415927)
0003.14159
除了使用占位符对字符串进行格式化,还可以用format函数来实现。该函数用大括号{}标明被替换的字符串,与%占位符的类似。使用format函数进行格式化时更灵活,更方便。
下面是使用format函数进行字符串格式化输出的一些例子。{}中为空时,按先后顺序用format函数参数指定的字符串进行替换。
>>> print('不指定顺序:{} {}'.format('hello','dqexcel'))
不指定顺序:hello dqexcel
在{}中用整数指定占位位置上显示什么字符串,该整数表示format函数参数指定的字符串出现的先后顺序,基数为0。
>>> print('指定顺序:{1} {0}'.format('hello','dqexcel'))
指定顺序:dqexcel hello
有重复的情况。
>>> print('{0} {1} {0} {1}'.format('hello','dqexcel'))
hello dqexcel hello dqexcel
显示为浮点数并指定小数位数:
>>> print('保留两位小数:{:.2f}'.format(3.1415))
保留两位小数:3.14
字符串显示为百分比格式,指定小数位数:
>>> print('{:.3%}'.format(0.12))
12.000%
用参数名称进行匹配:
>>> print('{name},{age}'.format(age=30,name='张三'))
张三,30
字符串格式化输出示例-数字保留4位小数
对于图6-2内工作表中B列的数据,将数字保留4位小数,结果放在D列。
图6-2 B列数据保留4位小数
【Excel VBA】
遍历工作表B列每个数据,用Format函数保留4位小数输出。示例文件的存放路径为Samples\ch06\Excel VBA\数字保留4位小数.xlsm。
Sub Test()
Dim intI As Integer
Dim intRows As Integer
Dim sngV As Single
'获取数据行数
intRows = ActiveSheet.Range("B1").End(xlDown).Row
'对每个数据进行操作
For intI = 1 To intRows
sngV = ActiveSheet.Cells(intI, 2).Value
'保留4位小数
ActiveSheet.Cells(intI, 4).Value = Format(sngV, "0.0000")
Next
End Sub
运行程序,在工作表中第4列输出结果,如图6-2所示。
【Python】
遍历工作表B列每个数据,用format函数保留4位小数输出。本示例的数据文件存放路径为Samples\ch06\Python\数字保留4位小数.xlsx,py文件保存在相同目录下,文件名为sam06-02.py。
import xlwings as xw #导入xlwings包
#从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'\数字保留4位小数.xlsx',read_only=False)
sht=bk.sheets(1) #获取第1个工作表
#工作表中第2列数据最大行号
rows=sht.api.Range('B1').End(Direction.xlDown).Row
n=0 #记录当前行号
#遍历数据区域的单元格
for rng in sht.range('B1:B'+str(rows)):
n+=1 #行号加1
#保留4位小数,在第4列输出
sht.cells(n,4).value='{:.4f}'.format(rng.value)
运行脚本,在工作表中第4列输出结果,如图6-2所示。