Forum >> Principianti >> Lettura di un file Excel con Python

Pagina: 1

Buonasera a tutti

Avrei bisogno d'aiuto per un problema apparentemente banale ma per me sicuramente difficile.
Vorrei accedere ad un file Excel (.xlsx) con Python, leggere i dati e stampare un grafico Excel.
Trascurando intando la parte del grafico, mi ritrovo già ad avere i problemi nella lettura del file.

In rete ho trovato i moduli per la manipolazione dei file excel openpyxl e xrld e li ho installati (infatti riesco ad importarli).

la guida che sto seguendo è questa: https://devnews.it/posts/596789626646aab171580ec0/come-leggere-creare-file-excel-con-python-openpyxl
E seguo anche questo video su youtube: https://www.youtube.com/watch?v=WlGq6R4U2gE

Attualmente sono fermo a questo punto:
import openpyxl
file_excel = openpyxl.load_workbook('Tab_rev01.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
print(sheet['A1'].value)La risposta al run è:
Al run la risposta è questa:
Traceback (most recent call last):
  File "C:\Users\...\test1.py", line 3, in <module>
    sheet = wb.get_sheet_by_name('Sheet1')
NameError: name 'wb' is not defined
N.B. - il percorso del file test1.py l'ho appositamente eliminato ma sull'IDLE compare interamente.

Qualcuno sa aiutarmi a svelare questo mistero?
La versione che uso di Python è la 3.6.0
In allegato il file .xlsx di esempio, il grafico vorrebbe avere in ascissa l'ora mentre sull'ordinata il valore indicato con Potenza.

Sono a disposizione per ogni chiarimento sul quesito.
Grazie in anticipo della collaborazione.

Dario


--- Ultima modifica di DarioScibetta in data 2017-07-23 19:21:06 ---
Allegati
import openpyxl
file_excel = openpyxl.load_workbook('Tab_rev01.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
print(sheet['A1'].value)La risposta al run è:
Al run la risposta è questa:
Traceback (most recent call last):
  File "C:\Users\...\test1.py", line 3, in <module>
    sheet = wb.get_sheet_by_name('Sheet1')
NameError: name 'wb' is not defined
Ciao Dario, non c'è molto mistero se leggi il messaggio di Python, cosa rappresenta wb nel tuo script? Python non riesce a capirlo ed infatti ti dice che non è definito.

Forse hai dimenticato qualcosa?
from openpyxl import Workbook

wb = Workbook()
Cya



Ciao Daniele, è un piacere risentirti. Scusami ancora per la figuraccia del Cya ;)

Tornando a noi; "wb" dovrebbe essere definita nello stesso momento in cui importo openpyxl. (Credo!!?)
Se apro il modulo openpyxl e seguo il percorso dei moduli fino a trovare la funzione get_sheet_by_name, che sarebbe openpyxl.workbook.workbook, trovo questo:
@deprecated("Use wbsheetname")
    def get_sheet_by_name(self, name):
        """Returns a worksheet by its name.

        :param name: the name of the worksheet to look for
        :type name: string

        """
        return selfname
Quello che dici tu c'è già scritto nel modulo openpyxxl che rimanda ad un'altro openpyxl.workbook.
Quindi in teroia non dovrebbe già essere definito?
Ho già provato diverse combinazioni di from... import ... as wb; ma senza successo.

Grazie mille

N.B. - In allegato il modulo openpyxl

Dario




--- Ultima modifica di DarioScibetta in data 2017-07-24 10:24:57 ---
Allegati
Daniele

Ho superato il problema della definizione del wb. Però!!!!!!!!!
Come sempre ad ogni problema risolto ne sorgono 100.
L'errore ora ritornato è questo:
TypeError: get_sheet_by_name() missing 1 required positional argument: 'name'
ricordando che get_sheet_by_name è una funzione definita in openpyxl.workbook.workbook con la def
@deprecated("Use wbsheetname")
    def get_sheet_by_name(self, name):
        """Returns a worksheet by its name.

        :param name: the name of the worksheet to look for
        :type name: string

        """
        return selfname

a questo punto suppongo che il problema sia nel name. Però non capisco una cosa. Se nel mio codice, che aggiornato ad ora è:
import openpyxl
from openpyxl import Workbook as wb
file_excel = openpyxl.load_workbook('Tab_rev01.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
print(sheet['A1'].value)
inserisco il 'Sheet1'; lo interpreta a tuo/vostro parere come 'name' o come self (definito nella funzione get_sheet_by_name)?

Come dovrei proseguire?

Dario








Dario prova così come mostrato nella documentazione ufficiale. Ho provato col tuo file e funziona:
>>> from openpyxl import load_workbook
>>> wb = load_workbook(filename = 'Tab_rev01.xlsx')
>>> sheet_ranges = wb["Foglio1"]
>>> print(sheet_ranges["A1"].value)
Ora
>>> print(sheet_ranges["B1"].value)
Potenza
Così fa quello che chiedi?

Cya

P.S. Ovviamente i ">>>" sono della modalità interattiva e non vanno riscritti/riportati.


Grazie Daniele sei un grande!!!!. Appena ho fatto il Run mi si sono illuminati gl'occhi alla Frankestein Junior "SI PUO' FAREEEE!!!!"
La domanda che mi sorge spontanea dal tuo messaggio è: A quale documentazione ufficiale ti riferisci?
Perchè mi piacerebbe trovare documenti su questo argomento, ovvero l'integrazione di Python su Excel. Se hai consigli li accetto volentieri.

Grazie mille, continuo a studirci sopra e se ho dubbi (cosa che succederà sicuramente) mi farò vivo.

Dario :ok: :)
La domanda che mi sorge spontanea dal tuo messaggio è: A quale documentazione ufficiale ti riferisci?
Perchè mi piacerebbe trovare documenti su questo argomento, ovvero l'integrazione di Python su Excel. Se hai consigli li accetto volentieri.

Il codice l'ho preso pari pari da qui, adattando solo il nome di file e foglio.

Cya
In pratica il datasheet del modulo.
Grazie mille del tuo aiuto, ora ho materiale da studiare per un bel pò.
Alla prossima Daniele e a buon rendere.

Ciao


Pagina: 1



Esegui il login per scrivere una risposta.