Home > Windows にまつわる e.t.c.

PowerShell でデータを TSV 出力する


PowerShell で CSV 出力するのは Export-Csv で簡単に出来るのですが、出力された CSV を Excel でそのまま開くと、数値タイプになってリーディングゼロが欠落したり、日付タイプになって日付フォーマットが消えたりと色々困る事があります

この問題を回避するには、データをデリミタ(区切り)をタブにした TSV 出力して、全セルを文字タイプにした Excel ワークシートにテキストエディタで開いた TSV データをコピペする手があります

Windows PowerShell 5.x では、「-Delimiter "`t"」を指定してデリミタを TAB に出力すれば TSV にはなるのですが、データがダブルコーテーション囲みになるので、Excel にペーストする前にダブルコーテーションを消す手間が必要です

$datas | Export-Csv -Path .\Test.tsv -Encoding oem -Delimiter "`t"

 

Windows PowerShell 5.x では、このダブルコーテーションを消すコードを別途書く必要があったのですが、PowerShell 7 以降は「-UseQuotes」オプションでダブルクォーテーションの出力を抑制することが出来るようになっています

UseQuotes オプション

Never 引用符で囲まない
Always すべてを引用符で囲む (既定の動作)
AsNeeded 区切り文字、二重引用符、または改行文字を含む引用符フィールドのみ

 

Never オプションを指定すると、ダブルコーテーションが出力されないので、加工無しでダブルコーテーション囲みの無い TSV を出力する事が出来ます

$datas | Export-Csv -Path .\Test.tsv -Encoding oem -Delimiter "`t" -UseQuotes Never

 

改行とか含まれるデータがある場合は AsNeeded オプションを指定する必要がありそうですが、試していません mm
(必要がある方は期待動作をするか確認してからご使用ください)

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.