【関数・メソッド・プロパティ設定をつかう】

1 文字列の左端から一部の文字列を取得

2 文字列の右端から一部の文字列を取得

3 文字列の指定位置から指定文字分の文字列を取得

4 三つのブラケットスライス書式をつかう

5 文字列の指定位置から1文字を取得

6 文字列の文字数を取得

7 文字列のループで1文字ずつ分解

文字列の左端から一部の文字列を取得

 Pythonでは、ブラケット[]をつかうと、対象となる文字列から指定位置の文字を取り出すことができます。


 PythonのブラケットLeftスライス書式をつかうと、

 対象となる文字列左端から終了位置のインデックスまでをスライスした(切り取った)文字を取り出す

 ことができます。

Img7_1_11

 文字列の順番と先頭からの文字の位置を示すインデックスの関係は、次のようになります。

Img7_1_12

 ブラケットLeftスライス書式では、第2引数:終了位置のインデックスを入れると、

 戻り値として、対象となる文字列左端から指定した終了位置のインデックスまでの文字列を取り出す

 ことができます。


 xlwingsをつかいPythonで既存Excelを読みこみ操作するときは、

 Workbookファイルをメモリ上に読みこむと同時にWorkbookオブジェクトを生成、

 ( 『xlwingsをつかい既存Workbookを読みこみファイル保存』参照 )

 更に、sheetオブジェクトを生成して、そのsheetを操作します。

 Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。

 予め、ソースコードパネルに

import xlwings

wb = xlwings.Book('Workbook.xlsx')

st = wb.sheets['sheet']

 と記述しておきます。




(1) 取り出した文字列

 『セルを思いのままに動かそう』という文字列左端から1文字分の文字列を取り出して

 セルA2に格納してみます。


 予め、次のようなExcelシート『sheet1』を用意して、

 Excelブック名を『WkBook1.xlsx』として保存します。

Img7_1_13

 この『WkBook1.xlsx』の『sheet1』を読みこみます。

 ソースコードパネルを

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet1']

 と書きかえます。


 『セルを思いのままに動かそう』という文字列左端から1文字分の文字列を取り出して

 セルA2に格納します。

 ブラケットLeftスライス書式をつかってみます。

 左辺には、戻り値として st.range('A2').value

 右辺には、対象となる文字列:Stringに『”セルを思いのままに動かそう”』

       第2引数:終了位置のインデックスに『1』

 を当てはめれば良いのだから、

 st.range('A2').value = "セルを思いのままに動かそう"[:1]

 と記述します。

 【ソースコードパネル】

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet1']

st.range('A2').value = "セルを思いのままに動かそう"[:1]

 それでは、そのPythonプログラムを実行してみましょう。


Img7_1_14

 『セルを思いのままに動かそう』の左端から1文字分の文字列が取り出されて

 セルA2に『セ』と書きこまれました。


演習(1):『セルを思いのままに動かそう』という文字列の

       左端から2文字分の文字列を取り出してセルA2に格納

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet1']

st.range('A2').value = "セルを思いのままに動かそう"[:2]




(2) 対象文字列-取り出した文字列

 先ほどは、対象となる文字列に『セルを思いのままに動かそう

 という文字列を当てはめてみましたが、

 今度は、対象となる文字列セルの値を当てはめてみます。

 セルA2から取得した文字列左端から2文字分の文字列を取り出して

 セルB2に格納してみます。


 予め、次のようなExcelシート『sheet2』を用意して、

 Excelブック名を『WkBook1.xlsx』として保存します。

Img7_1_15

 この『WkBook1.xlsx』の『sheet2』を読みこみます。

 ソースコードパネルを

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet2']

 と書きかえます。


 セルA2から取得した文字列左端から2文字分の文字列を取り出して

 セルB2に格納します。

 今度も、ブラケットLeftスライス書式をつかってみます。

 左辺には、戻り値として st.range('B2').value

 右辺には、対象となる文字列:StringにセルA2の値

       第2引数:終了位置のインデックスに『2』

 を当てはめれば良いのだから、

 st.range('B2').value = st.range('A2').value[:2]

 と記述します。

 【ソースコードパネル】

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet2']

st.range('B2').value = st.range('A2').value[:2]

 それでは、そのPythonプログラムを実行してみましょう。


Img7_1_16

 『セルを思いのままに動かそう』の左端から2文字分の文字列が取り出されて

 セルB2に『セル』と書きこまれました。


演習(2):セルA2から取得した文字列の

       左端から3文字分の文字列を取り出してセルB2に格納

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet2']

st.range('B2').value = st.range('A2').value[:3]




(3) 対象文字列-取り出す文字数-取り出した文字列

 今度は、ブラケットLeftスライス書式第2引数:終了位置のインデックスにセルの値

 当てはめてみます。

 セルA2から取得した文字列左端からセルC2より取得した終了位置までの文字列を取り出して

 セルD2に格納してみます。


 予め、次のようなExcelシート『sheet3』を用意して、

 Excelブック名を『WkBook1.xlsx』として保存します。

Img7_1_17

 この『WkBook1.xlsx』の『sheet3』を読みこみます。

 ソースコードパネルを

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet3']

 と書きかえます。


 セルA2から取得した文字列左端からセルC2より取得した終了位置までの文字列を取り出して

 セルD2に格納します。

 今度も、ブラケットLeftスライス書式をつかってみます。

 左辺には、戻り値として st.range('D2').value

 右辺には、対象となる文字列:StringにセルA2の値

       第2引数:終了位置のインデックスにst.range('C2').value

 を当てはめれば良いのだから、

 st.range('D2').value = st.range('A2').value[:st.range('C2').value]

 と記述します。

 【ソースコードパネル】

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet3']

st.range('B2').value = st.range('A2').value[:st.range('C2').value]

 それでは、そのPythonプログラムを実行してみます。


 ターミナルパネルに、

File "c:/Python_Excel_PG/Python_Excel_xlwings/Python_Excel713ERR.py", line 4, in <module>

 st.range('D2').value = st.range('A2').value[:st.range('C2').value]

TypeError: slice indices must be integers or None or have an __index__ method

 と表示されました。

 これは、『Pythonファイルの4行目、

 st.range('D2').value = st.range('A2').value[:st.range('C2').value]

 型エラー:『slice indicesは、integers or None or have an __index__ method でなければならない。』

 という意味です。

 つまり、スライス書式のインデックスは数値型(等)でなければならないということです。

 今回、スライス書式のインデックスは終了位置のインデックス:st.range('C2').valueです。

 このst.range('C2').value数値型でなければならないのに

 文字列型の値を指定したために型エラーが生じているのです。


 それでは、型エラーを回避するにはどうしたら良いのでしょうか。

 文字列型のセルの値を数値型の値に変換したら、終了位置のインデックスとして数値型を指定する

 ことになるため、型エラーを回避できます。


 それでは、文字列を数値に変換するにはどうしたら良いのでしょうか。

 文字列を数値に変換するときは、int関数をつかいます

Img7_1_20

 int関数をつかい文字列型のセルの値『st.range('C2').value』を数値型の値に変換するときは、

 『int(st.range('C2').value)』と記述します。


 ソースコードパネルの4行目を書きかえます。

 ソースコードパネルは、

import xlwings

wb = xlwings.Book('WkBook1.xlsx')

st = wb.sheets['sheet3']

st.range('D2').value = st.range('A2').value[:int(st.range('C2').value)]

 となります。

 それでは、そのPythonプログラムを実行してみましょう。


Img7_1_19

 『セルを思いのままに動かそう』の左端から3文字分の文字列が取り出されて

 セルD2に『セルを』と書きこまれました。



 このように、ブラケットLeftスライス書式をつかうと、

 対象となる文字列左端から終了位置のインデックスまでをスライスした(切り取った)文字を取り出す

 ことができます。