2013-10-06 99 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個字符,然後是3,我們應用對標,然後最後三個字符。

幾乎所有的這是默認屬性,因爲我做了沒有其他變化,這樣我就可以修改它這樣的:

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

現在我們可以看到有這兩個重要組成部分。第一部分是如何指定要格式化的字符。 「123」

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

所以我們可以看到,這個宏是指字在當前位置4-6字符串「abc123def」,或者:這是由refereing到一個細胞的.Characters完成。

接下來,明顯的部分是分配.Font.Superscript屬性是True

現在你想概括這個,以便你可以在任何地方應用它。上面的代碼是「硬編碼」的參數StartLength。我們需要使其變得動態。最簡單的方法是每次只輸入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

你是一個好人David Zemens。 +1 –

+1

@Doug Glancy「教一個人釣魚......」 –

+1

非常感謝你。我喜歡學習新「東西」的挑戰,但這對我自己一下子就能承受得了一點點太大的壓力。現在你已經向我展示了我所理解的邏輯和步驟。並且可能能夠修改它以用於我想要做的其他事情。非常感激。 – user2850117

相關問題