我正在尝试使用 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)。我的问题在于工作簿和工作表变量。如果我尝试运行该程序,则没有任何反应。但是,如果我注释掉这两行("工作簿="和"工作表="),那么程序将运行,从Kivy打开一个窗口,文本为sheet.cell_value(2,1)。格式化代码的方式有问题吗?
此外,Excel 文件与.py程序位于同一目录中。
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)))