【问题标题】:How to use Query and Importrange using Apps Script如何使用 Apps 脚本使用 Query 和 Importrange
【发布时间】:2022-01-18 13:04:46
【问题描述】:

我需要使用应用程序脚本使用查询和导入范围从主表更新信息。 这是主表。我需要从中访问信息: https://docs.google.com/spreadsheets/d/1tpv0iGwpnLUw6F5FoLn2jE4FBuF_igjriLA5uyNjczw/edit#gid=0

这是我需要在其中显示数据的工作表: https://docs.google.com/spreadsheets/d/1ENZdtWI2f_wYzKbqUNziw6bVcTCpP6T4vkPbs-lPgC0/edit#gid=0

目前我正在使用获取日期。但我需要使用 Apps 脚本。 =QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1tpv0iGwpnLUw6F5FoLn2jE4FBuF_igjriLA5uyNjczw/edit#gid=0","Task!A:J"),"SELECT* WHERE Col7 = 'JOHN'")

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-formula spreadsheet


    【解决方案1】:

    如果我的理解正确,当G 列具有特定值时,您希望将数据从源电子表格导入另一个电子表格。

    在这种情况下,您可以使用getValues()setValues()

    const SOURCE_SPREADSHEET_ID = "1qkCxwyspeRrVcQRFqiHmIXRUjbrz9zgp09pYR0Y6_-M";
    const TARGET_SPREADSHEET_ID = "1zp34NKnqRqdNvDzJx70T1spb0GbUQwnpUmJgkF81Pr4";
    const SOURCE_SHEET_NAME = "Task";
    const TARGET_SHEET_NAME = "Sheet1";
    const NAME_COL_INDEX = 7;
    const NAME = "JOHN";
    
    function copyData() {
      const sourceSheet = SpreadsheetApp.openById(SOURCE_SPREADSHEET_ID).getSheetByName(SOURCE_SHEET_NAME);
      const sourceValues = sourceSheet.getRange("A1:J" + sourceSheet.getLastRow()).getValues();
      const targetValues = sourceValues.filter((row,i) => i === 0 || row[NAME_COL_INDEX-1] === NAME);
      const targetSheet = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID).getSheetByName(TARGET_SHEET_NAME);
      targetSheet.clearContents();
      targetSheet.getRange(1,1,targetValues.length,targetValues[0].length).setValues(targetValues);
    }
    
    function installOnEditTrigger() {
      const ss = SpreadsheetApp.openById(SOURCE_SPREADSHEET_ID);
      ScriptApp.newTrigger("copyData")
               .forSpreadsheet(ss)
               .onEdit()
               .create();
    }
    

    注意:

    如果您希望在用户编辑源电子表格时自动更新,请考虑installingonEdit trigger。要在上面的示例中执行此操作,请执行一次installOnEditTrigger

    【讨论】:

    • 谢谢。您能否详细说明此代码:filter((row,i) => i === 0 || row[NAME_COL_INDEX-1] === NAME); 还有一件事。如何使用应用脚本授予访问权限?
    • @user8702720 filter((row,i) => i === 0 || row[NAME_COL_INDEX-1] === NAME); 表示我们要过滤掉所有不是标题行(i === 0)或G列值为JOHN的数据。
    • 谢谢。如果我更新源工作表,目标工作表不会自动更新。我怎样才能做到这一点? @Iamblichus
    • @user8702720 在这种情况下,请安装 onEdit 触发器。看看我更新的答案。
    • 我已经更新了脚本。但是当我编辑源表时它仍然不会自动更新目标表。你能看看目标表中的脚本吗?我必须再次运行脚本才能在目标表中查看更新的数据。 @lamblichus
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多