C# (.NET) から Visio を起動し、 マクロを実行し、 Webページとして保存を行う方法を記載します。

動作確認は、 Visio 2003  Professional バージョンとVisual Studio 2008 がインストールされた環境でコンソールプログラムで行っています。Viso 2007 などでも動作するともいます。Visual Studio は2005でも同じように作成できます。

1. Microsoft Visio 11.0 Type Library への参照のついか

Visual Studio のプロジェクトの追加で、参照の追加ダイアログで COM タブを選択し、 Microsoft Visio 11.0 Type Library の参照を追加します。Office 2003,  2007 で使用できる相互運用アセンブリについては次のリンクを参照してください。

Office プライマリ相互運用機能アセンブリ
http://msdn.microsoft.com/ja-jp/library/15s06t57(VS.80).aspx

 2.サンプルプログラム

コンソールプロジェクトの Program.cs のメソッドを次のように記述しました。 Microsoft.office.Interop.Visio.InvisibleAppClass は Visio を非表示で起動するクラスです。Visio.Document.ExecuteLine メソッドでマクロを起動しています。AlertResponse に 1を設定して、Documentをクローズするときなどに、確認メッセージが表示されないようにしています。最後に、SaveAsWebアドオンを起動して、WebページとしてVisioを保存しています。各APIの詳細の説明はMSDNオンラインで確認してください。

namespace InvokeVisioMacro{    
  using Visio = Microsoft.Office.Interop.Visio;
class Program {  
  /// <summary>
  /// 参考URL
  /// Running Save as Web Page from the Command Line
  /// http://msdn.microsoft.com/en-us/library/aa463347(office.12).aspx
  /// Preventing Alerts and Dialog Boxes in Visio 2002
  /// http://msdn.microsoft.com/en-us/library/aa140363(office.10).aspx
  /// </summary>
  /// <param name="args"></param>
  static void Main(string[] args)
  {
       Visio.InvisibleAppClass ap = new Visio.InvisibleAppClass();
       //Visio.ApplicationClass ap = new Visio.ApplicationClass();
       ap.AlertResponse = 1;
       Visio.Document doc = ap.Documents.OpenEx(@"C:\Sample.vsd");
       doc.ExecuteLine("マクロ1");
       ap.Addons["SaveAsWeb"].Run(@"/target=C:\mypage.htm /quiet /prop /startpage=-1 /endpage=-1 /altformat /priformat=vml /secformat=jpg /openbrowser=FALSE");
      doc.Close();
      ap.Quit();
      Release(ap);
  }
  private static void Release(object o)
  {
      while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0) { }
  }
}
}

 InvisibleAppClass や AlertResponse の設定をしても、Visioのマクロのセキュリティー設定が中以上の場合は、マクロの有効化するかの確認ダイアログが表示されてしまいます。これを防ぐには、セキュリティー設定を 低 にするか、マクロに署名を行うひつようがあるみたいです。