[Python-pptx] Afficher les informations de police PowerPoint au format csv avec python

Contexte

On m'a fait remarquer que certaines polices sont incorrectes dans la revue de document PowerPoint. Vérifiez et corrigez une par une les polices différentes sur les diapositives de 100 pages ou plus. Je ne voulais pas le faire par inspection visuelle et je me demandais si je pouvais le faire efficacement car je pourrais faire le même travail à l'avenir.

python-pptx Il n'y a plus rien que vous ne puissiez faire avec python de nos jours! Après quelques recherches, j'ai trouvé que python-pptx peut fonctionner avec des fichiers PowerPoint de python. Page officielle: python-pptx

Image de l'objet

J'ai abordé un peu la mise en route officielle, en me référant aux articles des grands pionniers de Qiita. D'une manière ou d'une autre, j'ai une image, donc je vais la vider ci-dessous. (Si vous faites une erreur, veuillez la signaler ...)

Vue d'ensemble à vol d'oiseau

Presentation > slides[] > shapes[] > text_frame.paragraphs[] > runs[] スライド4.PNG

Correspondance entre les formes [] et la diapositive

la diapositive a les objets de cette diapositive dans des formes [] sous la forme d'un tableau. スライド5.PNG

Correspondance entre text_frame. Paragraphs [] et les diapositives

Parmi les formes, celles qui peuvent avoir des caractères (?) Peuvent avoir text_frame. Paragraphs []. J'obtiens souvent une erreur en essayant d'accéder avec des formes [n]. Paragraphs [m] ... スライド6.PNG

Correspondance entre les courses [] et la diapositive

Je peux changer la police de chaque caractère, mais je me suis toujours demandé comment je l'avais. Il semble qu'il ait une unité appelée run, et vous pouvez définir la police pour chacun. スライド7.PNG

Ce que j'ai fait

Videz tous les paragraphes et exécutions de toutes les diapositives dans csv. Définissez TARGET_FILE_PATH sur le chemin d'accès au fichier PowerPoint cible et OUTPUT_FILE_PATH sur le chemin d'accès au fichier csv de sortie.

python-pptx.py


from pptx import Presentation
from pptx.util import Pt
import csv

TARGET_FILE_PATH = './targetFile/targetFile.pptx'
OUTPUT_FILE_PATH = './output.csv'
FONT_SIZE_DIVESER = 12700
# ["pptxNom du fichier","numéro de diapositive","numéro d'objet","numéro de série","Type d'objet"," font.name"," font.size"," text"]
def export_slide_fonts_and_text():
  outputArray = []
  outputArray.append(["pptxNom du fichier","numéro de diapositive","numéro d'objet","numéro de paragraphe","numéro de série","Type d'objet"," font.name"," font.size"," text"])
  
  #Lire le fichier ppt
  prs = Presentation(TARGET_FILE_PATH)

  slide_number = 0
  #Chargement des diapositives
  for slide in prs.slides:
    shape_number = 0
    #Traité par forme
    for shape in slide.shapes:
      if not shape.has_text_frame:
        shape_number = shape_number + 1
        continue

      paragraph_number = 0
      #Sortie une fois au stade du paragraphe
      for paragraph in shape.text_frame.paragraphs:
        if(paragraph.font.size != None):
          fontSize = paragraph.font.size/FONT_SIZE_DIVESER
        else:
          fontSize = None
        outputArray.append([TARGET_FILE_PATH, slide_number, shape_number,paragraph_number, "-","paragraph", str(paragraph.font.name), str(fontSize), paragraph.text])

        run_number = 0
        #Sortie de chaque exécution
        for run in paragraph.runs:
          if(run.font.size != None):
            fontSize = run.font.size/FONT_SIZE_DIVESER
          else:
            fontSize = None
          outputArray.append([TARGET_FILE_PATH, slide_number, shape_number,paragraph_number, run_number, "run", str(run.font.name), str(fontSize), run.text])

          run_number = run_number + 1
        paragraph_number = paragraph_number + 1
      shape_number = shape_number + 1
    slide_number = slide_number +1

  #l'écriture
  with open(OUTPUT_FILE_PATH, 'w', encoding="shift-jis") as f:
    wirter = csv.writer(f, lineterminator='\n', quoting=csv.QUOTE_ALL)
    wirter.writerows(outputArray)

if __name__ == "__main__":
  export_slide_fonts_and_text()

Traitez un peu la sortie

Ce qui suit est ce qui a été produit par csv, collé sur Excel et coloré. En général, je sens que je peux faire ce que je veux! image.png

ToBe

Obtenez la valeur par défaut

Comme vous pouvez le voir dans Excel ci-dessus, il existe de nombreux endroits où le nom et la taille de la police sont "Aucun". Si la valeur n'est pas définie, elle fera référence à la valeur par défaut. Je pense que je peux l'obtenir en accédant à l'espace réservé ... Je voudrais enquêter un peu plus.

Le pionnier qui a été autorisé à référer

Je vous remercie…. Un immense merci ...! Résumé python-pptx Rapports automatiques avec python-pptx [Python] Générez des rapports powerpo à une vitesse explosive! Création de rapport automatique à l'aide de Python [PowerPoint] [python-pptx] https://qiita.com/code_440/items/22e8539da465686496d3

Recommended Posts

[Python-pptx] Afficher les informations de police PowerPoint au format csv avec python
Sortie vers un fichier csv avec Python
Écrire en csv avec Python
[Python] Ecrire dans un fichier csv avec Python
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
Sortir les caractères de couleur en joli avec python
Sortie du journal Python vers la console avec GAE
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
Comment lire un fichier CSV avec Python 2/3
Sortie CSV de la recherche Google avec [Python]! 【Facile】
Grattage de la nourriture avec python et sortie en CSV
Lire JSON avec Python et générer un CSV
J'ai essayé de sortir LLVM IR avec Python
Écrire des données CSV sur AWS-S3 avec AWS-Lambda + Python
Script Python pour obtenir des informations de note avec REAPER
Procédure pour charger MNIST avec python et sortie en png
Comment générer un CSV d'en-tête multiligne avec des pandas
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Connectez-vous à BigQuery avec Python
Lire csv avec des pandas python
Essayez la sortie Python avec Haxe 3.2
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Basculer python vers 2.7 avec des alternatives
Télécharger le fichier csv avec python
Obtenez des informations sur l'alambic avec Python
Essayez d'afficher diverses informations utiles pour le débogage avec python
Comment générer des informations supplémentaires lors de la sortie de journaux avec le module de journalisation de python
Convertir en chaîne lors de la sortie de la sortie standard avec le sous-processus Python
Extraire le jeu de données bigquery et la liste des tables avec python et la sortie en CSV
Python: comment utiliser async avec
Lien pour commencer avec python
Créer Apache Log CSV avec Python
Ravi de vous rencontrer avec python
Essayez d'exploiter Facebook avec Python
Comment importer des fichiers CSV et TSV dans SQLite avec Python
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Je veux sortir le début du mois prochain avec Python
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Convertir la liste en DataFrame avec python
Comment démarrer avec Python
[Note] Sortie Hello world avec python
Sortie du journal de test unitaire avec python
Que faire avec la sortie de PYTHON?
Gérer les fichiers Excel CSV avec Python
[Django] Commande pour générer QuerySet en csv
Générer du matériel pour la vidéo "J'ai essayé de chanter avec XX" [python-pptx]
Comment calculer la date avec python
Lire et écrire du CSV avec Python
Publiez facilement sur Twitter avec Python 3