[unity]アプリでエクセルの読み書きを可能にする(NPOI)

「Unity エディターで使うには」という記事はよく見かけますが、ビルドアプリに組み込もうとすると一癖ありましたので、共有します。

そもそもアプリでエクセル読み書きって特殊だから

今回はインストールの仕方のみで、NPOIの使い方については触れません。

ダウンロード

バージョンについては、2022/10 現在可能だったバージョンを記載します。

nuget.org から

nuget.org より以下をダウンロードします。各リンク先の画面より、右の方にある Download Package をクリックしてください。

NPOI.dll, NPOI.OOXML.dll, NPOI.OpenXml4Net.dll, NPOI.OpenXmlFormats.dll

npoi.X.X.X.nupkg というファイルがダウンロードされますが、nupkg の拡張子を zip に変えて解凍してください。
lib/net45 の中にある 4 ファイルを unity の Assets/ 下にコピーします。

unity プロジェクトが .Net Standard2.0 であっても net45 の dll をコピーします。
(.NETStandard 2.0 版の NPOI は依存関係が魔境だったので諦めました)

Portable.BouncyCastle, SharpZipLib

Portable.BouncyCastle、SharpZipLib は最新を入れてしまうと動かないので、過去バージョンの dll を Assets/ 下にコピーしてください。フォルダは net45 および、net40。

Visual Studio のプロジェクトから

個々のダウンロード&インストールが面倒であれば、Visual Studio で .Net Framework4.5 のプロジェクトを作成し、ツール > NuGet パッケージマネージャー > ソリューションの NuGet パッケージの管理 からインストールを選択し、

プロジェクトの下にインストールされた dll を unity にコピーする、という方法も可能です。
packages/ の下にあります)
バージョンの依存関係を自動的に峻別してくれるので、こちらの方が楽でした。

dll の Import Settings を変更する

6 ファイルをコピーした時点で NPOI は使用可能になりますが、それはあくまで Unity Editor 上。
設定を変更し、実行環境でも動くようにします。

link.xml を作成する

これで動く…かと思いきやビルドすると一部のライブラリが動作しません。(確認したところ、ワークブックの書き込みは出来るものの、読み込みができませんでした)

以下のコードを link.xml という名前で保存し、Assets/ 下に置いておきます。

<linker>
	<assembly fullname="NPOI" preserve="all"/>
	<assembly fullname="NPOI.OOXML" preserve="all"/>
	<assembly fullname="NPOI.OpenXml4Net" preserve="all"/>
	<assembly fullname="NPOI.OpenXmlFormats" preserve="all"/>
</linker>

おそらくビルド時、使用してないライブラリを親切で消してくれる「Strip Engine Code」が悪さをしてるんだと思います。
link.xml でファイルを消さないよう強制する、というわけです。

この答えに行きつくのが大変だった…

以上でビルド後のアプリでもエクセルの読み書きを行うことができました。
(Windows のみ確認したので、iOS や Android はダメだった…という事もあるかもしれません)

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA