1.品番検索プログラム①から⑪まで
2.品番を読み込みエクセルに品番ロケがあるかを調べるためのコード
3.tkinterに、リセットボタンと終了ボタンを作る
次に書いていくコード
検索ボタンを押したら品番入力ボックス内に記入した品番を読み込み、
エクセルに品番ロケがあるかどうかを調べるという内容のコードを書きます。
#検索ボタンを押し記入した品番を読み込む hinban_list = [] roke_list = [] def kensaku(): #入力ボックスから品番ゲット hinban = textbox1.get() #エクセルと照合する wb = openpyxl.load_workbook('roke.xlsx') ws = wb['Sheet1'] #エクセルの最大行を取得(rokeは11行) maxrow = ws.max_row #hinbanをrokeエクセルの上から最大行まで順番に照合していく for i in range(maxrow-1): name = ws.cell(i+2, 1).value #一致したらhinban_lisit,roke_listに入れる if hinban == name: hinban_list.append(hinban) #hinbanとエクセル合致したロケのセル roke = ws.cell(i+2, 2).value roke_list.append(roke) #listが空の場合はロケなし表示、空でなければ品番とロケをボックスに表示 if not hinban_list: textbox4.insert(tk.END,hinban+' のロケはありません') else: textbox2.insert(tk.END,hinban_list[0]) textbox3.insert(tk.END,roke_list[0]) #検索ボタン button = tk.Button(text='検索', font=("Meiryo", "12", "normal"), command = kensaku) button.place(x=100, y =70, width=100, height=50 )
順番に見ていきます。
hinban_list = [] roke_list = []
エクセルにロケがあるか調べた結果、
品番ロケが存在した場合に「品番」と「ロケ」を入れるためのリストを作ります。
def kensaku():
def kensaku():という関数を作ります。
def kensaku()の関数の下にある検索ボタンのコード↓
button = tk.Button(text='検索', font=("Meiryo", "12", "normal"), command = kensaku)
検索ボタンを押したときにcommand = kensakuと命令して、
def kensaku()関数を発動させます。
hinban = textbox1.get()
入力した品番を入力ボックスからゲットし、変数hinbanに代入します。
wb = openpyxl.load_workbook('roke.xlsx') ws = wb['Sheet1']
入力した品番をエクセル「roke.xlsx」の「Sheet1」を
照合するためopenpyxlで開きます
maxrow = ws.max_row
for文でシートの上から順番に品番を拾っていくために、
シートの最大行(rokeは11行)を取得します。
maxrow = ws.max_row
短い行数なら見てすぐにわかりますが、
行数が多かったり、追加記入して行が増えたりします。
だから常に最大行を取得します。
for i in range(maxrow-1):
for文で品番とロケを最大行まで繰り返します。
ws.max_rowで取得したエクセルの最大行は「11」となります。
rangeは0からはじまりMAX11で11の手前の10で終わります。
そうなると0-10の11行分となります。
しかしエクセルに品番とロケが記入されているのは、
2行目から11行までの10行になります。
(1行目は項目である「品番」と「ロケ」)
ですからrange(maxrow-1)とします。
11-1で10とすることで、
変数iには「0,1,2,3,4,5,6,7,8,9」(10回)と代入され10行分となります。
name = ws.cell(i+2, 1).value
次に必要なセルに当てはめていきます。
一番最最初は(2,1)です。
name = ws.cell(i+2, 1).value
変数iには最初「0」が入りますから、
(0+2, 1)で(2, 1)となります。
このように順番に
(1+2,1)>(3,1)
(2+2,1)>(4,1)
(3+2,1)>(5,1)
.
.
.
.
(9+2,1)>(11,1)
となり最大行まで繰り返されます。
name = ws.cell(i+2, 1).value
nameに(2, 1)の「1234-A」から順番に代入します。
if hinban == name: hinban_list.append(hinban) roke = ws.cell(i+2, 2).value roke_list.append(roke)
調べたい品番(hinban)とエクセル表記の品番(name)が
一致したらhinban_lisit,roke_listに入れる
roke = ws.cell(i+2, 2).value
ロケの場合はBなので2
hinban_list.append(hinban)
roke_list.append(roke)
最初に作った「品番」と「ロケ」を入れるためのリストに追加します
if not hinban_list: textbox4.insert(tk.END,hinban+' のロケはありません') else: textbox2.insert(tk.END,hinban_list[0]) textbox3.insert(tk.END,roke_list[0])
if not hinban_list:
textbox4.insert(tk.END,hinban+' のロケはありません')
hinban_listが空の場合は①にロケなし表示します。
else:
textbox2.insert(tk.END,hinban_list[0])
textbox3.insert(tk.END,roke_list[0])
空でなければhinban_list、roke_listの、
一番目にある品番とロケを②③ボックスに表示します。
#検索ボタン button = tk.Button(text='検索', font=("Meiryo", "12", "normal"), command = kensaku) button.place(x=100, y =70, width=100, height=50 )
最後に検索ボタンを説明します。
def kensaku():
という関数をcommand = kensakuで動かすためのボタンです。
このボタンを先に作り関数を作っていきます。
配置も関数def kensaku():より後にします。
理由としては、書きながら関数を実行して様子をみながら作っていくのですが、
最初に検索ボタンでcommand = kensakuを定義しないと、
関数def kensaku():が動いてくれないからです。
また検索ボタンのcommand = kensakuが関数def kensaku():より先にあると
kensakuは定義されていないことになるからです。