7

私はGoogleスプレッドシートを持っています。一部のセルには、個々のハイパーリンクに関連付けたい複数の名前 (文字列) があります。

たとえば、「Charles Darwin」などのセルがある場合、次のようなことを行うことで、この名前からハイパーリンクを簡単に作成できます =Hyperlink(VLOOKUP("Charles Darwin", People!$A$1:$B$738, 2, false), "Charles Darwin") (ハイパーリンクを取得する「People」シートがあることに注意してください)。

ただし、そのセルに複数のエントリがある場合は、「;」と言ってください。または改行区切り、たとえば「Charles Darwin; George Washington」、それはできません。ユーザーがセルをクリックできるようにし、セルの内容を (引数として) ある種のスクリプトに送信し、そのスクリプトが "People" シートでハイパーリンクを見つけられるようにしたいと考えています。文字列を入力し、そのセルのすぐ隣に小さな「ポップアップ」を表示して、目的のハイパーリンクをクリックできるようにします。

このサイトでそれらの線に沿ったものを見つけようとしましたが、似たようなものは何も出てこなかったようです. これを解決するために開始できるリンク (または基本的なサンプルコード) を誰かが持っているでしょうか? (私はこれが可能であると仮定しています)。

4

1 に答える 1

4

同じセルに 2 つのハイパーリンクを設定することはできません。

Google スプレッドシートにスクリプトを書き込むことは可能ですが、それがあなたのユース ケースにうまく適合するかどうかはわかりません。私が見る解決策は次のようになります。

  • ユーザーは目的のセルをクリックして選択します。
  • 次に、カスタム メニューをクリックし、そこでエントリを選択します。たとえば、リンクを表示します。
  • リンクを含むポップアップが (セルの横ではなく、画面の中央に) 表示されます。

これでいいと思いますか?コードは次のようになります (メニュー [ツール] > [スクリプト エディター] を開きます)。

function onOpen() {
  SpreadsheetApp.getActive().
    addMenu("Test", [{name: 'Show Links', functionName:'showLinks'}]);
}

function showLinks() {
  var values = SpreadsheetApp.getActiveRange().getValue().split(';');

  var app = UiApp.createApplication().setTitle('Links'); 
  var grid = app.createGrid(values.length, 2);

  for( var i = 0; i < values.length; ++i ) {
    var url = findLink(values[i]);
    grid.setWidget(
      i, 0, app.createLabel(values[i])).setWidget(
      i, 1, url ? app.createAnchor(url, url) : app.createLabel('Not Found'));
  }

  app.add(grid);
  SpreadsheetApp.getActive().show(app);
}

var mapName2Url = null;
function findLink(name) {
  if( mapName2Url == null ) { //lazy load
    mapName2Url = {};
    var data = SpreadsheetApp.getActive().getSheetByName('People').getDataRange().getValues();
    for( var i = 1; i < data.length; ++i ) //skipping the header
      mapName2Url[data[i][0]] = data[i][1];
  }
  return mapName2Url[name];
}

スクリプト エディターに貼り付けた後、onOpen 関数を 2 回実行して認証し、メニューを作成します。次にスプレッドシートを開くと、メニューが自動的に作成されます。

ちなみに、私はこのコードをテストしていないので、ばかげた間違いが含まれている可能性があります。

于 2012-05-23T12:20:35.420 に答える