Office リボンをカスタマイズ – パート1 – (カスタマイズ手法と仕組み)

こんにちは、Office 開発 サポート チームの中村です。 今回の記事では、Office のリボンをカスタマイズする方法について記載します。このテーマについては、複数回に渡ってご紹介していく予定ですが、今回はまず、概要を記載したいと思います。   1. Office リボンのカスタマイズ方法 Office 2003 までは、メニューのカスタマイズを行うときには、Commandbars オブジェクトを用いて VBA などのプログラムからカスタマイズしていました。Office 2007 からメニューがリボンに変更され、これに伴って新しいカスタマイズ方法が登場しました。Office 2007 以降でも Commandbars オブジェクトを利用してもある程度メニューをカスタマイズすることはできますが、この方法ではカスタマイズできない項目もあり、現在弊社ではリボンに対応した新しい方法でのカスタマイズを推奨しています。 リボンに対応したカスタマイズについては、以下のような方法があります。 a. OpenXML 形式のファイルにカスタム XML を追加してカスタマイズを行う (カスタマイズ反映はファイル単位) b. VSTO から XML を用いてカスタマイズを行う (カスタマイズ反映はファイル単位もしくは Office アプリケーション単位) c. VSTO からビジュアルなデザイナーを用いてカスタマイズを行う (カスタマイズ反映はファイル単位もしくは Office アプリケーション単位) a と b の場合、開発者は XML でリボンのカスタマイズ情報を記載します。a の場合は Office ファイル内に、b は VSTO カスタマイズ内に…


OneNote API (C#) を使いページ コンテンツを表示するサンプル コード

こんにちは、Office Developer サポートの森 健吾 (kenmori) です。 今回の投稿では、OneNote API を使用して、ノート、セクション、ページを選択し、コンテンツを表示するプログラムを、実際に C# で開発するエクスペリエンスをご紹介します。 ウォークスルーのような形式にしておりますので、慣れていない方も今回の投稿を一通り実施することで、プログラム開発を経験し理解できると思います。本投稿では、現実的な実装シナリオを重視するよりも、OneNote API を理解するためになるべくシンプルなコードにすることを心掛けています。例外処理なども含めていませんので、実際にコーディングする際には、あくまでこのコードを参考する形でご検討ください。 現在のところ Microsoft Graph において OneNote API はベータ版のみの提供となります。ベータ版の API は本番環境における使用はサポートされません。そのため、代わりに OneNote エンドポイント (https://www.onenote.com) 配下に要求を実行する実装コードで実現しております。 事前準備 以前の投稿をもとに、Azure AD にアプリケーションの登録を完了してください。少なくとも以下のデリゲートされたアクセス許可が必要です。 ・View OneNote Notebooks その上で、クライアント ID とリダイレクト URI を控えておいてください。   開発手順 1. Visual Studio を起動し、Windows フォーム アプリケーションを開始します。 2. ソリューション エクスプローラにて [参照] を右クリックし、[NuGet パッケージの管理] をクリックします。 3. ADAL で検索し、Microsoft.IdentityMode.Clients.ActiveDirectory…

0

VSTO : .NET 3.5 で使用していた UserInclusionList クラスが .NET 4.0 以降は使用できない

  こんにちは、Office 開発 サポート チームの多田です。 今回は、.NET 3.5 で使用していた UserInclusionList クラスが .NET 4.0 以降では使用できない件、およびその対処策についてご案内します。   はじめに VSTOソリューションをインストール時や、初回起動時にユーザーに信頼するかどうかの確認ダイアログを表示させたくない、といった理由から、VSTO ソリューションへの信頼をあらかじめ付与したい場合があります。信頼を付与する方法として、従来、VSTO では UserInclusionList クラスおよび AddInSecurityEntryクラスが用意されていました。   参考) 方法: 信頼のリストのエントリを追加または削除する https://msdn.microsoft.com/ja-jp/library/bb398239.aspx UserIncrusionList クラスおよび AddInSecurityEntry クラスを含む Microsoft.VisualStudio.Tools.Office.Runtime.v10.0.dll は、.NET Framework 3.5 用の Office 拡張機能アセンブリです。 このため、.NET Framework 3.5 ターゲットの VSTO テンプレートを含まない Visual Studio 2012 以降がインストールされた開発環境で、かつ .NETFramework 3.5 が端末にインストールされていない場合は、Microsoft.VisualStudio.Tools.Office.Runtime.v10.0.dll アセンブリを利用できません。また、インストール先環境に .NET Framework 3.5 がインストールされていない場合も、同様に利用できません。   参考) タイトル : Visual Studio Tools…

0

サポート対象外の構成でのトラブルシュート (切り分けの進め方)

こんにちは、Office 開発 サポート チームの中村です。 ユーザーの皆様にサポート サービスをご愛顧頂いていることに厚く御礼申し上げます。 私たち Office サポート チームでは、日々、お客様から様々なお問い合わせを頂いておりますが、ご質問の内容によっては初期の切り分けに時間を要す場合や、サポート外の構成のため、調査に取り掛かれないこともあります。このような場合、事前にお客様側である程度問題の切り分けを実施いただくことで、私たちサポート チームで、より迅速にサポートを開始することができます。 今回の記事では、問題点の切り分けとして有効な手段をご紹介させていただくのと合わせて、サポート対象外の構成やご質問の内容を紹介させていただきます。サポートに問い合わせをする・しないに関わらず、問題が発生したときの初期調査の一助としても利用できる内容となっていますので、ぜひご確認ください。   目次 1. サーバーサイド オートメーションでの現象 2. Windows XP / Office 2003 以前での現象 3. Visual Basic 6.0アプリケーションでの現象 4. サードパーティ製品との連携 5. 複雑なプログラムでの現象 6. パフォーマンス チューニング   1. サーバーサイド オートメーションでの現象 このブログでも何度か取り上げていますが、Office 製品はサーバーサイド構成で利用することをサポートしていません。これについては、詳細を以下の公開情報に記載しています。   タイトル : Office のサーバーサイド オートメーションについて アドレス : https://support.microsoft.com/ja-jp/help/257757   サーバーサイドと表現していますが、これは、無人の非対話型クライアント アプリケーションからの Office オートメーションを意味しています。Office…


Excel の CodeName プロパティが取得できない動作

こんにちは、Office 開発 サポート チームの中村です。 今回は、Excel の CodeName プロパティの動作について、開発時に気付きづらい動作上の注意点を記載します。この状況に直面した開発者の皆様へのヒントになれば幸いです。   Excel をオートメーションするとき、ブックやシートを特定するために、CodeName プロパティを使用できます。CodeName プロパティは、Visual Basic Editor (VBE) のプロパティ ウィンドウの [(オブジェクト名)] で確認できる値です。 Excel の CodeName プロパティは、以下の 3 つのオブジェクトに用意されています。   タイトル : Workbook.CodeName プロパティ (Excel) アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff195162.aspx   タイトル : Worksheet.CodeName プロパティ (Excel) アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff837552.aspx   タイトル : Chart.CodeName プロパティ (Excel) アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff835278.aspx   CodeName…


[オートメーション / VSTO] .NET での Office ソリューション開発時の開発環境のバージョン選定 (2017 年 2 月版)

こんにちは、Office 開発 サポート チームの中村です。 今回は、C# や VB.NET を使って .NET Framework 上で動作する Office をオートメーションするプログラムや、VSTO でOffice ソリューション (アドインや、プログラムが組み込まれた Office ファイル) を作成するときに必要な環境構成について記載します。 過去の投稿で、当時の製品でのバージョン選定について記載していましたが、古い情報になってしまいましたので、本記事では、現在サポートされる製品バージョンについての最新情報を記載したいと思います。動作の仕組みの説明などは、過去の投稿で詳しく説明していますのでぜひ合わせてご参照ください。   目次 1. 導入 – 開発環境に必要なもの 2. Office オートメーションの場合 3. VSTO ソリューションの場合 4. その他構成に関する注意点 5. 参考資料   1. 導入 – 開発環境に必要なもの .NET Framework 上で動作する Office をオートメーションするプログラムや VSTOを開発する際、開発環境に必要な製品は、以前から変わりなく以下の 4 点です。 Visual Studio .NET Framework Office Office…


Office をマルチスレッドでオートメーションすることの危険性

こんにちは、Office 開発 サポート チームの中村です。 今回は、Office をオートメーションするアプリケーションをマルチスレッドで作成する際の注意点について記載します。 Office は STA (Single-Threaded Apartment) モデルで動作しているため、マルチスレッドからの呼び出し、特に Office に重い処理を実行させているときや、ループ処理などでマルチスレッドから大量の呼び出しを行うと、エラーが発生することがあります。 この動作については、以下の弊社公開資料で解説していますが、開発者の皆様に知って頂く機会を増やすとともに、図等を用いてより親しみやすい内容でご案内するため、今回、本記事でも取り上げたいと思います。 タイトル : Office でのスレッドのサポート アドレス : https://msdn.microsoft.com/ja-jp/library/8sesy69e.aspx   目次 1. STA とは? 2. マルチスレッドからの呼び出しで想定されるエラー 3. 対処方法   1. STA とは? プロセスのスレッド モデルには、大きく分けて STA と MTA (Multi-Threaded Apartment) モデルがありますが、Office は STA を採用しています。(主に GUI でユーザー操作を行うアプリケーションでは、処理の整合性を確保するための実装が MTA と比較して容易なため、STA が採用されることが多いと思います。) STA モデルである Office では、他プロセスからの…


Windows 10 Version 1607 上で Workbook.Close 実行後に Excel がエラーとなってしまうことがある問題について

こんにちは、Office 開発 サポート チームの 遠藤です。 今回は、Windows 10 への対応を行われているお客様からいくつかいただくもので、Excel がクラッシュしてしまう、という問題について報告したいと思います。   この問題は以下の条件下で発生します。 (条件の 1 から 4 は必須条件となります。 5 については、結果的に何かしらのオブジェクトを破棄するような処理が影響する可能性があり、5  は一例となります。) OS が Windows 10 Version 1607 (Anniversary Update) であること Excel をオートメーションで操作していること Excel 内部から結果的にプリンタ情報を取得する処理を行うこと “Windows で通常使うプリンターを管理する” が既定値である “オン” になっていること Workbook オブジェクトの Close メソッドを呼び出すこと   なお、この問題は任意の Excel バージョンで発生し、以下のコードを VBScript (.vbs) と保存して実行すると再現できます。 ‘—– Set xlApp = CreateObject(“Excel.Application”) xlApp.Visible = True Set xlBook…


Microsoft Graph – Excel REST API (C#) を使い Range を操作するサンプル コード

こんにちは、Office Developer サポートの森 健吾 (kenmori) です。 今回の投稿では、Microsoft Graph – Excel REST API を使用して、指定されたアドレスの Range オブジェクトを操作するプログラムを、実際に C# で開発するエクスペリエンスをご紹介します。 ウォークスルーのような形式にしておりますので、慣れていない方も今回の投稿を一通り実施することで、プログラム開発を経験し理解できると思います。前回の OneDrive API のウォークスルー同様、本投稿では、現実的な実装シナリオを重視するよりも、Excel REST API を理解するためになるべくシンプルなコードにすることを心掛けています。例外処理なども含めていませんので、実際にコーディングする際には、あくまでこのコードを参考する形でご検討ください。 Excel REST API は、OneDrive API が前提となります。OneDrive API エンドポイント配下で取得したファイルに対してのみ、Excel REST API は使用できます。Office 365 という前提はありますが、一度慣れてしまえばオートメーションの要件において、OpenXML などのプログラムを実装するよりも開発生産性が高いと思います。 事前準備 以前の投稿をもとに、Azure AD にアプリケーションの登録を完了してください。少なくとも以下の 2 つのデリゲートされたアクセス許可が必要です。 ・Have full access to all files user can access ・Sign users in その上で、クライアント…

0

Office プロセスを自プログラム専用にすることはできません

こんにちは、Office 開発 サポート チームです。 前回の投稿で Excel のプロセスを統合することについて記載しましたが、今回はこれに関連し、Office オートメーションを行うプログラムを開発するときにプログラムから操作する Office プロセスを自分のプログラム専用にできるか、という話を記載します。   Office オートメーションを行うプログラム開発を行う際、プログラムの処理が行いやすいよう、Office アプリケーションのプロパティを変更したり、画面を非表示にすることがあります。このとき、プログラムから行うプロパティ設定や画面の状態を、ユーザーが開いている他の Office ファイルには反映させたくないといった理由から、「ユーザーが起動する Office とプログラムが起動する Office でプロセスを分けたい」というご相談を頂くことがあります。   結論から申し上げますと、このような動作を完全に実現することはできません。   過去投稿で、Office では起動方法によって、既に起動されたプロセスがある場合には、これを利用して新しいファイルを開く動作となることをご紹介しています。 過去の投稿) タイトル : Excel 2013 からのウィンドウ管理方法変更について – シングル ドキュメント インターフェイス (SDI) アドレス : https://blogs.msdn.microsoft.com/office_client_development_support_blog/2016/12/19/excel2013-changes-to-sdi/ タイトル : Office のプロセス インスタンス制御について アドレス : https://blogs.msdn.microsoft.com/office_client_development_support_blog/2012/02/14/office-4/   過去投稿でご案内している Excel の /x コマンドライン スイッチのように、新規プロセスで起動するよう変更できる起動方法もありますが、ショートカットをこのように変更しても、ユーザーが直接 Office…