Folie bearbeiten (Powerpo für Google) mit Python (kostengünstiger RPA-Fall mit Google API und Python)

Einführung

Wie oft haben Sie die Möglichkeit, Präsentationen auf Google Slide oder PowerPoint zu erstellen? Es wird erwartet, dass viele Menschen viel Zeit in ihrer Arbeit verbringen.

Wenn Sie Präsentationsmaterialien bedienen können, die mit Python viel Zeit in Anspruch nehmen, und wenn Sie die Präsentationsinhalte automatisch bearbeiten und aktualisieren können, führt dies mit Sicherheit zu einer geschäftlichen Effizienz. Darüber hinaus kann Google Slide in das ppt-Format konvertiert und als Power Point heruntergeladen werden. Lassen Sie uns nun mit Google Slide im beliebten Python arbeiten.

Überblick

In diesem Artikel veröffentlichen wir eine Python-Klasse zum "Lesen / Schreiben / Löschen" von Titel und Text von Slide in Google Drive. Ein Beispiel für die Bearbeitung der Tabelle in Folie wird in einem anderen Artikel erläutert.

Dieser Artikel basierte ursprünglich auf der Google API-Referenz. Dieses Mal werde ich ein Beispiel für das Definieren, Instanziieren und Verwenden einer Klasse vorstellen.

Sie können mehrere Folien gleichzeitig bearbeiten, indem Sie sie instanziieren. Probieren Sie es also aus. Außerdem ist Class nur ein Beispiel. Wenn Sie interessiert sind, passen Sie es bitte selbst an.

Annahme

Verfahren

** 1. Bereiten Sie die folgende Folie vor ** (Die erste Seite) スクリーンショット 2020-02-22 22.57.51.png (2. Seite) スクリーンショット 2020-02-22 22.58.23.png

** 2. Erstellen Sie ipynb mit Jupyter Notebook, kopieren Sie die folgende Klasse / Def und führen Sie sie aus. **

Code anzeigen

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


** 3. Erstellen Sie eine Instanz basierend auf der definierten Klasse mit der Folien-ID in 1. im vorherigen Abschnitt als Argument **

#PRESENTATION_Geben Sie ID als Argument für ID ein(str)
test_slides = SlidesApi(PRESENTATION_ID='XXXXXXXXXXX') 

Sobald Sie diese Instanz erstellen, extrahiert Slide eine Liste aller Blattelemente (Titel / Text / Tabelle usw.).

** 4. Überprüfen Sie die Liste der von Folie erhaltenen Elemente mit Druck **

print(test_slides.page_element_list)
#Ausgabeergebnis
[{'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']}]

Das ist schwer zu verstehen, also lasst es uns mit Pandas konvertieren

** 5. Konvertieren Sie die Python-Liste in Schritt 4 in Pandas Dataframe und überprüfen Sie den Lesewert **

Mach Folgendes:

import pandas as pd
df = pd.DataFrame(test_slides.page_element_list)
df.loc[:, ['page', 'type', 'objectId', 'contents']]

image.png

Alle Elemente, aus denen die Folie besteht, werden aufgelistet. Beachten Sie jedoch, dass der Seitenindex aufgrund der Art der API bei 0 statt bei 1 beginnt.

Wie Sie vielleicht wissen, wenn Sie mit der Master-Funktion von Slide vertraut sind, weist das Element von Slide die folgenden Hauptattribute auf.

Bitte beziehen Sie sich auf das in Schritt 1 angegebene Seitenbild, um festzustellen, welches Element welches Attribut hat.

** 6. Verwenden Sie die Methode, um den Körper (KÖRPER) der zweiten Seite zu löschen **

Löschen wir den Body (BODY) der zweiten Seite mit der Methode der Instanz. Gemäß der Extraktionsergebnis-Tabelle lautet die ID des Körpers (BODY) der zweiten Seite (Seite 1) "g600b545905_0_2".

image.png

Mach Folgendes:

test_slides.clear_shape_contents('g600b545905_0_2')

** 7. Überprüfen Sie, ob die Wertlöschung wiedergegeben wird ** Wenn ich die Folie überprüfe, wird "Klicken, um Text hinzuzufügen" angezeigt und der Text verschwindet.

スクリーンショット 2020-02-22 23.31.51.png

** Schreiben Sie den Inhalt des Textes auf Seite 8.2 **

Schreiben Sie auf der zweiten Seite einen neuen Wert in den gelöschten Körper (BODY). Schreiben Sie "Beispieländerung" mit der folgenden Methode.

test_slides.writes_text_to_shape(objectId = 'g600b545905_0_2',text = "sample change" ,default_index = 0)

** Überprüfen Sie den geschriebenen Text auf Seite 9.2 ** Wenn Sie die Folie überprüfen, wird "Beispielwechsel" angezeigt.

スクリーンショット 2020-02-22 23.35.43.png

Recommended Posts

Folie bearbeiten (Powerpo für Google) mit Python (kostengünstiger RPA-Fall mit Google API und Python)
Bearbeiten Sie die Google-Tabelle mit Python (kostengünstiger RPA-Fall mit Google API und Python)
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Kostengünstiger RPA mit Google API und Python -Post-Tabellendaten auf Folien: Anwendungsfallübersicht-
Google Cloud Vision API-Beispiel für Python
Erstellen und bearbeiten Sie Tabellenkalkulationen in einem beliebigen Ordner auf Google Drive mit Python
Datenerfassung von der Analytics-API mit dem Google API-Client für die Python Part 2-Webanwendung
Kausales Denken und kausale Suche von Python (für Anfänger)
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Zeigen Sie die Google Maps-API mit Rails und Pin-Anzeige an
Tweet (API 1.1) mit Google App Engine für Python
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Automatisieren Sie das Entfernen des Hintergrunds für die neuesten Porträts in einem Verzeichnis mit Python und API
Erstellen Sie einen API-Server, um den Betrieb der Front-Implementierung mit Python3 und Flask zu überprüfen
C-Sprache, Java, Python-Benchmarks mit Primfaktorisierung
Automatisches Folgen auf Twitter mit Python und Selen! (RPA)
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Einfache Buchregistrierung mit Google Books API und Rails
PIL in Python unter Windows8 (für Google App Engine)
Erste Schritte mit Google App Engine für Python und PHP
Sprachtranskriptionsverfahren mit Python und Google Cloud Speech API
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Installieren Sie tweepy mit pip und verwenden Sie es für API 1.1
Lassen Sie von Google Text-to-Speech Audiodaten (Kommentare) für Videomaterial erstellen (mit C # - und Python-Beispielen).
Einfache Verwendung der Nifty Cloud API mit Botocore und Python
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
[Python] GUI zum Einfügen des TeX-Formats in PowerPoint mit 2 Klicks [PowerPoint]
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
Installationsverfahren für Python und Ansible mit einer bestimmten Version
(Für mich) Flask_8 (Hinzufügen / Bearbeiten / Löschen in Datenbank mit Python)
Analysieren Sie Aktien mit Python und suchen Sie nach günstigen Handelsphasen
Bibliothek zur Angabe eines Nameservers in Python und Dig
Stellen Sie die umgekehrte Geokodierung auf Japanisch mit der Python Google Maps-API bereit
Spielen Sie mit der YouTube Data API v3 mit dem Google API Python Client
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Verwenden Sie die Trello-API mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Verwenden Sie die Twitter-API mit Python
Lernen Sie Python mit Google Colaboratory
Web-API mit Python + Falcon
Rufen Sie die API mit python3 auf.
Greifen Sie mit Python auf Google Drive zu
Google Drive API-Tipps (Python)
Funktioniert mit Python und R.
Führen Sie Jupyter mit der REST-API aus, um Python-Code zu extrahieren und zu speichern
Erstellen Sie mit Python und GAS Termine für AtCoder-Wettbewerbe in Google Kalender
Erhalten Sie Conversions und Einnahmen mit der Google Analytics-API und melden Sie sich bei Slack
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Crawlen mit Python und Twitter API 2-Implementierung der Benutzersuchfunktion
Ausgabe von Firebase-Authentifizierungstoken in Python und Token-Validierung mit Fast API