首页 > 解决方案 > 熊猫无法使用公式从单元格中获取值

问题描述

基本上是标题。

我一直在网上研究这个问题,因为我认为我做错了什么,但显然,我的代码应该可以正常工作。我会准确地告诉我我正在尝试做什么以及出了什么问题。

我的代码从 Google Drive 下载 Excel 表,从某些列中获取一些信息,更改一些内容,然后将其上传回驱动器。这一切都很好,但是当代码试图获取它应该得到的信息时,它没有;当单元格上有公式时,由列组成的数据框是带有“nan”的字段。单元格可以有最简单的公式,pandas 不会读取它。

我怀疑这与我从驱动器下载它的事实有关,因为当我打开通过代码下载的工作表并手动保存时,一切正常,但我找不到任何解决方法. 如果有人能准确地指出正在发生的事情,或者我可以做些什么来解决它,那就太好了。

这是下载工作表的代码:

def criar(self):
    
    SCOPES='https://www.googleapis.com/auth/drive'
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        'H:\Meu Drive\DriveAPI\key.json', SCOPES)

    # Builda o objeto service
    service = build('drive', 'v3', credentials=credentials)

    #Essa parte vai definir os parametros do request à api do drive
    file_metadata = {'name': 'testes.xlsm','parents':[parentid]}
    file_name='testes.xlsm'
    mime_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    media = MediaFileUpload('H:/Meu Drive/Excell/{0}'.format(file_name),mimetype=mime_type)
    #faz a criação do arquivo no drive
    file = service.files().create(body=file_metadata,
                                        media_body=media,
                                        fields='id').execute()
    
    id_file=file['id']

def updatar(self):
    
    SCOPES='https://www.googleapis.com/auth/drive'
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        '.\key.json', SCOPES)

    # Builda o objeto service
    service = build('drive', 'v3', credentials=credentials)

    #Essa parte vai definir os parametros do request à api do drive
    file_metadata = {'name': 'test.xlsm','parents':[parentid]}
    file_name='test.xlsm'
    mime_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    media = MediaFileUpload('./{0}'.format(file_name),mimetype=mime_type)
    #updata o arquivo no drive
    file = service.files().update(media_body=media,
                                        addParents=parentid,
                                        fileId=file_id).execute()
    #return id_file

这是从列中获取信息的代码:

marcacoeslimite1 = 12
    marcacoeslimite2 = 24
    marcacoeslimite3 = 36
    file_loc="./test.xlsm"
    marcacoes = pd.read_excel(file_loc, sheet_name="MONITORAMENTO", index_col=None, na_values=['NA'], usecols ="AN")
    coddosclientes = pd.read_excel(file_loc, sheet_name="MONITORAMENTO", index_col=None, na_values=['NA'], usecols ="D")
    cidadedosclientes = pd.read_excel(file_loc, sheet_name="MONITORAMENTO", index_col=None, na_values=['NA'], usecols ="E")
    telclientes = pd.read_excel(file_loc, sheet_name="MONITORAMENTO", index_col=None, na_values=['NA'], usecols = "AF")
    nomedosclientes = pd.read_excel(file_loc, sheet_name="MONITORAMENTO", index_col=None, na_values=['NA'], usecols ="B")
    enderecodocliente = pd.read_excel(file_loc, sheet_name="MONITORAMENTO", index_col=None, na_values=['NA'], usecols ="AK")
    x=0
    while x < len(marcacoes):
        if (marcacoes.iloc[x][0] ==0):
            codigo = coddosclientes.iloc[x][0]
            cidade = cidadedosclientes.iloc[x][0]
            codigo = coddosclientes.iloc[x][0]
            telefone = telclientes.iloc[x][0]
            nomedocliente = nomedosclientes.iloc[x][0]
            loc = enderecodocliente.iloc[x][0]

标签: pythonexcelpandasgoogle-drive-apidrive

解决方案


推荐阅读