質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

Goole Apps Scriptで自動取得したGmail本文等の情報をスプレッドシートのA列最終行に追加したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 151

pepe4422

score 2

Goole Apps Scriptで自動取得したGmail本文等の情報をスプレッドシートのA列の最終行に追加したいのですが、どうもうまくいきません。。。A列の他の列にはテキストが入力されているセルもあります。

例)
A列        …G列
1行 2020/7/13 0:00
2行 2020/7/14 0:00
3行 2020/7/15 0:00
4行           AAAAAA

となっている際にコードが実行されると、

A列        …G列
1行 2020/7/13 0:00
2行 2020/7/14 0:00
3行 2020/7/15 0:00
4行 2020/7/16 0:00  AAAAAA

となるようにしたいのですが。。。
使用しているコードは以下の通りです。

function searchContactMail() {

  const query = '"test"';
  const start = 0;
  const max = 3;

  const threads = GmailApp.search(query, start, max);
  const messagesForThreads = GmailApp.getMessagesForThreads(threads);

  const values = [];
  for(const messages of messagesForThreads){
    const message = messages[0];
    const record = [
      message.getDate(),
      message.getFrom(),
      message.getSubject(),
      message.getPlainBody().slice(59,5000)
    ];
    values.push(record);
  }

  if(values.length > 0){
    SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values);
  }

}

最終行に追加するサンプルコードを見つけまして、いろいろ試してみたのですがどうもうまくいかないため、どうかお知恵を拝借したく。。。ちなみに以下のコードです。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var rangeData = sheet.getRange('A:A').getValues();
  var lastRow = 0;
  for(var i=0; i<rangeData.length; i++){
    if(rangeData[i][0]){
      lastRow = i + 1;
    }
  }
  Logger.log(lastRow);
}

どうぞよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Daregada

    2020/07/18 09:05

    > いろいろ試してみたのですがどうもうまくいかないため、
    「いろいろ試した」内容をもう少し詳しく質問文に書いてください。

    キャンセル

回答 1

checkベストアンサー

0

指定した列の「実際に使われている最大の行番号」を得る関数を(提示されたコードを基に)作成して、「得られた行番号 + 1」から始まる範囲に貼り付ければいいですね。

function myFunction() {
  const values = [
    ['XXXXXXXX', 'YYYYYY', 'ZZZZZZZ' ],
    ['xxxxxxxx', 'yyyyyy', 'zzzzzzz' ],
  ];

  if (values.length > 0){
    SpreadsheetApp.getActiveSheet().getRange(getLastRowInColumn('A') + 1, 1, values.length, values[0].length).setValues(values);
  }
}

function getLastRowInColumn(columnName) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const rangeData = sheet.getRange(columnName + ':' + columnName).getValues();
  var lastRow = 0;
  for(var i = 0; i < rangeData.length; i++){
    if (rangeData[i][0]) {
      lastRow = i + 1;
    }
  }
  return lastRow;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/18 15:46

    ありがとうございます、目的の処理を行うことができました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る