経緯
6, 7 年まえぐらいに、ClosedXML を少し触ったことがありました
PowerShell で ClosedXML を使って Excel ファイルを作成する
それから時代は変わっていき、今は PowerShell Core 全盛時代みたいです
どうせなら PowerShell Core で ClosedXML を利用してみようと思い、環境構築を行って
いましたが勘違いも有りハマってしまったので、また同じことを起こさないようにというメモです
ちなみに、当初 NuGet で作っていたのですが、色々考えて結局パッケージをダウンロードして、
DLL だけを使う方法にしました
環境
- Windows 10 Pro
- PowerShell 7.2.6
構築手順
各パッケージのダウンロード
2022年10月10日現在で、ClosedXML の最新バージョンは 0.96.0 です
依存関係は Dependencies で確認でき、利用するのは .NETStandard 2.0 です
DocumentFormat.OpenXml は更に依存関係があったので、下記のパッケージをダウンロードすれば OK でした
- ClosedXML: 0.96.0 -> DownLoad
保護の解除と DLL の取り出し
ダウンロードしたファイルは保護されているため、解除する必要があります
nupkg ファイルを右クリックして、プロパティを開き、セキュリティで [許可する] にチェックを入れて、[ OK ] ボタンを押します
次に、拡張子を zip に変えて展開して、 lib\netstandard2.0
の中にある DLL ファイルを取得します
これをダウンロードしたファイル全てでおこないます
動作確認
先に取得した DLL をフォルダに入れて、そこに example.ps1 を作成して保存、
PowerShell 7.2.6 で実行します
Add-Type -Path "$PSScriptRoot\ClosedXML.dll"
Add-Type -Path "$PSScriptRoot\DocumentFormat.OpenXml.dll"
Add-Type -Path "$PSScriptRoot\System.IO.Packaging.dll"
Add-Type -Path "$PSScriptRoot\ExcelNumberFormat.dll"
Add-Type -Path "$PSScriptRoot\Microsoft.CSharp.dll"
Add-Type -Path "$PSScriptRoot\System.Drawing.Common.dll"
$workBook = New-Object ClosedXML.Excel.XLWorkbook
$workSheet = $workBook.Worksheets.Add("Sheet1")
$workSheet.Cell("A1").Value = "Hello world";
$workBook.SaveAs("$PSScriptRoot\helloworld.xlsx")
$workSheet = $null
$workBook = $null
作成された Excel を開くと、A1 のセルに Hello world と表示されています
考察
今見ると、どこで引っかかったんだよ... ってレベルで単純で恥ずかしいですが、
これで環境が作れたので次に進んで汚名挽回を図ります(誰に?)