M365関連 プログラム 技術

PowerShellでファイル読み込み(PowerPoint)

PowerPointファイルを読み込んでみる

読み込むファイルの種類

今回、紹介するファイル読み込みは以下の拡張子が対象です
・PowerPointファイル(.ppt / .pptx / .pptm)

前提条件

Word、Excel、PowerPointといったOfficeファイル形式を読み込む際は
実行環境に読み込み対象とするWord、Excel、PowerPointといったデスクトップアプリが
あらかじめインストールされており、ライセンス等の認証が完了している必要があります
今回紹介する方法がそのアプリの機能を使用しているためです

実際に読み込む

PowerPointファイルを開く

PowerPointに対して処理する際にパスワードがかかっている場合にパスワードを使用して開くようにしていますもし、パスワードがかかっていない場合はパスワードの値は無視して開くようになっています
PowerPointだけOpenメソッドにパスワードを渡す場所がないため、PowerPointのパスの後ろにくっつけて渡す形になります

$pptx = New-Object -ComObject PowerPoint.Application
$readPass = "PowerPointを開く際に使用するパスワード"
$pptOpen = "PowerPointファイルパス::" + $readPass
$slides = $pptx.presentations.Open($pptOpen)

PowerPointファイル内を読み込む

PowerPoint内で各スライドに設定されているハイパーリンクやテキストボックス、図形等に記載されているテキストを読み込んでいます

$slides.Slides | ForEach-Object {
    
    $_.Hyperlinks | ForEach-Object {
        Write-Host $_.Address
    }

    $_.Shapes | ForEach-Object {

        if($_.HasTextFrame){
            Write-Host $_.TextFrame.TextRange.text
        }
        elseif($_.HasTable){
            $_.Table.Columns | ForEach-Object {
                $_ | ForEach-Object {
                    Write-Host $_.Shape.TextFrame.TextRange.text
                }
            }
        }elseif($_.HasChart){
            if($_.Chart.HasTitle){
                Write-Host $_.Chart.Title
            }
        }
        elseif($_.HasSmartArt){
            $_.SmartArt.Nodes | ForEach-Object {
                Write-Host $_.TextFrame2.TextRange.text
            }
        }
        #グループの場合(msoGroupの値は6)
        elseif($_.Type -eq 6){
            $shp.GroupItems | ForEach-Object {
                if($_.HasTextFrame){
                    Write-Host $_.TextFrame.TextRange.text
                }
            }
        }
    }
}

開いたPowerPointを閉じる

以下はPowerPointを読み込んだ後始末の決まった作法みたいなものになるのでそのまま使用してください。PowerPointを読み込むときに使用したメモリーを開放したり、PowerPointタスクを終了させたりしています

if($slides){
    $slides.Close()
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($slides) | Out-Null
    $slides = $null
    Remove-Variable -Name slides -ErrorAction SilentlyContinue
}

[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
[System.GC]::Collect()

if($pptx){
    $pptx.Quit()
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($pptx) | Out-Null
    $pptx = $null
    Remove-Variable -Name pptx -ErrorAction SilentlyContinue
    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers()
    [System.GC]::Collect()
}

最後に

今回はPowerPoint内の様々な箇所からのテキスト読み込みをしてみました
WordやExcelの読み込みも別の記事で紹介します
全体のコードはGitHubにアップしているので参考になれば

サンプル
BlogSampleCodeProjects/PowerShell_FileLoad/PowerPointFileLoad.ps1 at main · nasuton/BlogSampleCodeProjects · GitHub
BlogSampleCodeProjects/PowerShell_FileLoad/PowerPointFileLoad.ps1 at main · nasuton/BlogSampleCodeProjects · GitHub

Project for sample code used in the blog.(Blogで記載しているサンプルコード ...

続きを読む

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

お問い合わせ
お問い合わせ  | アドバンスド・ソリューション株式会社
お問い合わせ | アドバンスド・ソリューション株式会社

お問い合わせはこちら

-M365関連, プログラム, 技術
-,