【ImportExcel】Import-Excelコマンドレットの使い方【PowerShell】
ImportExcelモジュールのImport-Excelコマンドレットの使い方
目次
ImportExcel
PowerShellでExcelを扱おうとすると、いくつかライブラリの選択肢があるんですがImportExcelが非常に便利だったので使い方のメモ。
ImportExcelはExcelPackagePlusのdllを使ってモジュール化したものです。ExcelPackagePlusが高機能なのでImportExcelも結構高機能です。中でもイチオシはMicrosoft製ClosedXMLでは扱えないパスワード付Excelが扱えることです。
使い方の情報を探したんですが、作者が使い方をプレゼンしている動画とGitHubでバージョンアップしたときに追加機能のサンプルを付けてるくらいのよう。
ということで、自分用メモを兼ねてのご紹介。
ImportExcelの入手
PowerShell GalleryのImportExcelのページで入手できます。
https://www.powershellgallery.com/packages/ImportExcel/
Install-Moduleコマンドレット、Azureへのデプロイ(配置)、nupkgのマニュアルダウンロードの3つの方法が書いてあります。
Powershell遣いであればInstall-Moduleコマンドレットで構わないと思います。
ただし、Install-ModuleコマンドレットはPowerShell5.0以降なので、最新版に上げるかマニュアルダウンロードです。
Windows PowerShell のインストール
Proxyがあってうまく行かない、とか管理者権限がない、という方は下記をごらんください
Install module from PSGallery behind authentication proxy without administrator privileges
マニュアルダウンロードの場合は、拡張子をzipに変えれば展開できます。展開したフォルダはバージョン情報が付いているのでImportExcelに変名してModulePathに置けば大丈夫です。
Import-Excelコマンドレット
動作はImport-CSVに似ています。ベタなデータのみがあるxlsxファイルの場合、パスを引数にして実行するとデータが格納されます。
1 |
Import-Excel C:¥Users¥Owner¥Documents¥Data.xlsx |
データがある範囲を読み込んでImport-CSVと同様にPSCustomObjectに格納してくれます。
複数行ある場合は、一行がPSCustomObjectになり、シート全体はPSCustomObjectの配列になります。
これの良いところは空いてる列や行は飛ばして読み込んでくれるところです。隣り合ったセルを結合されていても気にせず取り込むことができます。
また、何も指定しない場合1行目をヘッダーとして扱い、PSCustomObjectのPropertyの名前になります。
-NoHeaderをつければ勝手にp1,p2,p3でヘッダーをつけてくれますし、-HeaderNameを使って個別につけることもできます。
読み込むセル範囲の指定もできるので非常に便利です。
正直、これぐらいMicroSoftさん自分で作ってくれよ、というくらい高機能(^_^;
詳しくは下のHelpを参考にしてください。
Import-Excelコマンドレットヘルプの日本語化
機械翻訳の部分もあるので読みにくいところはご容赦ください
以下のエラーが出力されてしまうのですが、原因、解決方法はご存知でしょうか?
型 [OfficeOpenXml.ExcelPackage] が見つかりません。
発生場所 C:\Users\i\Documents\WindowsPowerShell\Modules\importexcel.7.1.1\Public\Import-Excel.ps1:14 文字:9
+ [OfficeOpenXml.ExcelPackage]$ExcelPackage,
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (OfficeOpenXml.ExcelPackage:TypeName) []、RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
どのコマンドを実行した時点でエラーになるでしょうか?
エラーになるまでの操作履歴の情報があると、あたりがつけやすいです。
Import-Module ImportExcelの時点でしょうか?
pathの中にimportexcel.7.1.1が含まれているということは、nupkgを展開してModulepathに保存してますか?
Import-ModuleはModulesフォルダの下のフォルダ名とその下のモジュール宣言ファイル(psd1)のファイル名でモジュール名をみているようです。
フォルダ名をimportexcel7.1.1→imortexcelに変えてImport-Moduleすれば通りませんか?
上記でないのだとすると、githubのQ&Aの内容を参考に記載しておきます。
記事にあるように、ImportExcelはEPPlusを内部で使っています。
型の情報はepplus.dll中に定義されているのでこれが読み込めていないのがエラーの内容です。
ImportExcelモジュールはユーザ権限でもimportできるので管理者権限が問題ではないのでは。
下記を実行してみてエラーが出るでしょうか?
Install-Module -Name ImportExcel -Scope CurrentUser
get-service | export-excel
だとしたら、Add-Typeで明示的にdllを読み込んでみてください。
Add-type -path “$env:userProfile\Documents\WindowsPowerShell\Modules\Importexcel\epplus.dll”