前の関連記事:Calc(60)セルの内容をクリップボードにコピーするマクロ
文字種を変換するマクロ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
import unohelper from com.sun.star.i18n.TransliterationModulesNew import HALFWIDTH_FULLWIDTH, FULLWIDTH_HALFWIDTH, KATAKANA_HIRAGANA, HIRAGANA_KATAKANA, NumToCharKanjiShort_ja_JP, TextToNumLower_zh_CN, smallToLarge_ja_JP, largeToSmall_ja_JP # enum from com.sun.star.lang import Locale # Struct from com.sun.star.util import NumberFormat # 定数 def halfwidth_fullwidth(): # 半角を全角に変換。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((HALFWIDTH_FULLWIDTH,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 selection[ 0 , 0 ].setString(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。 def fullwidth_halfwidth(): # 全角を半角に変換。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((FULLWIDTH_HALFWIDTH,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 selection[ 0 , 0 ].setString(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。 def katakana_hiragana(): # かたかなをひらがなに変換。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((KATAKANA_HIRAGANA,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 selection[ 0 , 0 ].setString(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。 def hiragana_katakana(): # ひらがなをカタカナに変換。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((HIRAGANA_KATAKANA,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 selection[ 0 , 0 ].setString(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。 def numtocharkanjishort_ja_jp(): # アラビア数字を漢数字に変換。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((NumToCharKanjiShort_ja_JP,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 selection[ 0 , 0 ].setString(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。 def texttonumlower_zh_cn(): # 漢数字をアラビア数字に変換。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((TextToNumLower_zh_CN,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 newtxt = transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ] if newtxt.isdigit(): # 変換結果が数字のみの時。 selection[ 0 , 0 ].setValue(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。setString()で代入すると書式を数値に変更しても文字列のままになる。 numberformats = doc.getNumberFormats() formatkey = numberformats.getStandardFormat(NumberFormat.NUMBER, Locale()) # 数値の標準書式のキーを取得。 selection[ 0 , 0 ].setPropertyValue( "NumberFormat" , formatkey) # セルの書式を設定。 def smalltolarge_ja_jp(): # ゃゅょっぁぃぅぇぉ、などを大きくする。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((smallToLarge_ja_JP,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 selection[ 0 , 0 ].setString(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。 def largetosmall_ja_jp(): # やゆよ、などを小さくするはずだが動かない。 doc = XSCRIPTCONTEXT.getDocument() # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 transliteration = smgr.createInstanceWithContext( "com.sun.star.i18n.Transliteration" , ctx) # Transliteration selection = doc.getCurrentSelection() # 選択範囲を取得。 txt = selection[ 0 , 0 ].getString() # 選択範囲の左上端のセルの内容を文字列として取得する。 transliteration.loadModuleNew((largeToSmall_ja_JP,), Locale(Language = "ja" , Country = "JP" )) # 変換モジュールをロード。 selection[ 0 , 0 ].setString(transliteration.transliterate(txt, 0 , len (txt), [])[ 0 ]) # 変換して選択セルに代入。 <span style="font-family: "meiryo";"><span style="white-space: normal;"> < / span>< / span> |
halfwidth_fullwidth 半角を全角に変換する
fullwidth_halfwidth 全角を半角に変換する
katakana_hiragana かたかなをひらがなに変換する
hiragana_katakana ひらがなをカタカナに変換する
numtocharkanjishort_ja_jp 数字を漢字に変換する
texttonumlower_zh_cn 漢字を数字に変換する
smalltolarge_ja_jp ゃゅょっぁぃぅぇぉ、などを大きくする
largetosmall_ja_jp やゆよ、などを小さくする(smalltolarge_ja_jpと同じになる)
これら8つのマクロを含んでいます。
それぞれ選択しているセルの内容を変換します。
texttonumlower_zh_cn以外はenum TransliterationModulesNewを変えているだけです。
texttonumlower_zh_cnは変換後の文字列が数字のみの時は数値としてセルに代入(setValue())して、書式を数値の標準書式に変更しています。
setString()で代入すると書式を数値に変更しても文字列のままでした。
他のものはセルの書式が文字列に変化していました。
largetosmall_ja_jpは、やゆよあいうえお、など小さくできる文字を小さくするはずですがそうはならず、smalltolarge_ja_jpと同じ挙動になりました(バグ?)。
enum TransliterationModulesNewにはUPPERCASE_LOWERCASEとLOWERCASE_UPPERCASEはそれぞれPythonのstr.lower()、str.upper()があるので使わなくて済みそうです。
参考にしたサイト
OOoBasic/Generic/Transliteration - ...?
文字変換の解説。
0 件のコメント:
コメントを投稿