まだまだpython初心者のものです。classやdefなどを使い始めたばかりです。
実現したいこと
複数あるエクセルから、wx.Comboboxを使い、ファイル名を選択します。そのファイルから情報を読み取りたいのですが、
読み取るための定義の中のforが動きません。
###ソースコード
python3
1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3# pip install openpyxl 4 5import wx 6import wx.xrc 7import openpyxl 8import os 9import glob 10 11################ 実行ファイルのパス########## 12dir = os.path.dirname(os.path.abspath(__file__)) 13 14#####フォルダのエクセルファイルをリスト化###### 15excels =glob.glob(dir + '/*.xls*') #xls,xlsxの拡張子のファイルをフルパス付リスト化 16excels.remove(dir + '\meibo.xlsx') #meibo.xlsxを除く 17excels_file =[] 18for e in excels : #meibo.xlsxを除いて、ファイル名のみのリストを作成 19 excels_file.append(e.replace(dir+'\', '')) 20 21 22####定義変数名#### 23kaigi = "" #会議セルの値 24seki = 0 #座席の数 25meibo =[] #名簿 26prognum = [] #プログラム用番号 27report = [] #初期レポート名 28m_comboBox1Choices = report 29m_comboBox0Choices = excels_file 30 31class MyFrame1 ( wx.Frame ): 32 33 def __init__( self, parent ): 34 wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = "TEST!! " + kaigi, pos = wx.DefaultPosition, size = wx.Size(800,600 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) 35 36 self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) 37 self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) ) 38 39 bSizer1 = wx.BoxSizer( wx.VERTICAL ) 40 41 #####0列目の項目###### 42 global m_comboBox0 43 bSizer0 = wx.BoxSizer( wx.HORIZONTAL ) 44 self.m_comboBox0 = wx.ComboBox( self, wx.ID_ANY, u"エクセルファイルを選択", wx.DefaultPosition, wx.DefaultSize, excels_file, 0 ) 45 self.m_comboBox0.SetMinSize( wx.Size( 200,-1 ) ) 46 bSizer0.Add( self.m_comboBox0, 0, wx.ALL, 5 ) 47 bSizer1.Add( bSizer0, 0, wx.EXPAND|wx.FIXED_MINSIZE, 1 ) 48 bSizer0 = wx.BoxSizer( wx.VERTICAL ) 49 50 51 #####座席表##### 52 self.mainPanel = wx.Panel(self) 53 self.darea = MyFrame1.ZasekiArea(self.mainPanel) 54 self.SetSizer( bSizer1 ) 55 self.Layout() 56 self.Centre( wx.BOTH ) 57 self.m_comboBox0.Bind(wx.EVT_COMBOBOX, self.excel_change_func ) #コンボボックスを変更時の動作 58 59 def __del__( self ): 60 pass 61 62 #####エクセルファイル選択時の動作##### 63 def excel_change_func(self , event ): 64 col = excels_file.index(self.m_comboBox0.GetStringSelection()) #ボタンが何番目かを取得 65 self.file = excels[col] #エクセルファイルのフルパスをっ取得 66 self.excell_import(self.file) 67 68 #####エクセルから情報を読み取る##### 69 def excell_import (self ,file) : 70 global meibo 71 self.wb = openpyxl.load_workbook(file ,data_only=True,read_only=False) #エクセルファイルを開く 72 self.sheet = self.wb['date'] #シートを選択 73 74 #会議セルの値を取得 75 self.kaigi = self.sheet.cell(1,3).value 76 77 ####座席配列#### 78 self.seki = int(self.sheet.cell(3,6).value) 79 80 ####名簿の情報を取得#### ←ここで情報を読み取りたいが、何も動作していない様子 81 for row in self.sheet['A5:IV'+ str(seki + 4)] : 82 for col in row : 83 meibo.append(col.value) 84 print(meibo) ←空のリストしか表示されない。 85 86 87 class ZasekiArea(wx.Panel): 88 def __init__(self, parent): 89 wx.Panel.__init__(self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size(800,600 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 90 ....... 91 self.mainPanel.SetSizer(sizer) 92 self.mainPanel.Bind(wx.EVT_COMBOBOX , MyFrame1.excel_change_func) 93 94if __name__ == '__main__': 95 app = wx.App(False) 96 frame = MyFrame1(None) 97 frame.Show(True) 98 app.MainLoop()
なぜ、for文が機能しないのか、教えてください。また、どのようにすれば、機能するのか教えてください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー