Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

カード記述型Excel情報を取り扱う際のメモ

f:id:shuzo_kino:20181219000221p:plain
世の中、データやりとりにはExcel系ソフトが使われる事が多いですね。
フツーに使ってくれている分には問題ないのですが……

見栄えの問題なのか、縦横数個のセルをつかったレイアウトがゾロゾロ並んでるようなのも存在します。
これが上掲画像のようにカード式に縦横に並んでいたりしたら最悪……。
しかも日付ごとにソートしろとか言われる始末です。

今回はこういう状況下で意地でもコピペをしないためにアレコレやった作業メモを残しておきます……。

実際のところ

下準備

まず、横に並んでるやつを別ページにするなり末尾につけるなりして、一列のカードに

次に、これをCSVでダウンロード(別ページならページ毎に)

CSVを加工

CSVを加工。
カード式はありがた迷惑な事に、複数行にて構成されています。
使いにくい事この上ないので、まずは改行を全部消してしまします。

$ cat data.csv | tr -d "\r\n" > onelinedata.csv

次に、カードごとに改行を挿入します。
レイアウト末尾に現れる特徴的な部分を使って、改行コードを挿入します。

$ cat onelinedata.csv | sed $'s/注文済/\\\n/g' | sed -e 's/^,//g' > eachlinedata.csv

この段階でカード毎に一行とっているはず。
あとは、cutコマンドで必要な情報を切り出したり、半端に残った文字を消したり半角を全角で統一したりと試行錯誤して、OKなら出力

$ cat eachlinedata.csv | cut -d',' -f3,6,10,18,21,22 | tr -d "出荷日" | nkf > sheet1.csv

報告書の様式によりますが、今回はカード式の情報全部をやる必要があったので
今回下準備でつくったsheet3枚分を結合

$ cat sheet1.csv >> result.csv
$ cat sheet2.csv >> result.csv
$ cat sheet3csv >> result.csv

最後に念のため中身を目grepしておき*1、この手の方が大好きな「フォーマットの調整」をおこなってEXCEL系データとして出力すれば完了。

手でやっていたら何時間掛かったかわかりませんが、スクリプト化は実作業全部で20分もしませんでした。
やっぱりテキストデータ加工が正義、はっきりわかんだね。

蛇足:当時のボヤキ

*1:エラー率が低いなら変にgrepを作り込むより早かったりします。まぁ、程度にもよりますが……