À quelle fréquence avez-vous la possibilité de créer des présentations sur Google Slide ou PowerPoint? On s'attend à ce que de nombreuses personnes consacrent beaucoup de temps à leur travail.
Si vous pouvez utiliser des supports de présentation qui prennent beaucoup de temps avec Python, et si vous pouvez modifier et mettre à jour automatiquement le contenu de la présentation, cela conduira sûrement à une efficacité opérationnelle. De plus, Google Slide peut être converti au format ppt et téléchargé en tant que Power Point. Travaillons maintenant avec Google Slide dans le populaire Python.
Dans cet article, nous publierons une classe Python pour «lire / écrire / effacer» le titre et le corps de Slide dans Google Drive. Un exemple d'utilisation pour modifier le tableau dans la diapositive sera expliqué dans un autre article.
Cet article était à l'origine basé sur la référence de l'API Google, et cette fois je présenterai un exemple de définition, d'instanciation et d'utilisation d'une classe.
Vous pouvez modifier plusieurs diapositives en même temps en les instanciant. Veuillez donc essayer. Aussi, Class n'est qu'un exemple, donc si vous êtes intéressé, veuillez le personnaliser vous-même.
** 1. Préparez la diapositive suivante ** (La première page) (2e page)
** 2. Créez ipynb avec Jupyter Notebook, copiez et exécutez le Class / Def suivant à l'étape **
<détails> ** 3. Créez une instance basée sur la classe définie avec l'ID de diapositive en 1. dans la section précédente comme argument ** Dès que vous créez cette instance, Slide extrait une liste de tous les éléments de la feuille (titre / corps / tableau, etc.). ** 4. Consultez la liste des éléments obtenus à partir de la diapositive avec impression ** C'est difficile à comprendre, alors convertissons-le avec Pandas ** 5. Convertissez la liste Python à l'étape 4 en Pandas Dataframe et vérifiez la valeur lue ** Procédez comme suit: Tous les éléments qui composent la diapositive sont répertoriés. Cependant, notez qu'en raison de la nature de l'API, l'index de page commence à 0 au lieu de 1. De plus, comme vous le savez peut-être si vous connaissez la fonction principale de Slide, Slide's Element possède les attributs principaux suivants. Veuillez vous référer à l'image de la page donnée à l'étape 1 pour déterminer quel élément a quel attribut. ** 6. Utilisez la méthode pour effacer le corps (BODY) de la deuxième page ** Supprimons le corps (BODY) de la deuxième page en utilisant la méthode de l'instance.
Selon le tableau des résultats d'extraction, l'ID du corps (BODY) de la deuxième page (page 1) est "g600b545905_0_2". Procédez comme suit: ** 7. Vérifiez si l'effacement de la valeur est reflété **
Lorsque je vérifie la diapositive, il est dit «Cliquez pour ajouter du texte» et le texte disparaît. ** Écrivez le contenu du texte à la page 8.2 ** Écrivez une nouvelle valeur dans le corps effacé (BODY) sur la deuxième page.
Écrivez «exemple de modification» en utilisant la méthode suivante. ** Vérifiez le texte écrit à la page 9.2 **
Lorsque vous vérifiez la diapositive, il est dit "changement d'échantillon".
Recommended Posts
from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
class SlidesApi:
def __init__(self,PRESENTATION_ID):
self.presentation_id = PRESENTATION_ID
self.service = self.launch_api()
self.read_slides()
self.get_elements()
def launch_api(self):
SCOPES = ['https://www.googleapis.com/auth/presentations']
creds = None
if os.path.exists('slede_token.pickle'):
with open('slede_token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('slede_token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('slides', 'v1', credentials=creds)
return service
def read_slides(self):
presentation = self.service.presentations().get(presentationId=self.presentation_id).execute()
self.slides = presentation.get('slides')
def get_elements(self):
self.read_slides()
self.page_element_list = []
for page_num in range(0,len(self.slides),1):
for element in self.slides[page_num]['pageElements']:
if "shape" in list(element.keys()):
self.page_element_list.append({"page": page_num,"type":element['shape']['placeholder']['type'],\
"objectId":element['objectId'],"contents":extract_text_from_shape(element['shape'])})
elif "table" in list(element.keys()):
self.page_element_list.append({"page": page_num,"type":"TABLE",\
"objectId":element['objectId'],"contents":extract_text_from_table(element['table'])})
return self.page_element_list
def find_shape_by_page(self,find_type,find_page):
self.result_shape = []
for lst in self.page_element_list:
if (lst['page'] == find_page) and (lst['type'] == find_type):
self.result_shape.append(lst)
return self.result_shape
def get_shape(self,find_type,find_page = None,find_title = None):
self.result_shape = []
if find_page is not None:
self.result_shape= self.find_shape_by_page(find_type,find_page)
elif find_title is not None:
page_num = None
for lst in self.page_element_list:
if (find_title in lst['contents'][0]) and (lst['type'] == find_type):
page_num = lst['page']
if page_num is not None:
self.result_shape = self.find_shape_by_page(find_type,page_num)
return self.result_shape
def clear_shape_contents(self,objectId):
requests = []
requests.append({
"deleteText": {
"objectId": objectId,
"textRange": {
"type": "ALL",
}
}
})
try:
body={'requests':requests}
response=self.service.presentations().batchUpdate(presentationId=self.presentation_id, body=body).execute()
self.read_slides()
self.get_elements()
print("Result: Clear the contents successfully")
except:
print("Exception: Failed to clear contents in the table ")
def writes_text_to_shape(self,objectId,text,default_index = 0):
requests = []
requests.append({
"insertText": {
"objectId": objectId,
"text": text,
"insertionIndex": default_index
}})
try:
body={'requests':requests}
response= self.service.presentations().batchUpdate(presentationId=self.presentation_id, body=body).execute()
self.read_slides()
self.get_elements()
except:
print("Exception: Failed to add contents to the table ")
def extract_text_from_shape(element_dict):
text_box = []
if "text" not in list(element_dict.keys()):
pass
else:
element_dict['text']['textElements']
for lst in element_dict['text']['textElements']:
if "textRun" in list(lst.keys()):
text_box.append(lst["textRun"]['content'])
return text_box
#PRESENTATION_Entrez l'ID comme argument de l'ID(str)
test_slides = SlidesApi(PRESENTATION_ID='XXXXXXXXXXX')
print(test_slides.page_element_list)
#Résultat de sortie
[{'type': 'CENTERED_TITLE', 'objectId': 'i0', 'page': 0, 'contents': ['Page1 Sample Tiltle\n']}, {'type': 'SUBTITLE', 'objectId': 'i1', 'page': 0, 'contents': ['Page1 Sample Subtitle\n']}, {'type': 'TITLE', 'objectId': 'g600b545905_0_1', 'page': 1, 'contents': ['Page2 Sample Title\n']}, {'type': 'BODY', 'objectId': 'g600b545905_0_2', 'page': 1, 'contents': ['Page2 body description 1\n', 'Page2 body description 2\n', 'Page2 body description 3\n', '\n']}, {'type': 'TABLE', 'objectId': 'g634fca277e_0_0', 'page': 1, 'contents': [['a\n', 'a\n', 'a\n'], ['a\n', 'a\n', 'a\n'], ['a\n', 'a\n', 'a\n'], ['a\n', 'a\n', 'a\n']]}, {'type': 'TABLE', 'objectId': 'g294209d42ab89e2c_1', 'page': 1, 'contents': [['b\n', 'b\n', 'b\n'], ['b\n', 'b\n', 'b\n'], ['b\n', 'b\n', 'b\n'], ['b\n', 'b\n', 'b\n']]}, {'type': 'TITLE', 'objectId': 'g600b545905_0_6', 'page': 2, 'contents': ['Page3 Sample Title\n']}, {'type': 'BODY', 'objectId': 'g600b545905_0_7', 'page': 2, 'contents': ['Page3 body description 1\n']}]
import pandas as pd
df = pd.DataFrame(test_slides.page_element_list)
df.loc[:, ['page', 'type', 'objectId', 'contents']]
test_slides.clear_shape_contents('g600b545905_0_2')
test_slides.writes_text_to_shape(objectId = 'g600b545905_0_2',text = "sample change" ,default_index = 0)