拡張子CSVはデフォルトではExcelに関連付けられている。(当然Excelが入っていればだが)
カラム毎に表示されるのでメモ帳で開くよりは見やすい。
ただし、CSVファイルをダブルクリックして開いた場合はデータの内容に応じてExcelが自動的にフォーマットしてくれるのだが、これが大きなお世話になることもある。
例えば、以下のようなCSVファイルを開くと、こんな感じになってしまう。
"00001","1-1",1,-66 |
これを回避するにはテキストとしてインポートして、その時に表示されるウィザードにてカラムの属性をそれぞれ指定してあげれば良い。
毎回同じフォーマットのCSVを開くのであればこれをマクロ登録しておけば良いのだが、フォーマットの違うCSVを開く場合はその都度カラム属性の指定が必要になる。
そこで、とりあえずフォーマット変更されないようにすべての項目に対して文字列属性を指定してExcelで開くスクリプトを作ってみた。
001 002 003 004 005 006 007 008 009 010 011 012 | $path = $args[0] $itemCount = ((Get-Content $path -TotalCount 1) -split ",").Count $excel = New-Object -Com Excel.Application $excelBook = $excel.Workbooks.Add() $excel.Visible = $true $query = $excel.ActiveSheet.QueryTables.Add( "TEXT;$path",$excel.Application.Range('$A$1')) $query.TextFileCommaDelimiter = $true $arr = [char[]]("2" * $itemCount) | %{[int]::Parse($_)} $query.TextFileColumnDataTypes = $arr $query.Refresh($false) | Out-Null |
純粋な数値項目も左寄せになってしまい今一歩感もあるが、とりあえずさっきよりはましではなかろうか。
ちなみに、属性の指定はカラムの数分だけ配列で指定すれば良さそうだ。
ここでは「文字列属性」ということで2を指定している。
またCSVの拡張子に関連付けるには、このスクリプトを呼び出すバッチファイルを作る必要がありそうだ。(ps1ファイルは実行形式として扱われていないため)
0 件のコメント:
コメントを投稿