从Google文档中的其他工作表中获取和使用用户数据

时间:2012-11-12 14:39:55

标签: user-controls google-apps-script google-sheets

我们使用谷歌电子表格来报道相当多的用户。 我编写了一个基本脚本,根据当前用户打开一个特定的表:

var CurrentUser = Session.getUser().getEmail()
var ss = SpreadsheetApp.getActive();
  switch(CurrentUser){
    case "usermail1@gmail.com":
      SpreadsheetApp.setActiveSheet(ss.getSheetByName("sheet1"));
      break;
    case "usermail2@gmail.com":
      SpreadsheetApp.setActiveSheet(ss.getSheetByName("sheet2"));
      break;
    case "usermail3@gmail.com":
      SpreadsheetApp.setActiveSheet(ss.getSheetByName("sheet3"));
      break;
    etc...

我想将userdata和sheetnames放入外部表中,并根据该表获取这些数据,因此更容易维护电子邮件和用户列表。 如何从特定的Google电子表格中获取数据并让脚本按照这种方式运行?

1 个答案:

答案 0 :(得分:0)

你可以试试这个。它模拟不同工作表上的VLOOKUP并切换到当前工作簿中的“匹配”工作表。这不会处理不匹配,但是根据您的情况添加它应该相对简单。

function switchSheets() {
  // Current sheet
  var ss = SpreadsheetApp.getActive();
  // Target sheet (using the key found in the URL)
  var target = SpreadsheetApp.openById("my_other_sheet_id");
  var rows = target.getDataRange();
  var values = rows.getValues();

  // Get the current user
  var CurrentUser = Session.getUser().getEmail();

  // Now iterate through all of the rows in your target sheet,
  // looking for a row that matches your current user (this assumes that
  // it will find a match - you'll want to handle non-matches as well)
  for (var i = 1; i <= rows.getNumRows() - 1; i++) {
    // Match the leftmost column
    var row = values[i][0];
    if (row == CurrentUser) {
      // If we match, grab the corresponding sheet (one column to the right)
      target_sheet = values[i][1];
      break;
    }
  }
  // Now switch to the matched sheet (rememeber to handle non-matches)
  ss.setActiveSheet(ss.getSheetByName(target_sheet));
};