目次

はじめに

MicrosoftのPowerPointは、プレゼンテーションのスライドだけでなく、ちょっとした資料の作成やヘルプなどの簡易的なドキュメントを作るのがとても楽なので、筆者はよく業務の中で使用しています。ドキュメントを作成するのにはWordを使ってもよいのですが、図の貼り付けやフリーフォーマット的に図や文章をちりばめるのには、Wordはちょっと使い辛いものがあります。

ということで、よく使っているPowerPointを使ってスライドショー的なツールを作りたいと思って、C#でベースとなるPowerPointファイルを編集して、ページを増やしたり、画像を貼ったりするツールが作れないか?と思ってC#でPowerPointの編集方法を調べてみました。

作りたいものができるかどうかは今後次第ですが、まずは、導入ということで、C#でPowerPointを編集するための環境作りについて紹介します。

まず、事前準備として、以下の環境を用意(インストール)します。
インストール手順はここでは省略します。(それほど難しくもないので...)

・Microsoft Visual Studio 2017 Community 2017
・Microsoft Office 2013 Plus
Officeのバージョン手持ちの2013にしました。この中にPowerPoint2013が入っています。


雛型ファイルの作成

まずは、編集するための元になる雛型ファイル(.pptx)を作ります。
今回はテスト的なものなので、適当なものを用意します。
ppte1-01.png


プロジェクトの作成

次に、Visual Studioのプロジェクトを作成します。
ppte1-02.png

今回は、「PptEditTest01」という名前のC#のフォームアプリケーションプロジェクトを作りました。
ppte1-03.png
.NET Frameworkのバージョンは、根拠はありませんが、4.0ならサポート範囲が広がる気がして、4.0にしました。

プロジェクトができると次のようになります。
ppte1-04.png

そしてここからが肝心なところですが、C#でPowerPointを編集するためには、次の参照を追加する必要があります。

・Microsoft Office 15.0 Object Library
・Microsoft PowerPoint 15.0 Object Library

それぞれ、以下のように参照を追加します。

プロジェクトの「参照」を右クリックして「参照の追加(R)」をクリックします。
ppte1-05.png

次に、「参照マネージャー」で「COM」を選択し、「Microsoft Office 15.0 Object Library」と「Microsoft PowerPoint 15.0 Object Library」をチェックして「OK」をクリックします。
ppte1-06.png

これで、プロジェクトの環境はできました。


試しにページのコピー

PowerPointファイルを操作できるかどうかを確認するためにも、まずは、簡単なフォームを作成します。
フォームのイメージは、以下のようなものです。
ppte1-07.png

雛型ファイルに最初に作ったpptxファイルを指定し、作成ファイルに新たなファイルとして編集したpptxファイルを作成します。
ボタンを押せば、ファイルの読み込み、編集、保存の一連の操作を行う処理を書いてみました。
コードは以下の通りです。(処理状況をフォーム下部のテキストボックスに出力しています)

var ppt = new Microsoft.Office.Interop.PowerPoint.Application();
var pres = ppt.Presentations;
var file = pres.Open(textBox1.Text, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
textBox2.AppendText("pptxファイルをオープンしました。\n");
file.Slides[1].Duplicate();// スライド1をコピー
textBox2.AppendText("1ページ目のスライド2ページ目にコピーしました。\n");
file.SaveAs(textBox3.Text);
textBox2.AppendText("別ファイル("+ textBox3.Text+ ")に保存しました。\n");
file.Close();
textBox2.AppendText("ファイルをクローズしました。\n");

このフォームのソースは以下の通りです。雛型ファイルと作成ファイルの指定部分も含まれています。

Form1.cs

using System;
using System.Windows.Forms;
using Microsoft.Office.Core;


namespace PptEditTest01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.FileName = "";
            ofd.InitialDirectory = @"C:\";
            ofd.Filter = "PowerPointファイル(*.pptx)|*.pptx|すべてのファイル(*.*)|*.*";
            ofd.Title = "開くファイルを選択してください";
            ofd.RestoreDirectory = true;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var ppt = new Microsoft.Office.Interop.PowerPoint.Application();
            var pres = ppt.Presentations;
            var file = pres.Open(textBox1.Text, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
            textBox2.AppendText("pptxファイルをオープンしました。\n");
            file.Slides[1].Duplicate();// スライド1をコピー
            textBox2.AppendText("1ページ目のスライド2ページ目にコピーしました。\n");
            file.SaveAs(textBox3.Text);
            textBox2.AppendText("別ファイル("+ textBox3.Text+ ")に保存しました。\n");
            file.Close();
            textBox2.AppendText("ファイルをクローズしました。\n");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            textBox2.Clear();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.FileName = "Output.pptx";
            ofd.InitialDirectory = @"C:\";
            ofd.Filter = "PowerPointファイル(*.pptx)|*.pptx|すべてのファイル(*.*)|*.*";
            ofd.Title = "保存するファイル名を指定してください";
            ofd.RestoreDirectory = true;
            ofd.CheckFileExists = false;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox3.Text = ofd.FileName;
            }
        }
    }
}

試しに実行してみると以下のような結果になります。
ppte1-08.png

出力先のフォルダを見ると、新たなpptxファイルが作成されているので、これを開いてみると、以下のように1ページ目がコピーされています。
ppte1-09.png


まとめ

今回は、C#でPowerPointファイルの編集ができるかどうかを試してみました。比較的簡単にできそうなので、今後は、作ってみたいツールを実現するために、どうやったら何ができるかを試していきます。