2025年1月18日現在、createTextFinderに不具合あり | GASおじさんのブログ
GASのTips

2025年1月18日現在、createTextFinderに不具合あり

createTextFinderのバグ GASのTips

Youtubeでも解説しています。

createTextFinderの不具合

2025年1月18日現在、createTextFinderメソッドの動きに不具合があります。

たとえば、「スプレッドシートのA列から “U001” というIDを探してその行数を取得する」という以下のスクリプト。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Users');
  const targetRow = sheet.getRange('A:A').createTextFinder('U001').findNext().getRow();
  console.log(targetRow);
}

こちらを実行しても、

TypeError: Cannot read properties of undefined (reading 'indexOf')

というエラーが返ってきてしまいます。

不思議なのは、動いてくれるときと動いてくれないときがあるんですよね。

2024年12月18日に以下のIssueTrackerでバグ報告したところ、同じ問題を抱えている人がチラホラいるようでした。

Google Issue Tracker

Googleからの回答としては、「エンジニアリングチームに報告して、アップデートがあったらまたシェアします」とのことですが、1ヶ月経っても特に何の連絡もない状態で、2025年1月18日現在、まだバグは残ったままです。

このバグが治るまでは、別の方法で対処するしかないですね。

対処法

ということで対処法を紹介します。※あくまで上記の行数を特定する場合の例です。

function myFunction() {
  const targetRow = getTargetRow('U001');
  console.log(targetRow);
}

function getTargetRow(findText) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Users');
  const values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().flat();
  const targetRow = values.indexOf(findText) + 1;
  return targetRow;
}

A列の値を1次元配列で取得し、その配列に対してindexOfメソッドを使って行数を特定しています。

これでcreateTextFinderに頼らず行数を特定できます。

この問題でお困りの方はぜひご参考ください。

以上、2025年1月18日現在のバグ報告でした。

この件について何か進展ありましたらまたこちらで共有いたします。

コメント

タイトルとURLをコピーしました