0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Google SpreadSheet: 複数のリッチテキストからURLを抽出する

Last updated at Posted at 2022-11-21

以前 Google SpreadSheet: ハイパーリンクを一括抽出する という記事を書いたのですが、これではうまくいかないケースがあったので、ちょっと調べて別の手段を講じましたので、紹介しておきます。

SpreadSheet でセル全体に対してリンクを設定すると、そのセルには1つのリッチテキストが存在する事となって従来の手法でも取得できたのですが、セルの一部の文字列に対してリンクを設定すると、そのセルには複数のリッチテキストが存在する事になるらしく、従来の手法ではURLを抽出できませんでした。

図にしてみるとA列のような場合、従来手法のD列はA4しか抽出できませんでしたが、今回の手法であるBC列はA2, A3も抽出できています。
スクリーンショット 2022-11-20 22.21.34.png

今回の手法で作成した関数

今回は getLinkUrlAndText という関数を作成しました。引数に対象の1列を表す範囲を文字列として与えると、URLとそれを設定された文字列を取得して返却します。

function getLinkUrlAndText(rangeText) {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const sheet = ss.getActiveSheet()
  const range = sheet.getRange(rangeText)
  const vals = range.getRichTextValues()
  const row = [];

  if(vals[0].length > 1){
    Browser.msgBox("1列だけ指定してください。例) A2:A10")
    return
  }

  for( let i=0; i<vals.length; i++ ){
    const cell = vals[i][0]
    const richTxtArr = cell.getRuns()
    for( let j=0; j<richTxtArr.length; j++ ){
      const richText = richTxtArr[j]
      const url = richText.getLinkUrl()
      if(url){
        row.push([richText.getText(), url])
        break
      }
    }
  }

  return row
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?