Es sieht so aus ↓
Rufen Sie bei Verwendung unter Windows die Datei ".py" aus dem unten stehenden Powershell-Cmdlet auf und führen Sie sie aus. Der Cmdlet-Name ist ziemlich lang, aber es sollte kein Problem geben, da die Vervollständigung funktioniert.
Es gibt auch einen direkteren Weg für die Arbeit mit Office-Produkten während der Ausführung, jedoch seit Powershell 6 [System.Runtime.InteropServices.Marshal]: : GetActiveObject ()
ist nicht mehr verfügbar, daher wird stattdessen pywin32 verwendet.
function Add-Image2ActivePptSlideWithPython {
<#
.SYNOPSIS
Verwenden Sie pywin32, um kontinuierlich Bilder in die aktuell geöffnete Powerpo-Folie einzufügen
#>
if ((Get-Process | Where-Object ProcessName -EQ "POWERPNT").Count -lt 1) {
return
}
$targetPath = @($input).Fullname
if (-not $targetPath) {
return
}
if ((Read-Host "Ist die Einstellung "Bilder in Datei nicht komprimieren" aktiviert?(y/n)") -ne "y") {
return
}
$tmp = New-TemporaryFile
$targetPath | Out-File -Encoding utf8 -FilePath $tmp.FullName #Mit Stückliste
#Platzieren Sie das unten beschriebene Python-Skript im selben Verzeichnis wie dieses Skript.
$pyCodePath = "{0}\activeppt_insert-image.py" -f $PSScriptRoot
'python -B "{0}" "{1}"' -f $pyCodePath, $tmp.FullName | Invoke-Expression
Remove-Item -Path $tmp.FullName
}
Zu Beginn [Bildkomprimierung deaktivieren](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) Ich überprüfe, ob es fertig ist (denn wenn Sie dies vergessen, sinkt die Auflösung des eingefügten Bildes).
Übergeben Sie in der eigentlichen Befehlszeile das Bildobjekt, das Sie einfügen möchten, wie unten gezeigt über die Pipeline.
ls -File | Add-Image2ActivePptSlideWithPython
Es gibt auch eine Möglichkeit, den Pfad des über die Pipeline übergebenen Bilds als Argument zu übergeben. In diesem Fall ist es jedoch schwierig, Sonderzeichen und die Obergrenze des Arguments zu umgehen, sodass es in eine temporäre Datei geschrieben wird, die mit "New-TemporaryFile" erstellt wurde. Selbst wenn zu diesem Zeitpunkt "UTF8" gemäß den Spezifikationen von Powershell angegeben wird, wird die Stückliste angehängt. Achten Sie daher auf den Zeichencode.
Die aufgerufene Python-Datei sollte folgendermaßen aussehen: Wenn Sie es mit Powerpo ausführen, fängt ActivePresentation
den laufenden Prozess ab.
Ich habe sichergestellt, dass auf dem Anrufer PowerPoint im Voraus ausgeführt wird, aber ich versuche nichts zu tun, wenn die Präsentation nicht geöffnet ist. Wenn Sie einen unsichtbaren Zombie-Prozess abfangen, wird der Prozess selbst beendet.
activeppt_insert-image.py
"""
Fügen Sie mit pywin32 eine Reihe von Bildern in die aktuell geöffnete PowerPoint-Folie ein
"""
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 (Ich frage mich, ob
GetActiveObject ()` bald implementiert wird ...)