Docly Child

スプレッドシートを繰り返しで1行ずつ処理する 入門編

2562 views

この記事では、スプレッドシート/Excelに存在する情報を、AUTOROの「各要素を繰り返す」アクションで1行ずつ処理をする方法を紹介します。
この方法は、様々なワークフローで汎用的に利用可能です。

※この記事では、シートの情報を1行ずつ処理する場合の入門的な方法を紹介しています。
1行ごとの繰り返し処理結果をシートに記入しながら繰り返す/繰り返しを途中から再開する方法については、こちらの記事をご参照ください。

【できるようになること】

・スプレッドシートの行情報を繰り返しで処理する
・Webページからテーブルデータ(CSV)形式で取得した情報を、その情報を貼り付けるためだけに存在するシートに書き込む

 要件の確認

以下のようなワークフローを作成することにより、スプレッドシートを1行ずつ処理する方法を紹介します。

スプレッドシートに1行ごとに記入された複数のURL」に順にアクセス後、そのURL上の情報を二次元配列(CSVと同様の形式)で取得し、専用スプレッドシートに転記する

情報取得前

情報取得後

  1. URLが記入されているスプレッドシートを準備する
  2. ワークフローを作成する
    アクセスしたURLから情報を取得し、スプレッドシートに転記する

今回は、このシートを使用します。

https://docs.google.com/spreadsheets/d/1YpWJY5_2uskik4iw9AY2Dudsy_cRFSCdQDYi51ibb8U/

このシートは、こちらからコピーしてご使用いただくことが可能です。

 ワークフロー設定例

下記手順にてワークフローを設定します。

上述のサンプルシートをコピーしたシートを取得します。
スプレッドシートのコネクションが存在しない場合は、こちらの記事を参考にコネクションを作成してください。

  • GetSpreadsheet(既存のスプレッドシート を取得)アクションを設置します。
  • 「プロバイダID」パラメータに自身のプロバイダIDを指定します。
  • 「スプレッドシートID」パラメータに、コピーしたスプレッドシートを指定します。

次に、繰り返す情報を取得します。

  • GetCells(セルの値を取得)アクションを設置します。
  • 「範囲」パラメータに以下を入力します。
    シート1!A2:B

 

取得した値を、1行ずつ繰り返すための処理を設定します。

  • ForEach(各要素を繰り返す)を設置します。
  • 「繰り返すリスト」パラメータにGetCellsのアウトプットを指定します。
  • 「要素を格納する変数名」パラメータに、rowと入力します。

ブラウザを開き、シートのURLにアクセスします。

  • OpenBrowser(ブラウザを開く)を設置します。
  • URLに、${row[1]}と入力します。
    ※処理中の1行である変数rowは、配列となっています。今回はA列から情報を取得しており、かつB列にURLが記載されているため、変数rowの2列目を意味する${row[1]}を指定します。(1番目は0、2番目は1と続いていきます)

アクセスしたページから、CSV(ヘッダーなし)形式で情報を取得します。
取得した情報にヘッダーが存在すると、貼り付け専用シートに繰り返した回数分だけのヘッダーが貼り付けられてしまうため、ヘッダーをなしにする必要があります。

  • ExtractData(ページからデータを抽出)を設置します。
  • 「抽出対象」パラメータに、以下を入力します。
    [{"name":"タイトル","selectors":[":nth-child(1) > .col-md-7 > .post-wrapper > .post-header > .post-title > a",":nth-child(2) > .col-md-7 > .post-wrapper > .post-header > .post-title > a"]},{"name":"作成日時","selectors":[":nth-child(1) > .col-md-7 > .post-wrapper > .post-header > .post-meta > :nth-child(1)"]},{"name":"カテゴリ","selectors":[":nth-child(1) > .col-md-7 > .post-wrapper > .post-header > .post-meta > :nth-child(2) > a"]}]
  • 「出力フォーマット」パラメータに、以下を入力します。
    csvWithoutHeader

取得した情報は、貼り付け専用のシートの最後の行+1行目の位置から順に貼り付けていきます。

  • AppendValues(末尾に値を追加)を設置します。
  • 「Spreadsheet」パラメータに、1.のGetSpreadsheetのアウトプットを指定します。
  • 「範囲」パラメータに以下を入力します(行番号は指定不要です)
    貼り付け専用!A:A
  • 「値」パラメータに、ExtractDataのアウトプットを指定します。

繰り返し1回につき、ブラウザを閉じるよう設定します。
これにより、ロボットのCPU/メモリ負荷が大幅に軽減されます。
(ブラウザを開きすぎるとエラーや処理時間増加につながるのでご注意ください)

  • CloseBrowser(ブラウザを閉じる)を設置します。
  • 「ブラウザ」パラメータに、OpenBrowserのアウトプットを指定します。

# 既存のスプレッドシートを取得
+get_spreadsheet_1:
  action>: GetSpreadsheet
  provider: ''
  spreadsheet_id: ''
  meta:
    display:

# セルの値を取得
+get_cells_1:
  action>: GetCells
  spreadsheet: +get_spreadsheet_1
  range: 'シート1!A2:B'

# 各要素について繰り返す
+for_each_1:
  for_each>:
    row: +get_cells_1
  _do:

    # ブラウザを開く
    +open_browser_1:
      action>: OpenBrowser
      url: ${row[1]}
      lang: 'ja-JP'
      headless: true

    # ページからデータを抽出
    +extract_data_1:
      action>: ExtractData
      browser: +open_browser_1
      extractor: [{"name":"タイトル","selectors":[":nth-child(1) > .col-md-7 > .post-wrapper > .post-header > .post-title > a",":nth-child(2) > .col-md-7 > .post-wrapper > .post-header > .post-title > a"]},{"name":"作成日時","selectors":[":nth-child(1) > .col-md-7 > .post-wrapper > .post-header > .post-meta > :nth-child(1)"]},{"name":"カテゴリ","selectors":[":nth-child(1) > .col-md-7 > .post-wrapper > .post-header > .post-meta > :nth-child(2) > a"]}]
      format: csvWithoutHeader
      multiple: true

    # 末尾に値を追加
    +append_values_1:
      action>: AppendValues
      spreadsheet: +get_spreadsheet_1
      range: '貼り付け専用!A:A'
      values: +extract_data_1

    # ブラウザを閉じる
    +close_browser_1:
      action>: CloseBrowser
      browser: +open_browser_1
<ForEach>Spreadsheet/スプレッドシート /繰り返し/各要素を繰り返す

このページは役に立ちましたか?