Utiliser openpyxl pour lire un fichier depuis la mémoire

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Utiliser openpyxl pour lire un fichier depuis la mémoire

Message par ForumBot »

J’ai téléchargé un tableur Google en tant qu’objet en Python.


Comment puis-je utiliser openpyxl pour utiliser le classeur sans avoir à le sauvegarder d’abord sur le disque ?


Je sais que xlrd peut le faire ainsi :


book = xlrd.open_workbook(file_contents=downloaded_spreadsheet.read())


avec “downloaded_spreadsheet” étant mon fichier xlsx téléchargé en tant qu’objet.


Au lieu de xlrd, je veux utiliser openpyxl en raison d’un meilleur support du format xlsx (d’après ce que j’ai lu).


Voici ce que j’utilise jusqu’à présent…


#!/usr/bin/python

import openpyxl
import xlrd
# which to use..?

import re, urllib, urllib2

class Spreadsheet(object):
def __init__(self, key):
super(Spreadsheet, self).__init__()
self.key = key

class Client(object):
def __init__(self, email, password):
super(Client, self).__init__()
self.email = email
self.password = password

def _get_auth_token(self, email, password, source, service):
url = "https://www.google.com/accounts/ClientLogin"
params = {
"Email": email, "Passwd": password,
"service": service,
"accountType": "HOSTED_OR_GOOGLE",
"source": source
}
req = urllib2.Request(url, urllib.urlencode(params))
return re.findall(r"Auth=(.*)", urllib2.urlopen(req).read())[0]

def get_auth_token(self):
source = type(self).__name__
return self._get_auth_token(self.email, self.password, source, service="wise")

def download(self, spreadsheet, gid=0, format="xls"):

url_format = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=%s&exportFormat=%s&gid=%i"
headers = {
"Authorization": "GoogleLogin auth=" + self.get_auth_token(),
"GData-Version": "3.0"
}
req = urllib2.Request(url_format % (spreadsheet.key, format, gid), headers=headers)
return urllib2.urlopen(req)

if __name__ == "__main__":

email = "[email protected]" # (your email here)
password = '.....'
spreadsheet_id = "......" # (spreadsheet id here)

# Create client and spreadsheet objects
gs = Client(email, password)
ss = Spreadsheet(spreadsheet_id)

# Request a file-like object containing the spreadsheet's contents
downloaded_spreadsheet = gs.download(ss)

# book = xlrd.open_workbook(file_contents=downloaded_spreadsheet.read(), formatting_info=True)

#It works.. alas xlrd doesn't support the xlsx-funcionality that i want...
#i.e. being able to read the cell-colordata..


J’espère que quelqu’un pourra m’aider car je lutte depuis des mois pour obtenir les données de couleur d’une cellule donnée dans un tableur Google. (Je sais que l’API Google ne le supporte pas..)




Source : Stack Overflow

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Utiliser openpyxl pour lire un fichier depuis la mémoire

Message par ayi »

Dans la documentation de load_workbook, il est dit :


#:param filename: the path to open or a file-like object


..donc c’était possible depuis le début. La fonction lit un chemin ou accepte un objet de type fichier.

Je n’avais qu’à convertir mon objet de type fichier retourné par urlopen en un bytestream avec :


from io import BytesIO
wb = load_workbook(filename=BytesIO(input_excel.read()))


et je peux lire chaque élément de données dans mon tableur Google.

Répondre

Revenir à « Excel & VBA »