Python 在Excel单元格中以不同方式设置单个字符的格式

Python 在Excel单元格中以不同方式设置单个字符的格式,python,excel,vba,xlwt,Python,Excel,Vba,Xlwt,我在Excel 2013中有一列,包含字母和数字1、2、3和4(表示拼音发音和音调值)。它们的字体和格式都相同,但我只想将数字转换为上标。我似乎无法使用Excel内置的查找和替换功能将单元格中的单个字符替换为上标版本:整个单元格格式都会更改。我看到一个线程显然包含一个解决方案,但这是我第一次听说Python或xlwt 由于我从未使用过Python和xlwt,有人能给我一套基本的分步说明来安装这些实用程序、自定义脚本并运行它吗 样本: Li1Shi4 Qin3Fat1 Gon1Lin3 Den1C

我在Excel 2013中有一列,包含字母和数字1、2、3和4(表示拼音发音和音调值)。它们的字体和格式都相同,但我只想将数字转换为上标。我似乎无法使用Excel内置的查找和替换功能将单元格中的单个字符替换为上标版本:整个单元格格式都会更改。我看到一个线程显然包含一个解决方案,但这是我第一次听说Python或xlwt

由于我从未使用过Python和xlwt,有人能给我一套基本的分步说明来安装这些实用程序、自定义脚本并运行它吗

样本:

Li1Shi4
Qin3Fat1
Gon1Lin3
Den1Choi3
Xin1Nen3
来自其他线程的脚本:

import xlwt

wb = xlwt.Workbook()
ws = wb.add_sheet('Sheet1')

font0 = xlwt.easyfont('')
font1 = xlwt.easyfont('bold true')
font2 = xlwt.easyfont('color_index red')
style = xlwt.easyxf('font: color_index blue')

seg1 = ('bold', font1)
seg2 = ('red', font2)
seg3 = ('plain', font0)
seg4 = ('boldagain', font1)

ws.write_rich_text(2, 5, (seg1, seg2, seg3, seg4))
ws.write_rich_text(4, 1, ('xyz', seg2, seg3, '123'), style)

wb.save('rich_text.xls')
实现“查找数字并替换为上标”的语法是什么?它是字体还是样式?来自另一个线程的代码似乎手动输入了“seg1”、“seg2”、“seg3”等,或者我误解了代码


提前谢谢。我使用的是Windows 8,64位,Excel 2013。

我很无聊,而且有一种教学情绪,所以,这里有一个很长的“答案”,它也解释了一点关于你将来如何自己解决这些问题:)

我在单元格中键入了
abc123def
,并使用宏记录器录制了一个宏

如果你不知道正确的语法是什么,你应该从这里开始

在任何情况下,我选择了这个单元格的数字部分,然后右键单击,格式化单元格,将字体更改为上标

这是宏记录器给我的。这是很多代码。幸运的是,这是很多垃圾

Sub-Macro2()
使用ActiveCell.Characters(开始:=1,长度:=3)。Font'适用于前3个字符
.Name=“Calibri”
.FontStyle=“常规”
.尺寸=11
.Strikethrough=False
.Superscript=False
.Subscript=False
.OutlineFont=False
.Shadow=False
.Underline=xlUnderlineStyleNone
.ThemeColor=xlThemeColor灯1
.TintAndShade=0
.ThemeFont=xlThemeFontMinor
以
使用ActiveCell.Characters(开始:=4,长度:=3)。字体'应用于中间的3个字符
.Name=“Calibri”
.FontStyle=“常规”
.尺寸=11
.Strikethrough=False
.Superscript=True
.Subscript=False
.OutlineFont=False
.Shadow=False
.Underline=xlUnderlineStyleNone
.ThemeColor=xlThemeColor灯1
.TintAndShade=0
.ThemeFont=xlThemeFontMinor
以
使用ActiveCell.Characters(开始:=7,长度:=3)。Font'应用于最后3个字符
.Name=“Calibri”
.FontStyle=“常规”
.尺寸=11
.Strikethrough=False
.Superscript=False
.Subscript=False
.OutlineFont=False
.Shadow=False
.Underline=xlUnderlineStyleNone
.ThemeColor=xlThemeColor灯1
.TintAndShade=0
.ThemeFont=xlThemeFontMinor
以
端接头
它代表的是三个格式块:第一个是前3个未更改的字符,然后是我们应用上标的3个字符,然后是最后三个字符

几乎所有这些都是默认属性,因为我没有做其他更改,所以我可以将其修改为:

Sub-Macro2()
使用ActiveCell.Characters(开始=4,长度=3)。字体
.Superscript=False
以
端接头
现在我们可以看到这有两个重要部分。第一部分是如何指定要格式化的字符。这是通过引用单元格的
。字符来完成的:

ActiveCell.Characters(开始=4,长度=3)。Font
因此,我们可以看到,该宏引用字符串“abc123def”或“123”中位置4-6中的字符

下一个显而易见的部分是分配
.Font.Superscript
属性为
True

现在,您需要对其进行概括,以便可以在任何地方应用它。上述代码是对
Start
Length
参数进行“硬编码”的。我们需要让它充满活力。最简单的方法是一次输入一个字符,然后检查它是否为数字,如果是,则应用上标

Sub ApplySuperscriptToNumbers()
我想我会坚持多久
作为字符串的Dim str
变暗rng As范围
Dim cl As范围
“##通常应适用于任何连续的单元格“选择”
设置rng=范围(Selection.Address)
“##迭代此选择中的每个单元格
对于rng.单元格中的每个cl
str=cl.值
“##迭代单元格中的每个字符
对于i=1到Len(str)
“##检查此字符是否为数字
如果是数字(Mid(str,i,1)),那么
“##将上标应用于此1个字符
cl.Characters(起始:=i,长度:=1)。Font.Superscript=True
如果结束
下一个
下一个
端接头

如果您以前从未使用过python,您不想为此使用python。非常感谢。我喜欢学习新“东西”的挑战,但这对我来说是一个太大的挑战,我无法一下子独自承担。既然你已经向我展示了其中的逻辑和步骤,我想我明白了。也许可以修改它来做我想做的其他事情。非常感谢。