PowerPointでオブジェクトを一覧にしてテキストファイルへ出力する。

背景

パワーポイントを使って、画像のフロア図面上に、PC等の機器をオブジェクト(シェイプ)としてプロットし、PC等配置図を作っているのを見かけました。何故器機配置図をパワーポイントで作っているのかは謎ですが。どうやら、フロア図面を作る部署ではCADが使えないとか、諸般の事情があるようです。そして、フロアごとにPC台数やプリンター等を算出しろとか来たみたいで、印刷して手作業で数えているのをみて?と思い、ちゃちゃっと作ってみました。今後も何度も数えそうなので。器機配置図を作るのにパワーポイントが最適ななのか?甚だ疑問ですが、環境には逆らえないという、制約があるそうです。


どんなものを作ってみたのか

あくまでもサンプルです。シェイプ又は画像に機器属性を割り当ててそれをタブ区切りテキストに出力するというものです。

2017-11-05 (4)

2017-11-05 (2)


コード


ソースSub ExportShapes()

    Dim sld As Slide
    Dim shp As Shape
    Dim oTextFile As String
    Dim oRow As String
    oTextFile = ActivePresentation.Path & "\Shapes.txt"
    Open oTextFile For Output As #1
    
    Print #1, "スライド番号(階数)" & vbTab; "大分類" & vbTab & "ID" & vbTab & "シリアル番号" & vbTab & "説明" & vbTab _
            & "中分類" & vbTab & "建屋" & vbTab & "座標" & vbTab & "設置場所" & vbTab _
            & "契約所管" & vbTab & "開始日" & vbTab & "終了日" & vbTab _
            & "再リース開始日" & vbTab & "再リース終了日" & vbTab & "固有属性1" & vbTab & "固有属性2" & vbTab & "固有属性3"
    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            If sld.SlideNumber <> 1 Then
                If shp.Type = msoGroup Then
                    oRow = sld.SlideNumber & vbTab & shp.Name
                    For Each gitem In shp.GroupItems
                        If gitem.HasTextFrame Then
                            oRow = oRow & vbTab & gitem.TextFrame.TextRange.Text
                        End If
                    Next gitem
                    Print #1, oRow
                Else
                    oRow = sld.SlideNumber & vbTab & shp.Name & vbTab & shp.TextFrame.TextRange.Text
                    Print #1, oRow
                End If
                
            End If
        Next shp
    Next sld
    
    Close #1
    MsgBox "Shapes.txtに書き出しました。"
    
End Sub

Sub VisiblePropertyFalse()

    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            If sld.SlideNumber <> 1 Then
                If shp.Type = msoGroup Then
                    For Each gitem In shp.GroupItems
                        If gitem.HasTextFrame Then
                            If gitem.Name <> "ID" Then
                                gitem.Visible = msoFalse
                            End If
                        End If
                    Next gitem
                End If
            End If
        Next shp
    Next sld
    MsgBox "IDのみ表示しました。"

End Sub

Sub VisiblePropertyAllTrue()

    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            If sld.SlideNumber <> 1 Then
                If shp.Type = msoGroup Then
                    For Each gitem In shp.GroupItems
                        If gitem.HasTextFrame Then
                            gitem.Visible = msoTrue
                        End If
                    Next gitem
                End If
            End If
        Next shp
    Next sld
    MsgBox "すべて表示しました。"

End Sub



使い方

スライドショーにすると最初のスライドにボタンがあります。エクスポートをクリックすると、パワーポイントファイルと同じ場所にShape.txtという名前でタブ区切りテキストが出力されます。

2017-11-05

それをEXCELにインポートする感じです。

2017-11-05 (1)


2017-11-05 (2)


エクスポート対象のシェイプ

  • 1スライド目は無視
  • タイトル行用に見出し行を出力
  • 2スライド目以降のすべてのシェイプ(画像も含む)が対象
  • グループ化されている場合は、グループ単位で1行にされてエクスポート
    • グループ化の場合は、シェイプのグループ内順序を統一うることを前提


表示内容の切り替え


機器配置図を考えると、不要な属性が多いので、IDだけ表示、すべての属性を表示の切り替えをできるようにしました。


IDのみを表示

2017-11-05 (6)

すべての属性を表示

2017-11-05 (8)


最後に


本来はDBと連携するのが望ましいような気がしますが、そんなもの作っている時間も知識もないので。


コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける