見出し画像

React・TypeScript・MUI で Excel Office Addin の開発(1)

みなさん、こんにちは。ウイングアーク1stの いしま です。
Excel Office Addin を React・TypeScript・MUI で開発する機会があり、今回は以下の内容をご紹介します。

  • 開発環境の作成方法

  • デバッグ方法

※当記事は Windows環境で PowerShell・ NodeJS ・Visual Studio Code などが操作できる前提の内容になっています。

※MUIはReact用のUIコンポーネントライブラリです。

React・TypeScript・MUI を使用する理由

弊社が開発している製品の1つに Visual Studio Tools for Office (VSTO) の Excel アドインがあります。この製品の開発言語は VB.NET・C# で、画面にはWinForm・WPFを使用しており、新たに開発者を増やしたり、一時的に開発要員を増やすことが難しいと感じています。

このような背景があり、Excel アドインの開発を React・TypeScript・MUI で行うことができれば、開発体制の安定化につながるのではないか?と考えています。また、開発経験の少ない方がjoinした場合も、得られた開発スキルは有効活用しやすいと思います。

開発成果物としても、React・TypeScript・MUIで作成した画面は、Excelアドインだけでなく、Webアプリなどでも流用できるため、開発の仕方によっては効率化を図ることができると期待しています。


開発環境で使用するツール

開発環境で使用するツールは以下のとおりです。各ツールのインストールについては割愛します。

  • Visual Studio Code

  • NodeJS (14.21.1 LTS) 

Office Addin プロジェクト作成ツールの導入

Excel Office Addin を開発するためのサイトがあり、ここで紹介されている yo generator-office をインストールします。
yo generator-office で Office Addin のプロジェクトが作成できます。

PowerShellで npmコマンドを利用して yo generator-office をインストールします。

npm install -g yo generator-office

インストールの注意点

yo generator-office のインストールに使用するNodeJSは最新バージョンが推奨されていますが、2022-11-24時点のNodeJSの最新バージョン(18.12.1 LTS)では、インストールに失敗します。
試しに、NodeJS 12.22.12 で yo generator-office をインストールしたところ、インストールに成功しましたが、NodeJSのバージョンが 14以上が推奨という警告が出力されます。

インストールに成功したが警告が表示される場合

このような経緯があり、NodeJS 14.21.1 を使用しています。


Excel Office Addin プロジェクトの作成

yo generator-office を使用して Excel Office Addin プロジェクトを作成します。

プロジェクト作成手順

①Excel Office Addin のプロジェクトを配置するフォルダーを作成します。
※例として C:\OfficeAddin とします。

②PowerShellで作成したフォルダーへ移動し、yo office コマンドを実行します。

cd C:\OfficeAddin
yo office

③Office Addin CLI ツールで使用状況のデータ収集を行うことについての確認がされますので、カーソルキーでContinue を選択してEnterキーを実行します。

匿名で使用状況のデータ収集を行うことについての確認

④Office Addin のプロジェクトの種類の選択が求められますので、カーソルキーで「Office Add-in Task Pane project using React framework」を選択してEnterキーを実行します。

プロジェクトの種類の選択

⑤スクリプト言語の選択が求められますので、カーソルキーで「TypeScript」を選択してEnterキーを実行します。

スクリプト言語の選択

⑥アドインの名前の入力が求められますので入力して、Enterキーを実行します。例として MyExcelAddin とします。

アドインの名前の入力

⑦アドインの種類の選択が求められますので、カーソルキーで「Excel」を選択してEnterキーを実行します。これでプロジェクトの作成が開始されます。

アドインの種類の選択

⑧プロジェクトの作成が完了すると「C:\OfficeAddin\MyExcelAddin」にリソースが作成されます。

作成されたプロジェクト

Visual Studio Code でデバッグする

yo generator-office で作成した Excel Office Addin プロジェクトにはサンプルプログラムが含まれており、すぐにデバッグすることができます。
ここでは、Windows環境のExcelデスクトップ版を使用した手順をご紹介します。
※Excel Office Addin の動作要件としては、Excel2016からが対象となります。

Office Addin が Excelデスクトップ版で動作する仕組み

Office Addin のデバッグには office-Addin-Debugging というツールが使用されます。

office-Addin-Debugging では、webpack-dev-server を起動し、ここにOffice Addin (Webアプリケーション)をデプロイします。Excelの画面ではEdge WebViewコンポーネント上で Office Addinが動作します。

手順1:Excel Office Addin をデバッグ実行する

①PowerShell でプロジェクトのフォルダーへ移動し、npm start を実行します。

cd C:\OfficeAddin\MyExcelAddin
npm start

② localhostでのWebアプリケーションの実行を Edge WebViewコンポーネントで許可するか確認が表示されますので、n で実行します。
※Y にすると許可に失敗してエラーとなり終了します。

localhostでEdge WebViewコンポーネントの許可の確認

③Excel Office Addinをデバッグで動作させるためのwebpack-dev-serverが動作します。初回は証明書のインストールとファイアウォールの許可を実施します。

証明書のインストール

④デバッグ用のExcelが起動され、リボンと作業ウィンドウにアドインが表示されます。このタイミングで、Edge WebViewコンポーネントのロードの確認がダイアログが表示されるため、OKを選択します。

ExcelでEdge WebView

⑤その後、Excelの作業ウィンドウにサンプルのアドインがロードされます。ボタンを実行すると選択中のセルが黄色に変わります。

サンプルのアドイン

手順2:Visual Studio Code からアタッチする

yo generator-office で作成した Excel Office Addin プロジェクトには、Visual Studio Code のデバッグ設定が用意されています。
この中の「Excel Desktop (Edge Chromium)」がデスクトップ版Excelの設定です。ただ、この設定は毎回 webpack-dev-server を起動・停止する動作になっていて、デバッグ用のExcelとの連携が動作しなくなったりするため安定したデバッグができません。この問題を解決するために、手順1で実行しているExcelアドインにアタッチだけするデバッグ設定を追加します。

デバッグ実行の一覧

① Visual Studio Code でExcel Office Addin プロジェクトのフォルダーを開きます。例)C:\OfficeAddin\MyExcelAddin

② Visual Studio Code で「.vscode\launch.json」を開きます。

.vscode\launch.json を開いた状態

③以下の設定を .vscode\launch.json の configurations の先頭に追加します。

    {
      "name": "Attach Excel Office Addin",
      "type": "msedge",
      "request": "attach",
      "useWebView": true,
      "port": 9229,
      "webRoot": "${workspaceRoot}",
      "timeout": 600000
    },
.vscode\launch.json に設定を追加した状態

④Visual Studio Code のデバッグ設定に「Attach Excel Office Addin」が追加されるので実行します。

Attach Excel Office Addin がデバッグ実行に表示

⑤アドインにアタッチした状態になり、デバッグできる状態になります。

アドインにアタッチした状態

手順3:ブレークポイントを置いてデバッグする

例として、サンプル画面のボタンを実行したときの処理をデバッグします。

サンプル画面のボタン

src\taskpane\components\App.tsx の click 関数が対象の処理のため、ブレークポイントを設定します。ボタンを実行するとブレークポイントで処理が停止し、ステップ実行ができます。

ブレークポイントで処理を停止してステップ実行している状態

手順4:デバッグを停止する

デバッグを停止する場合はExcelを終了し、PowerShellでプロジェクトのフォルダーへ移動して npm stop のコマンドを実行します。

cd C:\OfficeAddin\MyExcelAddin
npm stop

Excel Office Addin プロジェクトにMUIの導入

yo generator-office で作成したExcel Office Addinのプロジェクトには、UIコンポーネントの fluentui が使用されていますので、fluentuiを削除してMUIを導入する手順をご紹介します。

UIコンポーネントをMUIに変更する手順

①PowerShellでExcel Office Addinのプロジェクトのフォルダーに移動します。

cd C:\OfficeAddin\MyExcelAddin

②npmコマンドで fluentui を削除します。

npm uninstall @fluentui/react --save

③npmコマンドで MUIをインストールします。

npm install @mui/material @emotion/react @emotion/styled

④Visual Studio Code でwebpack.config.js を開き、fluentui が設定されている部分を MUIに変更します。

vendor: ["react", "react-dom", "core-js", "@fluentui/react"],

 ↓ MUIの設定に変更

vendor: ["react", "react-dom", "core-js", "@mui/material", "@emotion/react", "@emotion/styled"],
webpack.config.js のfluentuiの設定を MUI に変更

⑤fluentuiのコンポーネントを使用している画面をMUIコンポーネントに変更をします。

  • 削除

    • import { initializeIcons } from "@fluentui/font-icons-mdl2";

  • 変更

    • import { ThemeProvider } from "@fluentui/react";

      • → import { createTheme, ThemeProvider } from "@mui/material";

    • import { Spinner, SpinnerSize } from "@fluentui/react";

      • → import { Box, CircularProgress } from "@mui/material";

    • import { DefaultButton } from "@fluentui/react";

      • → import { Button } from "@mui/material";

⑥MUIに変更後もExcel Office Addin が動作することを確認できます。

MUIに変更後のExcel Office Addinの画面

fluentui を使用する場合の注意点

fluentuiはMITライセンスですが、fluentuiのフォントやアイコンにライセンスの制限があるため使用する場合は注意が必要です。
https://github.com/microsoft/fluentui#licenses

フォントとアイコンのライセンスの制限

余談

Microsoft Edge Tools for VS Code の注意点

Excel Office Addinのプロジェクトを Visual Studio Code で開くと、拡張機能として「Microsoft Edge Tools for VS Code」のインストールが推奨されますが、これをインストールするとReactのimportの構文で Linterエラーとなるため、Reactの開発環境ではインストールしないことをオススメします。

Microsoft Edge Tools for VS Code の拡張機能

tailwindcss がデバッグで上手く動かなかった

CSSフレームワークの tailwindcss を使用したかったのですが、デバッグ時にclass の設定を変更しても反映されませんでした。
Chromeでサンプルプログラムの Excel Office Addin(https://localhost:3000/taskpane.html)を表示し、開発者ツールでCSSの状態を確認しましたが、office-addin-debugging のホットリロードでCSSの変更が行われていませんでした。
設定により解消できるかもしれないと調査しましたが、結局解決できませんでした。
※現状は、MUI の sx props と theme を使用しています。


最後に

今後は以下の内容を紹介する予定です。

  • React Hooks への変更

  • 独自のWebサービスから結果を取得する

  • リボンと画面の制御

  • アプリの状態管理

  • クラウドへのデプロイ方法

  • Excel Web Appsでの確認方法

Excel Office Addin を開発するための情報は少ないと感じています。
当記事を見ていただいて、同じように困っている方のお役に立てれば幸いです。

この記事が気に入ったらサポートをしてみませんか?