なんだかよく分からない謎の単純作業その3をGASで自動化

今回は新エディターちゃんで書いてみようと思います。切り替えの時の文章読んだら2020年くらいまで使えるよみたいなこと書いてたしね!
しかしイキナリ入力画面だけ明朝体になったの違和感だし(変えようと思えばeditor-style.cssで変えられるけど、設定とかでも変えられないのか?)
あとせっせと登録したaddQuickTagニキが使えなくなってるのかも調べねばねば…

なんだかよく分からない謎の単純作業その3とは

文章は例ですが、要するになんていうか、「項目番号+項目名に短い要約付きの目次ページ」がありまして(なお600項目くらいあり)。そこから項目番号+項目名と要約だけを抜き出すのが今回のミッション。

最終目標はこの状態です。

・ 項目名・要約を連結した1つの文章として縦一列に並べる
・ 目次番号は消す
・ Subsection名/pageNumberは行ごと消す

おっこれだけなら簡単そうやね^^と思ったのもつかの間、 問題はこのファイルがPDF形式だということでした。

Adobe Acrobatに読み込んでコピペしたところ2段組みが上手いこと縦一行に整形されたのは良いのですが、見ての通り改行情報が失われて一つの文章が何段落にもなっています。。というわけで上記の処理に加えて「行数にバラツキがある各項目を1行に連結する」という手順が必要になりました。ヤッタネ!
文章にして考えてみよう!

毎回スクリプトを組む時は文章で処理のネストを把握しておくのが文系の鉄則(勝手に決めた)

シートの構成としては、①PDFからコピッてきた元データを貼る「加工前」シート②「加工前」シートから処理を終えたリストが作成される「整形済み」シートの2枚を使って処理していきます。

①「整形済み」シートが存在すればそれを削除する
①「加工前」シートをコピーして「整形済み」シートを作成する
②最終行を取得してA列の中身を配列で取得、for文で1つづつ処理する
  正規表現で Subsection名/pageNumber の列を削除する
③ 最終行を取得してA列の中身を配列で取得、for文で1つづつ処理する
  もし配列番号の変数iが配列の最後でない場合は次の配列番号を取得する
  もし「今の配列番号の中身が項目番号の正規表現に合致し」「次の中身が合致せず」「次が空欄でない場合」
    結合したい文章を格納する配列unitedArrayに今の配列の中身を格納する
    今の配列番号に追加する変数offsetNumを1追加する
    while文で「 offsetNum 分ズラした配列番号の中身が正規表現に一致せず」「次が空欄でない」を満たし続ける間
      その中身を取得して配列
unitedArray の後ろに連結する
      中身をコピーし終えたセルの中身を消す
      変数offsetNumを1追加する
    参照配列番号に項目番号が含まれていれば連結処理終了して、スペースを挟んで配列
unitedArray の中身を連結する
    offsetする前の配列番号に対応するセルに連結した文章を挿入
③ 最終行を取得してA列の中身を配列で取得、for文で1つづつ処理する
  例には書いてないけど、不要な項目名もあるので正規表現で判定して削除
  ソートして空白行を消す
④ 最終行を取得してA列の中身を配列で取得、for文で1つづつ処理する
  正規表現で項目の末尾にあるページ番号を削除
できましたーー

いやー長い!!要するに「正規表現でいらないところを消す作業」「項目番号のある行の下の行に項目番号が無ければ上の行に連結する作業」を連続してするだけのマクロなのですが、2日くらいかかってしまいました…

まぁ大事なのは今後同じことで詰らないことなので、今回激引っかかったところをメモっておこうと思います。

詰まったところとその解決

1.今のセルの内容の下のセルの内容を参照しようとするとエラーが!

後で参照できるようにきーた君にまとめることにしました(‘ω’)ノ

https://qiita.com/tama441/items/d7f97fde5660daa1cd88

2.if文の使い方を何か勘違いしていたと思う

https://qiita.com/tama441/items/9784349d2c17ef454105

3.For文で今指定している配列番号を基準に操作する方が良い

最初は項目番号(A10Bなど)が入ったセルの中身を切り取って次の配列内容の前に結合しようとしたんですが、途中ワケワカメになったので諦めて今の方向にしました。何がダメだったかはよく思い出せないんですが、基準点に集積していく方が動作的にも分かりやすいので次からはそうしましょう。

4.セルがブランクかどうかの判定

https://qiita.com/tama441/items/5b15c94557de218b3e78

5.変数のことも何か勘違いしてた気がする

なんていうか…

var Number = 1;
var Sum = Number + 1
という変数Number,Sumを用意した後に、Numberに2が代入されたら自動的にSumの中身も3になると思ってた的な?

ならないんですよね、もう一回
Sum = Number + 1
と代入し直さなきゃいけないということに今更気が付きました。良かったね。

6.配列要素内の文字列を丸ごと抽出する方法

よく考えたら一次配列から配列番号で取得したら何にもする必要無かったんですけど、なぜか文字数取得してそれ使って文字列の全字数を取得するみたいな謎の無駄コード書いてたんですよね…
この無駄な動きを無駄にしないために、「全字数からマイナス1文字を取得する」みたいなことに使えるよ!っていう記事を書きました。

https://qiita.com/tama441/items/734435d84f90b5e6f93b

記事が長すぎるので実際のコードは格納(クリックで閉じる)

はぁー疲れた。下のお楽しみ余談を先に書いておいて良かった。書き上げるモチベにもなるしね。。

—————————————————————-


さて前回の最後に雑談で書いた「ブランドロゴ詰まんな化問題」、あの後謎に美に目覚めた私は毎日メルカリでブランド化粧品を見てほわわ~としつつたまにサンプルや使い掛けの安い奴を購入する間にあることに気付きました。

それは2枚目がローラメルシエだから勝手に全部化粧品系だと思ってた(1枚目のBurberryとYSLも化粧品有名ですし)けど、よく見たらというか知らんかったから調べたら他のブランド全部服飾メインのブランドだ…ということです。貧乏人は服のブランドはシャネルしか知らないんですよね。

その辺に気付いたのは化粧品系、有名どころだとやっぱ服飾方面に強いCHANELとかGIVANCYとかは件のみんな一緒感溢れる太いサンセリフ体(ただしCHANELはそれらの起源説もあり)ですが、その他は大御所も装飾体あり細身あり強弱ありとそれなりにバラエティーがあるんですよね。実のところローラメルシエも今出してる商品にも旧ロゴが使われてたり、新旧というか併用ロゴみたいだし。

こんな感じで

化粧品のロゴは特徴を失わず、服飾のロゴは特徴を削がれていく風潮があるとすれば凄く話は簡単に見えてきます。つまりはやはり前回推測した通り「ロゴ以外でブランディング出来るようになって来た」ということかなと。

化粧品の容器というのは口紅にせよコンパクトにせよ基本的にシンプルな形状、色合いのものが多いです。各ブランドのアイコニックな商品を見てもプラスチック製の単色のボディにモノクロや金色でブランド名が印字されているパターンが殆どだと思われます。形もYSLのあの変身しそうな口紅(てかセーラームーンの元ネタだと思ってます個人的に)以外は基本シンプル路線だと思う。そうなるとやはりロゴで個性を表現することが必要とされるのは自然な流れですよね。

これは私もそんなに知識が無いので適当なこと言いますが、一方で服飾は縫製技術等の向上などで今まで扱いが難しかった素材にも模様を入れられるようになったり、形状でブランディングしていく手法も取りやすくなっているのではないかと思います。それ故にロゴにブランドの顔としての「個性」を持たせる必要が減っているのではないでしょうか。個性を複数詰め込むことはテーマをぼかして殺すことだというのはデザインの普遍的な命題だと思います。

まぁそんな感じで思いました…終わり

カテゴリーGAS

コメントを残す

メールアドレスが公開されることはありません。