なんとなくコマンド 第64回 Pythonでエクセルファイルのデータを読み出す(2)
マイナビニュース2024年4月1日(月)16時21分
今回も前回に続いてエクセルファイルのデータを読み出します。前回同様に処理するエクセルデータと実行するPythonスクリプトは同じフォルダ(デスクトップ上にあるsampleフォルダ)にあるものとします。
今回使用するエクセルのファイルは前回と若干異なり、2枚目のシートが追加されています。
○複数あるワークシートから特定のセルを読み出す
エクセルでは複数のワークシートが含まれる場合があります。このため、特定のシートにある特定のセルを読み出す必要が出てきます。ワークシートへのアクセス方法はいくつかあります。まず、ワークシートの名前がわかっている場合です。この場合は以下のように[]内に引用符で囲んでワークシート名を指定するだけです。
以下の例ではワークシート名Sheet2のA2セルの内容が表示されます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
print(ws['A2'].value)
ワークシート名がわからない場合はworksheets[〜]のように指定します。〜の中には0以上の整数値が指定できます。0が一番最初(一番左側)のワークシート)になり、次のワークシートが1、その次が2というようになります。
以下のように指定すると左から2番目のワークシートのA2セルの内容が表示されます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb.worksheets[1]
print(ws['A2'].value)
あと、前回はセルの位置を指定するのに以下のような表記を使いました。
cell(row=2, column=1)
最初に行、次に列を指定すると確定しているなら以下のようにcell()の中は行番号,列番号として数字のみで大丈夫です。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
print(ws.cell(2,1).value)
○行数と列数を表示
セルの内容を読み出してシェルスクリプトで処理する場合、行数と列数が必要になります。
行数はmax_rowで、列数はmax_columnで取得できます。
以下のようにすると行数と列数が表示されます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
print(ws.max_row)
print(ws.max_column)
○コマンドライン引数を取得
シェルスクリプトと組み合わせて使用する場合、Python側でコマンドラインから渡されたパラメーターを取得する必要があります。
コマンドラインからのパラメーターを取得する場合は以下のようになります。以下の例ではコマンドラインから渡された3つのパラメーターが表示されます。なお、最初のパラメーターはスクリプトファイルのパスになります。
import sys
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
なお、指定されたパラメーターが指定されていない場合は図のようなエラーになります。が、ここでは必ずパラメーターを指定しているものとして進めます。(エラー処理は考慮しません)
○コマンドラインでセルの位置を指定
次にコマンドラインでセルの位置を指定して内容を表示してみましょう。コマンドラインからのパラメーターは数字でも文字列となるのでint(sys.argv[1])のようにintを使って整数値にします。
以下の例ではコマンドラインで指定した行位置、列位置のセルの内容を表示します。
import sys
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
n = ws.cell(int(sys.argv[1]),int(sys.argv[2]))
print(n.value)
○セルの数だけ繰り返す
次にシェルスクリプトでセルの数だけ読み出してみましょう。と、その前に2つだけスクリプトを用意しておきます。用意するスクリプトはワークシートの行数と列数を返すものです。ワークシート名やファイル名を決め打ちしていますが、アクティブなワークシートを対象にするのであればws = wb['Sheet2']は前回使用したwb.activeにすればよいでしょう。
まずは行数を返すスクリプトです。これは以下のようになります。このスクリプトはrow.pyという名前で保存しておきます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx')
ws = wb['Sheet2']
print(ws.max_row)
同様に列数の場合は以下のスクリプトになります。このスクリプトはcolumn.pyという名前で保存しておきます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx')
ws = wb['Sheet2']
print(ws.max_column)
ここまでできれば、あとはセルの列と行の数だけシェルスクリプトで繰り返すだけです。Pythonからの値を変数に入れる場合は$()を使います。他は定番のforによる一定回数の繰り返しなので難しくはないでしょう。以下のスクリプトをe.shという名前で保存して実行権限を付加します。
.
今回使用するエクセルのファイルは前回と若干異なり、2枚目のシートが追加されています。
○複数あるワークシートから特定のセルを読み出す
エクセルでは複数のワークシートが含まれる場合があります。このため、特定のシートにある特定のセルを読み出す必要が出てきます。ワークシートへのアクセス方法はいくつかあります。まず、ワークシートの名前がわかっている場合です。この場合は以下のように[]内に引用符で囲んでワークシート名を指定するだけです。
以下の例ではワークシート名Sheet2のA2セルの内容が表示されます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
print(ws['A2'].value)
ワークシート名がわからない場合はworksheets[〜]のように指定します。〜の中には0以上の整数値が指定できます。0が一番最初(一番左側)のワークシート)になり、次のワークシートが1、その次が2というようになります。
以下のように指定すると左から2番目のワークシートのA2セルの内容が表示されます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb.worksheets[1]
print(ws['A2'].value)
あと、前回はセルの位置を指定するのに以下のような表記を使いました。
cell(row=2, column=1)
最初に行、次に列を指定すると確定しているなら以下のようにcell()の中は行番号,列番号として数字のみで大丈夫です。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
print(ws.cell(2,1).value)
○行数と列数を表示
セルの内容を読み出してシェルスクリプトで処理する場合、行数と列数が必要になります。
行数はmax_rowで、列数はmax_columnで取得できます。
以下のようにすると行数と列数が表示されます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
print(ws.max_row)
print(ws.max_column)
○コマンドライン引数を取得
シェルスクリプトと組み合わせて使用する場合、Python側でコマンドラインから渡されたパラメーターを取得する必要があります。
コマンドラインからのパラメーターを取得する場合は以下のようになります。以下の例ではコマンドラインから渡された3つのパラメーターが表示されます。なお、最初のパラメーターはスクリプトファイルのパスになります。
import sys
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
なお、指定されたパラメーターが指定されていない場合は図のようなエラーになります。が、ここでは必ずパラメーターを指定しているものとして進めます。(エラー処理は考慮しません)
○コマンドラインでセルの位置を指定
次にコマンドラインでセルの位置を指定して内容を表示してみましょう。コマンドラインからのパラメーターは数字でも文字列となるのでint(sys.argv[1])のようにintを使って整数値にします。
以下の例ではコマンドラインで指定した行位置、列位置のセルの内容を表示します。
import sys
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx',data_only=True)
ws = wb['Sheet2']
n = ws.cell(int(sys.argv[1]),int(sys.argv[2]))
print(n.value)
○セルの数だけ繰り返す
次にシェルスクリプトでセルの数だけ読み出してみましょう。と、その前に2つだけスクリプトを用意しておきます。用意するスクリプトはワークシートの行数と列数を返すものです。ワークシート名やファイル名を決め打ちしていますが、アクティブなワークシートを対象にするのであればws = wb['Sheet2']は前回使用したwb.activeにすればよいでしょう。
まずは行数を返すスクリプトです。これは以下のようになります。このスクリプトはrow.pyという名前で保存しておきます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx')
ws = wb['Sheet2']
print(ws.max_row)
同様に列数の場合は以下のスクリプトになります。このスクリプトはcolumn.pyという名前で保存しておきます。
import openpyxl
wb = openpyxl.load_workbook('Book1.xlsx')
ws = wb['Sheet2']
print(ws.max_column)
ここまでできれば、あとはセルの列と行の数だけシェルスクリプトで繰り返すだけです。Pythonからの値を変数に入れる場合は$()を使います。他は定番のforによる一定回数の繰り返しなので難しくはないでしょう。以下のスクリプトをe.shという名前で保存して実行権限を付加します。
.
「エクセル」をもっと詳しく
「エクセル」のニュース
-
エクセルソフトは、AI/HPC 開発者向け期間限定イベントサイト 『HPSC 2024』 で開催されるオンライン講演の参加者の中から、抽選で景品が当たるキャンペーンを実施(2024/6/28 まで)5月20日10時46分
-
ドアを開けた瞬間から広がる日本の伝統アートの世界 『浮世絵 -UKIYOE- ルーム』を期間限定販売5月17日17時16分
-
【茨城に期間限定OPEN】バームクーヘン専門店『ねんりん家』。夏に色づく緑の山並みに見立てたお抹茶味も!5月16日15時16分
-
【松江エクセルホテル東急】メロン、ぶどうやマンゴーなどカラフルな果実が彩るスイーツ!夏めく果実のアフタヌーンティー登場5月16日14時16分
-
夏限定!「ハニーレモンティーソーダ」や「ハニーレモンレアチーズケーキ 〜国産はちみつ使用〜」等をエクセルシオール カフェで5月30日(木)発売5月16日14時16分
-
茨城県初出店!マシンピラティススタジオRintosull(リントスル) 『Rintosull 水戸エクセルみなみ店』2024年7月1日(月)グランドオープン5月15日14時16分
-
エクセルソフトは、5 月 23 日 (木) に初学者向けハンズオン「はじめて動かす Docker コンテナー」をオンラインで開催5月15日10時46分
-
エクセルソフトは、iSpring Suite で始める e ラーニング コースの作成方法 無料セミナーをオンラインで 5月 24日 (金) 開催!5月14日17時46分
-
【5月14日】メイクアップブランド『エクセル』から、大ヒット!なめらかで高密着な「スティックアイシャドウ」 オンライン限定色 発売5月14日15時46分
-
【イギリス人もビックリ】エクセルシオールカフェの「スコーン」が思ってたんと違いすぎて思わず2度見した5月14日14時30分
ITニュースランキング
-
1“コンパクトスマホ”は絶滅するのか? 変わりゆく「小型の定義」と「市場ニーズ」 ITmedia Mobile
-
2HIKAKINさんのカップ麺「みそきん」再販開始、早くもフリマサービスで転売多数、定価の数倍での転売も…… ねとらぼ
-
3「もうこれはYouTubeの領域ではない」 “花粉で粉じん爆発”を起こす実験がすごすぎて涙が止まらない ねとらぼ
-
4バッファローが一部Wi-Fiルーターで注意喚起、bot感染増加を受け パスワード変更やファームウェア更新を ITmedia NEWS
-
5「バイオハザードみたい」 巨大な実験装置のような水族館が話題に 「リッカー二体くらい飛び出してきそう」の声 ねとらぼ