使用Kivy在Openpyxl中出错

问题描述 投票:0回答:1

[我正在尝试使用我在Kivy上使用IPython编写的一些python代码,但遇到一个错误,提示它无法导入名称BUILTIN_FORMATS,该名称是从openpyxl中的styleable.py调用的。顺便说一句,我用过:

   import openpyxl as xl

当我在IPython中运行代码时,它工作得很好。有谁知道我该怎么解决。

编辑:我已经尝试使用pip重新安装openpyxl。EDIT2:我在Windows 7上,这是我的代码:

#!/usr/bin/kivy
import kivy
import random
import matplotlib.pyplot as plt
import pandas as pd
import pylab as pl
import requests
import openpyxl as xl
from operator import itemgetter
from collections import Counter
from lxml import html
#function to load the table form the excel file corresponding to the passed sheet name
def loadTable(sheetName):
    lotteryData = pd.ExcelFile("Lottery databases.xlsx") #grabs and loads the file into memory
    df = lotteryData.parse(sheetName) #loads the data table form the corresponding sheetName into the df data frame
    return df

#function to display the table
def showTable(table):
    #get the number of rows the table has
    no_of_rows = len(table.index)
    #display the table

    return table.head(no_of_rows)

#function to display pie charts of a specific column within the database
#table is the database that the function will be working with
#and column is a numberical vaule of which column to get the data from
def printPieChart(table, column):
    if column == 6:
        columnList = table.iloc[:, -1:].values.T.ravel()
    else:
        columnList = table.iloc[:, (column - 7): (column - 6)].values.T.ravel()
    countedList = Counter(columnList)

    #set up the size of the pie chart
    fig = plt.figure(figsize=[10, 10])
    ax = fig.add_subplot(111)
    cmap = plt.cm.prism

    #input variables for pie function
    slices = [float(v) for v in countedList.values()]
    colors = cmap(np.linspace(0., 1., len(slices)))
    labels = [float(k) for k in countedList]
    columnHeaders = list(table.columns.values)

    #the pie chart
    pie_wedge_collection = ax.pie(slices, colors = colors, labels = labels, labeldistance = 1.05, autopct = '%1.1f%%')
    #get rid of the black outlines between the wedges and around the pie
    for pie_wedge in pie_wedge_collection[0]:
        pie_wedge.set_edgecolor('white')
    ax.set_title(columnHeaders[column + 1])
    #can't display a Legends as there's too many for plt.legends() too handle
    #return pyplot.pie([float(v) for v in countedList.values()], labels = [float(k) for k in countedList])

def updateDatabase():
    wb = xl.load_workbook("Lottery databases.xlsx") #load the workbook into memory

    #list of the sheet names within the workbook
    sheetnames = ["SuperLotto", "MegaMillions", "Powerball"]
    days = ["Tue. ", "Wed. ", "Fri. ", "Sat. "] #days the draws on done on
    #list of the webpages to use grab the new draws
    webPages = ['http://www.calottery.com/play/draw-games/superlotto-plus/winning-numbers', 'http://www.calottery.com/play/draw-games/mega-millions/winning-numbers', 'http://www.calottery.com/play/draw-games/powerball/winning-numbers']
    x = 3
    while x != 0:
        ws = wb.get_sheet_by_name(sheetnames[x-1]) # which sheet to update
        rowIndex = ws.get_highest_row() # gets the highest row index in the sheet
        lastCellValue = ws.cell(row = rowIndex - 1, column = 0).value #gets the last value in the first column, draw number
        page = requests.get(webPages[x-1]) #grabs the webpage needed
        tree = html.fromstring(page.text) #puts the webpage into a tree structure to make it easy to traverse
        #get the newest draw and date from the webpage for comparasion purposes
        draw_and_date = tree.xpath('//*[@id="objBody_content_0_pagecontent_0_objPastWinningNumbers_rptPast_ctl01_lblDrawDateNumber"]/text()')
        #if the table is up to date, it will move on to the next table else it will update it 
        y = int(draw_and_date[0][-4:]) - int(lastCellValue) # checks to see how many draws are missing from the table
        if y == 0:
            print("The table for " + sheetnames[x-1] + " is up to date.")
            x -= 1 #decrement x by 1 to move on to the next table
        else:
            #while loop to check if the table needs to be updated or not, if yes it will update it
            while y != 0:
                #grabs the draw and date of the missing draws from the table
                draw_and_date = tree.xpath('//*[@id="objBody_content_0_pagecontent_0_objPastWinningNumbers_rptPast_ctl0' + str(y) + '_lblDrawDateNumber"]/text()')
                numbers = tree.xpath(".//*[@id='content']/div[3]/table/tr[" + str(y) + "]/td[2]/span/text()") #numbers
                numbers = [int(x) for x in numbers] # converts the text to integers
                numbers.sort() #sort the number from smallest to largest
                mega = tree.xpath(".//*[@id='content']/div[3]/table/tr[" + str(y) + "]/td[3]/text()") #mega number
                mega = int(mega[0]) # converts the text to integers
                #write to the file
                if sheetnames[x-1] == "MegaMillions":
                    d = 0
                else:
                    d = 1
                if int(draw_and_date[0][-4:]) % 2 == 0:
                    # if the draw date is even then the day is a Friday/Saturday
                    ws.append([int(draw_and_date[0][-4:]), (days[d+2] + draw_and_date[0][:12]), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], mega]) # print the draw date
                else:
                    # if the draw date is odd then the day is a Tuesday/Wednesday
                    ws.append([int(draw_and_date[0][-4:]), (days[d] + draw_and_date[0][:12]), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], mega])
                y -= 1 #decrement y by 1 to get the next missing draw
            print("Updated the " + sheetnames[x-1] + " table successfully!")
            x -= 1 #decrement x by 1 to move on to the next table
    wb.save("Lottery databases.xlsx") #save the workbook
    print("Saved the database Sucessfully!")

依此类推...

kivy python-3.4 openpyxl
1个回答
0
投票

我们如何导入openpyxl。我的main.py文件中有openpyxl,并且该应用在Android上崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.