我正在尝试使用xlrd模块在Kivy中创建一个非常简单的应用程序。我有一个包含一些数据的excel电子表格,我想将单元格(2,1)显示为标签。到目前为止,这是我的代码:
import kivy
kivy.require('1.9.1')
import xlrd
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
workbook = xlrd.open_workbook('Actuarial program for BAM.xlsx')
sheet = workbook.sheet_by_index(0)
def build(self):
return Label(text='sheet.cell_value(2,1)')
if __name__ == '__main__':
MyApp().run()
首先我明白标签只会给我文字文件sheet.cell_value(2,1)。我的问题在于工作簿和工作表变量。如果我尝试运行该程序没有任何反应。但是,如果我将两行注释掉('workbook ='和'sheet ='),那么程序将运行,从文件中打开一个带有文本sheet.cell_value(2,1)的窗口。我格式化代码的方式有问题吗?
此外,excel文件与.py程序位于同一目录中。
答案 0 :(得分:0)
Label(text='sheet.cell_value(2,1)')
字面上显示sheet.cell_value(2,1)
,因为它被引用。
您必须取消引用它,并且由于sheet
是类成员,因此您必须在self
或MyApp
前加上前缀。我会使用self
前缀例如:
class MyApp(App):
workbook = xlrd.open_workbook('Actuarial program for BAM.xlsx')
sheet = workbook.sheet_by_index(0)
def build(self):
return Label(text=self.sheet.cell_value(2,1))
如果xlsx
文件与我推荐的程序位于同一目录中(并且会捕获异常并显示它们):
# find out where is the script/executable installed
program_dir = os.path.dirname(sys.executable if getattr( sys, 'frozen', False ) else __file__)
try:
# open the file from the same directory so script works from any cwd
workbook = xlrd.open_workbook(os.path.join(program_dir,'Actuarial program for BAM.xlsx'))
except Exception as e:
print("Exception occurred: {}".format(str(e)))