Office関連

Excelを使わずにCSVからExcelファイルに変換するPowerShellコード

CSVファイルからExcelファイルに変換する処理を自動化したい、Excelが使用できる環境であれば、VBAやVBScriptを使用すれば比較的簡単に処理できますが、Excelが無い環境ではどうすれば良いか?

今回は、下記記事でも紹介している「EPPlus」を使って、Excelを使わずにCSVからExcelファイルに変換するスクリプトを紹介します。

Excelを使わずにCSVからExcelファイルに変換するPowerShellコード

同様のライブラリ「ClosedXML」もありますが、今回はEPPlusを使用します。
事前にNuGetからファイル(EPPlus.dll)をインストールしてください。

$csv_path = "C:\Test\SampleCSV.csv" #CSVファイルのパス

[void][System.Reflection.Assembly]::LoadFile("C:\System\EPPlus\EPPlus.dll") #DLL読み込み

#フォーマット設定
$format = New-Object OfficeOpenXml.ExcelTextFormat
$format.Encoding = [System.Text.Encoding]::GetEncoding("Shift_JIS") #CSVファイルの文字コード指定
$format.Delimiter = ',' #区切り文字
$format.TextQualifier = '"' #囲み文字
$locale = [System.Threading.Thread]::CurrentThread.CurrentCulture.ToString()
$ci = New-Object -TypeName System.Globalization.CultureInfo -ArgumentList $locale
$ci.NumberFormat.NumberDecimalSeparator = ',' #桁区切り文字
$format.Culture = $ci

#CSV読込
$package = New-Object OfficeOpenXml.ExcelPackage
$sheet = $package.Workbook.Worksheets.Add('Sheet1')
$sheet.Cells.Style.Font.Name = "MS Pゴシック"
$sheet.Column(4).Style.Numberformat.Format = "#,##0_ " #数値列の書式設定
$sheet.Column(5).Style.Numberformat.Format = "yyyy/mm/dd" #日付列の書式設定
$in_fi = New-Object -TypeName System.IO.FileInfo -ArgumentList $csv_path
[void]$sheet.Cells["A1"].LoadFromText($in_fi, $format)

#ExcelファイルをCSVファイルと同じフォルダに出力
$xlsx_path = [System.IO.Path]::Combine(
  [System.IO.Path]::GetDirectoryName($csv_path),
  [System.IO.Path]::GetFileNameWithoutExtension($csv_path) + ".xlsx")
$out_fi = New-Object -TypeName System.IO.FileInfo -ArgumentList $xlsx_path
$package.SaveAs($out_fi)

$package.Dispose()

上記コードを実行すると、下図のようなCSVファイルが

下図のようなExcelファイルに変換されます。

数値列や日付列の番号を決め打ちしているため、そのあたりは対象ファイルによって変更する必要がありますが、EPPlusはフォントも含めて細かくスタイルを設定することができます。

また、コメントで記載している通り、CSVファイルの文字コードや区切り文字、囲み文字の指定もできます。

正直、Excelを使った方が手っ取り早いとは思いますが、「いちいちExcelを立ち上げるのは重いからイヤだ!」という場合には、サードパーティー製のライブラリを使用することを検討してみてはいかがでしょうか。

関連記事

【2019年6月版】SeleniumBasicでMicrosoft Edgeを操作してみました。前のページ

【2019年6月版】Excel カスタム関数(Excel Custom functions)の紹介次のページ

関連記事

  1. アイコン一覧

    Office 365アイコン(imageMso)一覧(F)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  2. Office関連

    [Excel Services ECMAScript]ループによる入力と一括入力の処理時間について

    埋め込んだExcelワークブックのセルに対して、ループで1セルずつ入力…

  3. Office関連

    [VBA]桁を揃えてDebug.Printする。

    @CallMeKoheiさんのブログの記事に「Excel VBA イミ…

  4. Office関連

    Office 2013のコントロールIDリストが更新されました。

    「コントロールID 一覧(Office 2013)」でも紹介しているO…

  5. PowerShell

    ChromeDriverでBraveを操作するPowerShellスクリプト

    広告をブロックすることによって素早くページを読み込めるというブラウザー…

  6. Excel

    Google翻訳で文字列を翻訳するマクロ

    ※ 2016/2 時点では下記の方法はもう使用できなくなっています。V…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP