2013-10-06 1 views
-3

У меня есть столбец в Excel 2013, содержащий буквы и цифры 1,2,3 и 4 (представляющие произношения пиньинь и значения тона). Все они имеют одинаковый шрифт &, но я хотел бы преобразовать числа только в верхний индекс. Не похоже, что я могу использовать любую встроенную функцию поиска и замены Excel для замены одного символа в ячейке своей версией суперскрипта: весь формат ячейки изменяется. Я видел поток Format individual characters in a single Excel cell with python, который, по-видимому, имеет решение, но это был первый раз, когда я слышал о Python или xlwt.Форматировать отдельные символы по-разному в ячейке Excel

Поскольку я никогда не использовал 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.

+0

Если вы раньше не использовали python, вы не хотите использовать python для этого. –

ответ

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 

Теперь мы можем видеть, что есть две важные части к этому. Первая часть - , как указать, какие символы следует форматировать. Это делается путем refereing к клетке .Characters:

ActiveCell.Characters(Start:=4, Length:=3).Font 

Таким образом, мы можем видеть, что этот макрос относится к символам в positon 4-6 в строке «abc123def», или «123».

Следующей очевидной частью является присвоение .Font.Superscript объекта: True.

Теперь вы хотите обобщить это, чтобы вы могли применить его в любом месте. Вышеприведенный код является «жестко запрограммированным» аргументами Start и Length. Нам нужно сделать его динамичным. Самый простой способ сделать это - пропустить 1 символ за раз и проверить, является ли это числовым, если да, примените надстрочный индекс.

Sub ApplySuperscriptToNumbers() 
    Dim i As Long 
    Dim str As String 
    Dim rng As Range 
    Dim cl As Range 

    '## Generally should work on any contiguous "Selection" of cell(s) 
    Set rng = Range(Selection.Address) 
    '## Iterate over each cell in this selection 
    For Each cl In rng.Cells 
     str = cl.Value 
     '## Iterate over each character in the cell 
     For i = 1 To Len(str) 
      '## Check if this character is numeric 
      If IsNumeric(Mid(str, i, 1)) Then 
       '## Apply superscript to this 1 character 
       cl.Characters(Start:=i, Length:=1).Font.Superscript = True 
      End If 
     Next 
    Next 
End Sub 
+1

Ты хороший человек Дэвид Земенс. +1 –

+1

@Doug Glancy «научить человека ловить рыбу ...» –

+1

Спасибо ОЧЕНЬ МНОГО. Мне нравится изучать новые «вещи», но это было слишком большим для меня большим укусом, чтобы я сам взял себя на себя. Теперь, когда вы показали мне логику и шаги, я думаю, что понимаю. И мог бы изменить его для некоторых других вещей, которые я хотел сделать. Очень признателен. – user2850117

Смежные вопросы