Je souhaite filtrer une feuille de calcul à l'aide de gspread. Puisqu'il n'y a pas de procédure autre que la référence officielle (auto-examen), je vais l'introduire.
J'utiliserai cette feuille.
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import os
#Trouvez l'alphabet à partir des nombres
def num2alpha(num):
if num<=26:
return chr(64+num)
elif num%26==0:
return num2alpha(num//26-1)+chr(90)
else:
return num2alpha(num//26)+chr(64+num%26)
#Le chemin où il est stocké
abs_path = f'{os.path.dirname(os.path.abspath(__file__))}\\'
# GoogleAPI
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
#Clé d'authentification
json_keyfile_path = f'{abs_path}credentials.json'
#Lire la clé du compte de service
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_keyfile_path, scope)
#Effectuer l'authentification OAuth pour pydrive
gauth = GoogleAuth()
gauth.credentials = credentials
drive = GoogleDrive(gauth)
#Dossier de stockage de la feuille de calcul
folder_id = 'ID de dossier'
#Obtenez une liste de fichiers dans le dossier de stockage de la feuille de calcul
file_list = drive.ListFile({'q': "'%s' in parents and trashed=false" % folder_id}).GetList()
#Extraire uniquement le nom du fichier de la liste des fichiers
title_list = [file['title'] for file in file_list]
#S'authentifier pour gspread
gc = gspread.authorize(credentials)
#ID de la feuille de calcul
sheet_id = [file['id'] for file in file_list if file['title'] == 'test']
sheet_id = sheet_id[0]
#Ouvrir le classeur
workbook = gc.open_by_key(sheet_id)
#Ouvrez la feuille de calcul
worksheet = workbook.worksheet('Feuille 1')
#Obtenez la dernière colonne saisie
last_column_num = len(list(worksheet.row_values(1)))
print(f'last_column_num:{last_column_num}')
#Convertir la dernière colonne du nombre en alphabet
last_column_alp = num2alpha(last_column_num)
print(f'last_column_alp:{last_column_alp}')
#Filtre
worksheet.set_basic_filter(name=(f'A:{last_column_alp}'))
Résultat d'exécution
last_column_num:3
last_column_alp:C
Je vais vous expliquer étape par étape.
#Le chemin où il est stocké
abs_path = f'{os.path.dirname(os.path.abspath(__file__))}\\'
# GoogleAPI
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
#Clé d'authentification
json_keyfile_path = f'{abs_path}credentials.json'
#Lire la clé du compte de service
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_keyfile_path, scope)
#Effectuer l'authentification OAuth pour pydrive
gauth = GoogleAuth()
gauth.credentials = credentials
drive = GoogleDrive(gauth)
#Dossier de stockage de la feuille de calcul
folder_id = 'ID de dossier'
#Obtenez une liste de fichiers dans le dossier de stockage de la feuille de calcul
file_list = drive.ListFile({'q': "'%s' in parents and trashed=false" % folder_id}).GetList()
#Extraire uniquement le nom du fichier de la liste des fichiers
title_list = [file['title'] for file in file_list]
#S'authentifier pour gspread
gc = gspread.authorize(credentials)
#ID de la feuille de calcul
sheet_id = [file['id'] for file in file_list if file['title'] == 'test']
sheet_id = sheet_id[0]
#Ouvrir le classeur
workbook = gc.open_by_key(sheet_id)
Premièrement, dans cette partie
Spécifier la clé d'authentification ↓ Accédez à Google Drive ↓ Spécifiez le dossier de stockage de la feuille de calcul ↓ Ouvrez le classeur en spécifiant le nom du fichier (nom de la feuille de calcul)
Nous faisons le traitement. Veuillez vous référer à l'article suivant pour plus de détails. Créer et modifier des feuilles de calcul dans n'importe quel dossier de Google Drive avec python Modifier la feuille de calcul Google en Python
Voici la partie filtre du sujet principal.
#Ouvrez la feuille de calcul
worksheet = workbook.worksheet('Feuille 1')
Tout d'abord, développez la feuille de calcul. Cette fois, le nom est «Feuille 1», spécifiez-la donc comme Feuille 1.
#Obtenez la dernière colonne saisie
last_column_num = len(list(worksheet.row_values(1)))
print(f'last_column_num:{last_column_num}')
Récupérez ensuite la dernière colonne de données saisie dans la feuille de calcul cible.
Résultat d'exécution
last_column_num:3
Comme vous pouvez le voir en regardant la feuille collée plus tôt, elle se trouve dans la troisième rangée, vous pouvez donc bien l'obtenir.
Cependant, il n'est pas possible d'appliquer un filtre tel quel, il est donc nécessaire de convertir la "troisième colonne" au format alphabétique. (Je l'ai essayé avec des valeurs numériques, mais cela n'a pas bien fonctionné, donc cela semble être une spécification de bibliothèque.)
#Trouvez l'alphabet à partir des nombres
def num2alpha(num):
if num<=26:
return chr(64+num)
elif num%26==0:
return num2alpha(num//26-1)+chr(90)
else:
return num2alpha(num//26)+chr(64+num%26)
#Convertir la dernière colonne du nombre en alphabet
last_column_alp = num2alpha(last_column_num)
print(f'last_column_alp:{last_column_alp}')
Résultat d'exécution
last_column_alp:C
J'ai réussi à convertir de 3 en C. J'ai utilisé celui de l'article suivant pour la fonction de conversion. Comment convertir des nombres et des alphabets entre eux en Python
Et enfin, filtrez.
#Filtre
worksheet.set_basic_filter(name=(f'A:{last_column_alp}'))
C'est tout ce qu'on peut en dire.
Si vous spécifiez au format "colonne de début: colonne de fin", toute colonne sera filtrée.
Dans ce cas, nous voulons filtrer les colonnes A à C, donc les spécifications ci-dessus sont utilisées.
Recommended Posts