在Excel单元格中以不同方式格式化单个字符

时间:2013-10-06 01:57:12

标签: python excel vba xlwt

Excel 2013中有一列包含字母和数字1,2,3和4(表示拼音发音和音调值)。它们都是相同的字体和格式,但我想将数字转换为上标。似乎我不能使用Excel的任何内置查找和替换功能来替换单元格中的单个字符及其上标版本:整个单元格格式都会发生变化。我看到了一个显然有解决方案的线程Format individual characters in a single Excel cell with python,但这是我第一次听说过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。

1 个答案:

答案 0 :(得分:2)

我很无聊并且处于一种教学氛围中,所以,这里有一个很长的“答案”,它也解释了一下你将来如何为自己解决这些问题:)

我将abc123def键入单元格,并使用宏录制器录制宏。

如果您不知道正确的语法是什么,那么您应该始终启动。

无论如何,我选择了这个单元格的数字部分,然后右键单击,格式化单元格,将字体更改为上标。

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

Sub Macro2()
    With ActiveCell.Characters(Start:=1, Length:=3).Font  'Applies to the first 3 characters
        .Name = "Calibri"
        .FontStyle = "Regular"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With ActiveCell.Characters(Start:=4, Length:=3).Font 'Applies to the middle 3 characters
        .Name = "Calibri"
        .FontStyle = "Regular"
        .Size = 11
        .Strikethrough = False
        .Superscript = True
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With ActiveCell.Characters(Start:=7, Length:=3).Font 'Applies to the last 3 characters
        .Name = "Calibri"
        .FontStyle = "Regular"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
End Sub

它代表的是三个格式化块:第一个是未更改的前3个字符,然后是我们应用上标的3个字符,然后是最后三个字符。

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

Sub Macro2()
    With ActiveCell.Characters(Start:=4, Length:=3).Font
        .Superscript = False
    End With
End Sub

现在我们可以看到这有两个重要的部分。第一部分是如何指定要格式化的字符。这是通过引用单元格的.Characters

来完成的
ActiveCell.Characters(Start:=4, Length:=3).Font

所以我们可以看到这个宏指的是字符串“abc123def”或“123”中位置4-6中的字符。

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

现在您想要概括它,以便您可以在任何地方应用它。上面的代码是“{1}}和Start参数的”硬编码“。我们需要让它变得动态。最简单的方法是一次输入1个字符,并检查它是否为数字,如果是,则应用上标。

Length