Gérer les classeurs de graphiques dans les présentations avec Python
Vue d’ensemble
Cet article explique comment travailler avec les classeurs de graphiques dans Aspose.Slides. Il montre comment lire et écrire des données de graphique via des flux de classeur, utiliser les cellules du classeur comme libellés de données de graphique, accéder aux collections de feuilles de calcul et spécifier le type de source de données pour les valeurs de graphique.
Il couvre également le travail avec des classeurs externes en tant que sources de données de graphiques. Les exemples démontrent comment créer et affecter un classeur externe, récupérer le chemin d’un classeur externe lié à un graphique et modifier les données du graphique lorsque le classeur est disponible.
Lire et écrire des données de graphique à partir d’un classeur
Aspose.Slides fournit des méthodes pour lire et écrire des classeurs de données de graphique (qui contiennent des données de graphique modifiées avec Aspose.Cells). Remarque: les données de graphique doivent être organisées de la même manière ou présenter une structure similaire à la source.
Le code Python suivant montre une opération d’exemple :
import aspose.slides as slides
with slides.Presentation("chart.pptx") as presentation:
chart = presentation.slides[0].shapes[0]
data_stream = chart.chart_data.read_workbook_stream()
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
data_stream.seek(0)
chart.chart_data.write_workbook_stream(data_stream)
Définir une cellule de classeur comme libellé de données de graphique
Parfois, vous avez besoin que les libellés de graphique proviennent directement des cellules du classeur de données sous‑jacent. Aspose.Slides vous permet de lier les libellés de données à des cellules de classeur spécifiques afin que le texte du libellé reflète toujours la valeur de la cellule. L’exemple ci‑dessous montre comment activer les libellés « valeur‑dé‑cellule » et pointer les libellés sélectionnés vers des cellules personnalisées dans le classeur du graphique.
- Créer une instance de la classe Presentation.
- Obtenir une référence à la diapositive par son indice.
- Ajouter un graphique à bulles avec des données d’exemple.
- Accéder aux séries du graphique.
- Utiliser une cellule de classeur comme libellé de données.
- Enregistrer la présentation.
Le code Python suivant montre comment définir une cellule de classeur comme libellé de données de graphique :
import aspose.slides as slides
import aspose.slides.charts as charts
# Instanciez la classe Presentation qui représente un fichier de présentation.
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.BUBBLE, 50, 50, 600, 400, True)
series = chart.chart_data.series[0]
series.labels.default_data_label_format.show_label_value_from_cell = True
workbook = chart.chart_data.chart_data_workbook
series.labels[0].value_from_cell = workbook.get_cell(0, "A10", "Label 0")
series.labels[1].value_from_cell = workbook.get_cell(0, "A11", "Label 1")
series.labels[2].value_from_cell = workbook.get_cell(0, "A12", "Label 2")
presentation.save("chart.pptx", slides.export.SaveFormat.PPTX)
Gérer les feuilles de calcul
Le code Python suivant montre comment utiliser la propriété worksheets pour accéder à la collection de feuilles de calcul :
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.PIE, 50, 50, 400, 500)
workbook = chart.chart_data.chart_data_workbook
for i in range(len(workbook.worksheets)):
print(workbook.worksheets[i].name)
Spécifier le type de source de données
Le code Python suivant montre comment spécifier un type de source de données :
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.COLUMN_3D, 50, 50, 600, 400, True)
series_name = chart.chart_data.series[0].name
series_name.data_source_type = slides.charts.DataSourceType.STRING_LITERALS
series_name.data = "LiteralString"
series_name = chart.chart_data.series[1].name
series_name.data = chart.chart_data.chart_data_workbook.get_cell(0, "B1", "NewCell")
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Détecter les formats de classeur intégrés non pris en charge
Aspose.Slides ne prend pas en charge le format de classeur binaire Excel (.xlsb) qui peut être intégré dans certains graphiques. Vous pouvez utiliser la propriété embedded_workbook_type sur ChartData conjointement avec l’énumération WorkbookType pour détecter les formats non pris en charge et ignorer ces graphiques.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if not isinstance(shape, charts.Chart):
continue
chart = shape
chart_data = chart.chart_data
if (chart_data.data_source_type == charts.ChartDataSourceType.INTERNAL_WORKBOOK and
chart_data.embedded_workbook_type == charts.WorkbookType.WORKBOOK_BINARY_MACRO):
# Le classeur intégré est au format .xlsb, qui n’est pas pris en charge.
continue
# Lire ou modifier les données du classeur du graphique ici.
Classeurs externes
Aspose.Slides prend en charge l’utilisation de classeurs externes comme source de données pour les graphiques.
Définir des classeurs externes
En utilisant la méthode ChartData.set_external_workbook, vous pouvez affecter un classeur externe à un graphique comme source de données. Cette méthode peut également mettre à jour le chemin d’un classeur externe s’il a été déplacé.
Bien que vous ne puissiez pas modifier les données des classeurs stockés sur des emplacements ou ressources distants, vous pouvez toujours les utiliser comme sources de données externes. Si vous fournissez un chemin relatif pour un classeur externe, il est automatiquement converti en un chemin complet.
Le code Python suivant montre comment définir un classeur externe :
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.PIE, 50, 50, 400, 600, False)
chart.chart_data.set_external_workbook("external_workbook.xlsx")
presentation.save("chart_with_external_workbook.pptx", slides.export.SaveFormat.PPTX)
Le paramètre update_chart_data de la méthode set_external_workbook indique si le classeur Excel sera chargé.
- Lorsque
update_chart_dataest défini surFalse, seul le chemin du classeur est mis à jour ; les données du graphique ne sont pas chargées ni actualisées à partir du classeur cible. Utilisez ce réglage lorsque le classeur cible n’existe pas ou est indisponible. - Lorsque
update_chart_dataest défini surTrue, les données du graphique sont chargées et mises à jour à partir du classeur cible.
Créer des classeurs externes
En utilisant les méthodes read_workbook_stream et set_external_workbook, vous pouvez soit créer un classeur externe à partir de zéro, soit convertir un classeur interne en classeur externe.
Ce code Python montre le processus de création d’un classeur externe :
import pathlib
import aspose.slides as slides
import aspose.slides.charts as charts
workbook_path = "external_workbook.xlsx"
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.PIE, 50, 50, 400, 600)
workbook_data = chart.chart_data.read_workbook_stream().read()
with open(workbook_path, "wb") as file_stream:
file_stream.write(workbook_data)
full_path = str(pathlib.Path(workbook_path).resolve())
chart.chart_data.set_external_workbook(full_path)
presentation.save("chart_with_external_workbook.pptx", slides.export.SaveFormat.PPTX)
Obtenir le chemin du classeur source de données externe pour un graphique
Parfois, les données d’un graphique sont liées à un classeur Excel externe plutôt qu’aux données intégrées de la présentation. Avec Aspose.Slides, vous pouvez inspecter la source de données du graphique et, si c’est un classeur externe, lire le chemin complet du classeur.
- Créer une instance de la classe Presentation.
- Obtenir une référence à la diapositive par son indice.
- Obtenir une référence à la forme du graphique.
- Obtenir la source (ChartDataSourceType) qui représente la source de données du graphique.
- Vérifier si le type de source correspond au type de source de classeur externe.
Le code Python suivant montre l’opération :
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("chart_with_external_workbook.pptx") as presentation:
chart = presentation.slides[0].shapes[0]
source_type = chart.chart_data.data_source_type
if source_type == charts.ChartDataSourceType.EXTERNAL_WORKBOOK:
print(chart.chart_data.external_workbook_path)
Modifier les données du graphique
Vous pouvez modifier les données dans les classeurs externes de la même façon que vous modifiez les données dans les classeurs internes. Si un classeur externe ne peut pas être chargé, une exception est levée.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
chart = presentation.slides[0].shapes[0]
chart.chart_data.series[0].data_points[0].value.as_cell.value = 100
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
FAQ
Puis-je déterminer si un graphique spécifique est lié à un classeur externe ou intégré ?
Oui. Un graphique possède un type de source de données et un chemin vers un classeur externe ; si la source est un classeur externe, vous pouvez lire le chemin complet pour vous assurer qu’un fichier externe est utilisé.
Les chemins relatifs vers des classeurs externes sont‑ils pris en charge, et comment sont‑ils stockés ?
Oui. Si vous spécifiez un chemin relatif, il est automatiquement converti en chemin absolu. Cela facilite la portabilité du projet ; toutefois, la présentation stockera le chemin absolu dans le fichier PPTX.
Puis‑je utiliser des classeurs situés sur des ressources ou partages réseau ?
Oui, ces classeurs peuvent être utilisés comme source de données externe. Cependant, la modification directe de classeurs distants depuis Aspose.Slides n’est pas prise en charge ; ils ne peuvent être qu’une source.
Aspose.Slides écrase‑t‑il le fichier XLSX externe lors de l’enregistrement de la présentation ?
Non. La présentation stocke un lien vers le fichier externe et l’utilise uniquement pour la lecture des données. Le fichier externe lui‑même n’est pas modifié lors de l’enregistrement de la présentation.
Que faire si le fichier externe est protégé par mot de passe ?
Aspose.Slides n’accepte pas de mot de passe lors de la liaison. Une approche courante consiste à retirer la protection au préalable ou à préparer une copie décryptée (par exemple en utilisant Aspose.Cells) et à lier cette copie.
Plusieurs graphiques peuvent‑ils référencer le même classeur externe ?
Oui. Chaque graphique stocke son propre lien. S’ils pointent tous vers le même fichier, la mise à jour de ce fichier sera reflétée dans chaque graphique lors du prochain chargement des données.