Excel の列ヘッダーを csv にエクスポートする

Excel の列ヘッダーを csv にエクスポートする

複数列のヘッダーを保持したまま、Excel ファイルを CSV にエクスポートする方法を知りたいのですが。

csv ではこれがサポートされていないことは承知していますが、各列ごとにヘッダー名を複製できることを期待しています。

例えば、私が現在得ているのはこれです

a,,,b,,,c,,
1,2,3,4,5,6,7,8,9
d1,d1,d1,d1,d1,d1,d1,d1,d1 d2
,d2,d2,d2,d2,d2,d2,d2,d2

これが私の希望です

a、a、a、b、b、b、c、c、c
1、2、3、4、5、6、7、8、9
d1、d1、d1、d1、d1、d1、d1、d1、d1
d2、d2、d2、d2、d2、d2、d2、d2、d2

答えを見つけるために検索しましたが、間違った用語を検索していない限り、あまり見つけられないようです。

ソリューションは Microsoft である必要はありません。Linux ソリューションでもかまいません。

ありがとう、ブライアン

答え1

スプレッドシートを にエクスポートした場合はfile1.csv、次のようにします。

#!/bin/sh
awk -F, -v OFS=, '
NR==1 {
        for (i = 1; i <= NF; i++) {
                if ($i == "") $i = prev
                prev=$i
        }
    }
{ print }' < file1.csv > file2.csv
  • -F, -v OFS=,awkの入力および出力ファイル区切り文字を に設定します,
  • NR==1「最初のレコード(行/列)に対してのみ次の操作を実行する」という意味です。
  • ループforは最初の行の各フィールド (セル) を調べ、空白の場合は前の値と同じ値に設定します。
  • { print }file1.csvからまでのすべてのレコードを出力しますfile2.csv。最初のレコードは変更され (上記のように)、その他はすべて入力から出力に渡されます (したがって、最初の行の下の空のセルは改ざんされません)。

関連情報