2021年3月11日木曜日

◆Excel無しにExcelファイルを作る(ClosedXMLバージョン)

10年ほど前にいくつかのパターンを試したのだが今となっては以下のEPPlusを使うパターンとか環境をどう作ってい良いかよく判らない。
コーディング自体も変わっているのかも。

http://mtgpowershell.blogspot.com/2012/10/excelexcelepplus.html

いくつか調べてみると「ClosedXML」を使ったパターンの情報がいくつか見つかったのでそちらを使ってみることとした。

Powershell、というかコーディング自体ちょっと現場を離れて長いので半分浦島太郎状態で躓いてばかり。

あまり理解しているわけではないがとりあえず動いたので情報をメモしておく。

環境的には以下を参考にさせていただいた。

https://qiita.com/HAGITAKO/items/05328043d599964c485d

管理者権限でまずは、
Install-PackageProvider -Name Nuget

これは多分1回やっておけば良いのだろう。

次に必要なパッケージをインストール。
ここでは「DocumentFormat.OpenXml」と「ClosedXM」を入れる

Find-Package -Name DocumentFormat.OpenXml -Source https://www.nuget.org/api/v2 -RequiredVersion 2.7.2 | Install-Package -SkipDependencies

Find-Package -Name ClosedXML -Source https://www.nuget.org/api/v2 -RequiredVersion 0.95.4 | Install-Package -SkipDependencies

OpenXMLはバージョンが悩ましい。
上記で参照したサイトでは「2.5.0」を使っていたがどうも「ClosedXML」のバージョンとの組み合わせがあるようで・・・。
このサイトで使っていた「ClosedXML」の「0.76.0」のバージョンは既にダウンロードができず、やむなく新しいバージョンを使うと(ここでは最新っぽい「0.95.4」を使用)動かない。

以下のサイトで「2.7.2」が良いとの情報がありそれを使ったら動いた。
https://f-journey.com/it/install_closedxml_on_powershell

また、install-packageはそのままだと

install-package : Dependency loop detected for package 'DocumentFormat.OpenXml'.

とか言ってエラーになるのでスキップするオプションを付けてあげればとりあえず良さげ。(いろいろと悩ましい・・・)

実際のPowershellソースの方はこんな感じで。ちなみに.NETの4.0を指定しているのは適当です。

add-type -path "C:\Program Files\PackageManagement\NuGet\Packages\DocumentFormat.OpenXml.2.7.2\lib\net40\DocumentFormat.OpenXml.dll"
add-type -path "C:\Program Files\PackageManagement\NuGet\Packages\ClosedXML.0.95.4\lib\net40\ClosedXML.dll"

$inpath = "C:\Users\hogehogeUser\Desktop\test.xlsx"
$wb = new-object ClosedXML.Excel.XLWorkbook($InPath)
$ws = $wb.Worksheet("sheet1")
$ws.Cell("N2").Value = "test"
$wb.Save()
$wb.Dispose()

0 件のコメント:

コメントを投稿