【MATLAB】 템플릿을 사용하여 PowerPoint 슬라이드 작성 자동화: MATLAB Report Generator 편

소개



시고토에서 정기적으로 어떤 집계를 파워포에 모으고 있었습니다만, MATLAB로 데이터 모아, 그래프를 복사해···등 30분 정도 걸리는 작업이 수수하게 귀찮습니다.

「뭐, 매일 하는 일이 아니고··」라고 참아 하고 있었습니다만, 2020년은 「지루한 것은 MATLAB에 하자」라고 하는 것으로, 일념 발기해 자동화.

이 시점에서 빠진 점과 PowerPoint 템플릿의 사용 예를 소개합니다.

환경


  • MATLAB R2019b
  • MATLAB Report Generator

  • 이번에는 MATLAB Report Generator를 사용하지만 COM 서버를 사용하는 방법에 익숙하다면 MATLAB만으로도 할 수 있다고 생각합니다.

    PowerPoint 템플릿 활용



    이전에 작성한 【MATLAB】PowerPoint 슬라이드 작성 자동화에서는 기계 학습 평가 결과를 정리하는 작업을 자동화했습니다. 다만, 화상의 위치 등을 시행착오해 특정해, 코드내에 직접 써.

    표시 위치 등 변경의 필요가 없으면 특별히 곤란하지 않다고는 생각합니다만, 메인터넌스적으로 유감인 예였습니다. 죄송합니다. 이번에는 조금만 늘어나 PowerPoint 템플릿을 사용한 예를 소개합니다.

    샘플 코드



    좋은 소재가 생각나지 않았습니다만, 실제로 도움이 될지 어떨지는, 여러분의 상상력 나름…

    MATLAB 코드: 사이코로 보고서
    %% 事前設定
    % ファイル名に今日の日付を使います
    reportDate = datetime; 
    reportDate.Format = 'yyyy-MM-dd';
    
    % 関連ライブラリの読み込み
    import mlreportgen.ppt.*;
    
    % 事前作成したテンプレートからスライド作成
    pres = Presentation(fileName,'sampleTemplate.potx');
    
    %% タイトルスライド作成
    % テンプレートにある "Title Slide" レイアウトを使用
    titleSlide = add(pres,'Title Slide');
    
    % ファイル名やタイトル
    fileName     = "sampleReport" + string(reportDate);
    titleText    = "サンプルレポート";
    subTitleText = "作成日" + string(reportDate);
    
    % プレースホルダの内容を入れ替え
    replace(titleSlide,'Title',titleText);
    replace(titleSlide,'Subtitle',subTitleText);
    
    %% ここからレポートページ
    % さいころを N 回振って、出る目の回数を集計します。
    names = ["one","two","three","four","five","six"];
    
    for ii=1:5 % 10回 から 10万回まで
        N = 10^ii;
    
        % 1 から 6 までの整数を生成
        diceResults = randi(6,[N,1]);
        % それぞれの出目の回数を集計
        counts = histcounts(diceResults);
        [countsSorted,idx] = sort(counts,'descend');
    
        % ヒストグラムプロット作成
        hFigure = figure(1);
        histogram(diceResults,'Normalization','probability');
        title('Histogram of Each Occurenace');
        ha = gca;
        ha.FontSize = 20;
    
        % 画像として保存して後に、パワポにコピー
        imgPath = saveFigureToFile(hFigure);
        pictureObj = Picture(imgPath);
    
        % スライドタイトル
        slideTitle = "Uniformly Distributed? (N = " + string(N) + ")";
    
        % 事前に準備しておいた Custom レイアウトからページ作成
        slide = add(pres, 'Custom');
        replace(slide,'Title',slideTitle); % タイトル
        replace(slide,'Picture Placeholder Big', pictureObj); % 真ん中はヒストグラムを配置
    
        % 出た回数順にトップ5:出た回数と画像を配置
        topfive = names(idx);
        for jj=1:5
            % 画像は事前に用意したものを使用
            imagePath = "./images/" + topfive(jj) + ".png";
            if ~exist(imagePath,'file') % 念のため画像がない場合
                imagePath = "./images/a.png";
            end
            pictureObj = Picture(char(imagePath));
            replace(slide,"Picture Placeholder " + jj, pictureObj);
            replace(slide,"Text Placeholder " + jj, string(countsSorted(ii)));
        end
    
        % hFigure を閉じる
        if( isvalid(hFigure) )
            close(hFigure);
        end
    end
    
    %% 以上のページをもとにパワポ作成
    % msgbox でダイアログ出してみる
    hMsg = msgbox('Generating PowerPoint report...');
    
    % pres を閉じておきます。
    close(pres);
    if(ispc) % できたパワポを開く
        winopen(pres.OutputPath);
    end
    
    % ダイアログ閉じる
    if( isvalid(hMsg) )
        close(hMsg);
    end
    
    




    네, 상상대로의 결과군요. 얼마 안되는 이미지는 미리 만들어야 합니다만, 이런 느낌의 리포트를 클릭 1개로 할 수 있습니다.

    사용 장소가 있을까요?

    참고까지, 파와포의 템플릿은 이쪽: minoue-xx/SlideTemplateExample_Qiita20200120

    빠진 포인트



    MATLAB이라고 하는 것보다 PowerPoint측의 이야기입니다만, 템플릿의 「플레이스홀더명」과 「콘텐츠 오브젝트명」을 표시하는 방법을 모르고 있었습니다.

    예를 들면
    
    %% タイトルスライド作成
    % テンプレートにある "Title Slide" レイアウトを使用
    titleSlide = add(pres,'Title Slide');
    
    % ファイル名やタイトル
    fileName     = "sampleReport" + string(reportDate);
    titleText    = "サンプルレポート";
    subTitleText = "作成日" + string(reportDate);
    
    % プレースホルダーの内容を入れ替え
    replace(titleSlide,'Title',titleText);
    replace(titleSlide,'Subtitle',subTitleText);
    

    라고 하는 형태로, 'Title' 나 'Subtitle' 등의 이름을 MATLAB 측에서 참조하면서 슬라이드를 구성해 갑니다만, 그 이름을 어디에서 확인할 수 있는지··


    여기 있었습니다. [Home] -> [Select] -> [Selection Pane]을 클릭하면



    이런 느낌. 자리 표시자의 이름을 클릭하면 원하는 이름으로 변경할 수 있습니다.

    공식 페이지로는 PowerPoint 템플릿 요소에 액세스의 「플레이스홀더명과 컨텐츠 오브젝트명의 표시와 변경」에도 상세한 해설이 있습니다.

    요약



    사이코로를 N 회 흔들어··라고 리포트 쓰는 사람 없다고 생각합니다만, 샘플로서 도움이 되면 기쁩니다.

    제 경우에는 데이터베이스에서 데이터를 끌어오고(Database Toolbox) , 정기적으로 변화하는 랭킹 같은 것을 정리하는데 이번에 소개한 템플릿을 사용하고 있습니다.

    좋은 웹페이지 즐겨찾기