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を立ち上げるのは重いからイヤだ!」という場合には、サードパーティー製のライブラリを使用することを検討してみてはいかがでしょうか。

関連記事

関連記事

  1. Office関連

    選択範囲内で文字列検索を行うWordマクロ

    今日は選択範囲内で文字列検索を行うWordマクロについて考えてみます。…

  2. Office関連

    Word 2013では簡単にウィンドウ ハンドルを取得できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  3. Office関連

    Google Calendar APIを使って日本の祝日を取得するVBAマクロ

    祝日の一覧を用意する必要があったので、Google Calendar …

  4. Office関連

    KB2553154の更新プログラムをアンインストールするVBScript

    2014/12/11 追記:当記事で紹介しているのは更新プログラム…

  5. Office関連

    「文書のスタイル」を設定するWordマクロ

    Wordのオプション画面 → 文章校正 → Word のスペル チェッ…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP