[Python] Filtrer les feuilles de calcul avec gspread

Objectif

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.

Fiche échantillon

test_sheet.png

J'utiliserai cette feuille.

code

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

test_sheet2.png

Description du code

Je vais vous expliquer étape par étape.

Développement de classeurs

#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

Filtre

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.

référence

API Reference

Recommended Posts

[Python] Filtrer les feuilles de calcul avec gspread
Traitement d'image par Python 100 knock # 10 filtre médian
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
Traitement d'image par Python 100 knock # 12 motion filter
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Traitement d'image par Python 100 knock # 9 Filtre Gaussien
Micro-ordinateur avec Python
Cast avec python
Extraction de bords avec python + OpenCV (filtre Sobel, filtre laplacien)
Suivi des objets verts avec python + numpy (filtre à particules)
[Python] Dépannage avant d'accéder à Google Spreadsheet avec gspread
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
Liste de filtres en Python
Publier des tweets avec python
Utiliser mecab avec Python 3
[Python] Redirection avec CGIHTTPServer
Analyse vocale par python
Pensez à yaml avec python
Utiliser Kinesis avec Python
Premiers pas avec Python
Utiliser DynamoDB avec Python
Getter Zundko avec python
Gérez Excel avec python
Loi d'Ohm avec Python