Ça ressemble à ça ↓
En supposant une utilisation sous Windows, appelez le fichier .py
à partir de l'applet de commande PowerShell ci-dessous et exécutez-le. Le nom de l'applet de commande est assez long, mais il ne devrait y avoir aucun problème car la complétion fonctionne.
Il existe également un moyen plus direct pour travailler avec les produits Office pendant son exécution, mais depuis powershell 6 [System.Runtime.InteropServices.Marshal]: : GetActiveObject ()
n'est plus disponible, donc pywin32 est utilisé à la place.
function Add-Image2ActivePptSlideWithPython {
<#
.SYNOPSIS
Utilisez pywin32 pour insérer en continu des images dans la diapositive powerpo actuellement ouverte
#>
if ((Get-Process | Where-Object ProcessName -EQ "POWERPNT").Count -lt 1) {
return
}
$targetPath = @($input).Fullname
if (-not $targetPath) {
return
}
if ((Read-Host "Le paramètre "Ne pas compresser les images dans le fichier" est-il activé?(y/n)") -ne "y") {
return
}
$tmp = New-TemporaryFile
$targetPath | Out-File -Encoding utf8 -FilePath $tmp.FullName #Avec BOM
#Placez le script python décrit ci-dessous dans le même répertoire que ce script.
$pyCodePath = "{0}\activeppt_insert-image.py" -f $PSScriptRoot
'python -B "{0}" "{1}"' -f $pyCodePath, $tmp.FullName | Invoke-Expression
Remove-Item -Path $tmp.FullName
}
Au début, [Désactivez la compression d'image](https://support.office.com/ja-jp/article/%E7%94%BB%E5%83%8F%E3%81%AE%E5% 9C% A7% E7% B8% AE% E3% 82% 92% E7% 84% A1% E5% 8A% B9% E3% 81% AB% E3% 81% 99% E3% 82% 8B-81a6b603-0266- 4451-b08e-fc1bf58da658) Je vérifie si c'est fait (car si vous oubliez cela, la résolution de l'image insérée baissera).
Sur la ligne de commande réelle, transmettez l'objet image que vous souhaitez insérer via le pipeline comme indiqué ci-dessous.
ls -File | Add-Image2ActivePptSlideWithPython
Il existe également une méthode pour passer le chemin de l'image passée via le pipeline en tant qu'argument, mais dans ce cas, il est gênant d'échapper les caractères spéciaux et la limite supérieure de l'argument, donc il est écrit dans un fichier temporaire créé avec New-TemporaryFile
.
À ce stade, même si ʻUTF8` est spécifié selon les spécifications PowerShell, la nomenclature est attachée, donc faites attention au code de caractère.
Le fichier python appelé devrait ressembler à ceci: Si vous l'exécutez avec Powerpo en cours d'exécution, ʻActivePresentation` interceptera le processus en cours. Je me suis assuré que PowerPoint fonctionnait à l'avance, mais j'essaie de ne rien faire si la présentation n'est pas ouverte. De plus, si vous attrapez un processus zombie invisible, le processus lui-même sera interrompu.
activeppt_insert-image.py
"""
Utilisez pywin32 pour insérer une série d'images dans la diapositive PowerPoint actuellement ouverte
"""
import win32com.client
import argparse
class vb:
msoFalse = 0
msoTrue = -1
ppLayoutBlank = 12
def main(file_list_path):
pptApp = win32com.client.Dispatch("PowerPoint.Application")
if pptApp.Presentations.Count < 1:
if not pptApp.Visible:
pptApp.Quit()
return
with open(file_list_path, "r", encoding="utf_8_sig") as f:
all_lines = f.read()
image_path_list = all_lines.splitlines()
presen = pptApp.ActivePresentation
slide_width = presen.PageSetup.SlideWidth
slide_height = presen.PageSetup.SlideHeight
for img_path in image_path_list:
slide_index = presen.Slides.Count + 1
presen.Slides.Add(slide_index, vb.ppLayoutBlank)
last_slide = presen.Slides(slide_index)
inserted_img = last_slide.Shapes.AddPicture(
FileName = img_path,
LinkToFile = vb.msoFalse,
SaveWithDocument = vb.msoTrue,
Left = 0,
Top = 0
)
inserted_img.Left = (slide_width - inserted_img.Width) / 2
inserted_img.Top = (slide_height - inserted_img.Height) / 2
print(f"inserted: {img_path}")
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("file_list_path")
args = parser.parse_args()
main(args.file_list_path)
(´- \ ) .. oO (
GetActiveObject () `sera bientôt implémenté ...)