Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 应用程序脚本:如何通过时间触发器、按键或工作表更新将特定列中的值复制到不同的电子表格?_Google Apps Script_Google Sheets_Array Formulas_Importrange - Fatal编程技术网

Google apps script 应用程序脚本:如何通过时间触发器、按键或工作表更新将特定列中的值复制到不同的电子表格?

Google apps script 应用程序脚本:如何通过时间触发器、按键或工作表更新将特定列中的值复制到不同的电子表格?,google-apps-script,google-sheets,array-formulas,importrange,Google Apps Script,Google Sheets,Array Formulas,Importrange,我需要将多个数据范围的值从主电子表格复制到另一个电子表格,然后将不同范围的数据复制回主电子表格 以下是我的示例电子表格: (两张纸:1-一张在用户评论栏旁边粘贴的值。2-一张带有运行应用程序脚本的按钮的纸) (从其他表格中提取并格式化所需数据) 以前,我使用.copyTo()复制数据值并将它们粘贴到同一电子表格的其他位置。但是,此方法不能用于将数据复制到其他电子表格。从多个范围复制数据也会导致me问题。这是我的密码: function RefreshSheetData() { // 1a.

我需要将多个数据范围的值从主电子表格复制到另一个电子表格,然后将不同范围的数据复制回主电子表格

以下是我的示例电子表格:

(两张纸:1-一张在用户评论栏旁边粘贴的值。2-一张带有运行应用程序脚本的按钮的纸)

(从其他表格中提取并格式化所需数据)

以前,我使用.copyTo()复制数据值并将它们粘贴到同一电子表格的其他位置。但是,此方法不能用于将数据复制到其他电子表格。从多个范围复制数据也会导致me问题。这是我的密码:

function RefreshSheetData() { 

// 1a. Run the script when a button is pressed (Main Spreadsheet - ‘Update report button!A3’) 
// 1b. Run the script at a certain time (every Monday at 10 AM) 
// 1c. Run the script when data in a sheet is replaced with new data via a formula – NOT POSSIBLE. 
// 2. Copy email address and user comments (Main Spreadsheet - Editable report - J3:J & AM3:AR) 
// 3. Clear the “Updated user comments” sheet below the header row (Live data Spreadsheet - Updated user comments - A2:G) 
// 4. Paste the values (Live data Spreadsheet - Updated user comments - A2:G) 
// 5. Clear the “Editable report” below the header rows (Main Spreadsheet - Editable report – B3:AR) 
// 6. Copy the Live sheet (which should now include the most recent user comments via array vlookup) (Live data Spreadsheet - live data – A3:AQ) 
// 7. Paste the values (Main Spreadsheet - Editable report - B3:AR) 
// 8. Add the (United Kingdom) time and date (Main Spreadsheet - Update report button - A10) 
// 9. Add the time and date (Live data Spreadsheet - Updated user comments - J1) 

ScriptApp.newTrigger('RefreshSheetData') 
.timeBased() 
.onWeekDay(ScriptApp.WeekDay.MONDAY) 
.atHour(10) 
.create(); 

var ss = SpreadsheetApp.getActiveSpreadsheet();
var startSheet = ss.getSheetByName('Editable report');
var sourceRange = startSheet.getRangeList(['J3:J', 'AM3:AR']);
var sourceValues = sourceRange.getValues();

var target = SpreadsheetApp.openById('1OHQHefYvE4vZZPr8jgziy_L3-UBf1WSoKzMWQ8LUz6w');
var targetSheet = target.getSheetByName('Updated user comments');

var clearTargetRange = targetSheet.getRange('A2:G').clearContent();

var targetRange = targetSheet.getRange('A2').setValues(sourceValues);  

var liveTargetSheet = target.getSheetByName('Live data');
var liveSourceRange = liveTargetSheet.getRange('A3:AQ').getValues();

var clearMainRange = startSheet.getRange('B3:AR').clearContent();
var startRange = startSheet.getRange('B3').setValues(liveSourceRange);

SpreadsheetApp.getActive().getRange('A10').setValue(new Date());  
targetSheet.getRange('J1').setValue(new Date()) 

} 
任何提示都将不胜感激。多谢各位

我的部分问题是当公式输出发生变化时如何触发脚本。那是不可能的。.onEdit或.onChange触发器都不起作用,因为它们只响应用户操作。当导入或替代公式的值更改时,它们不会运行

下面是一些建议,涉及应用程序脚本文件中提到的每个步骤
  • 1b。要在特定时间运行脚本:请使用“时间驱动”

    1c。要在工作表中的数据更新时运行脚本:请使用触发器

    1d。只需根据需要添加任意数量的触发器,即可组合所有触发器

  • 要复制和粘贴数据,只需使用已经使用过的getValues()和setValues()方法,重要的是正确选择了“tocopy”范围

  • 您可以使用清除范围

  • 见3

  • 您可以使用复制工作表,但是请记住,如果使用此方法,如果原始工作表发生更改,则复制工作表中的数据将自动更新。如果希望值保持静态,则必须使用copyValues()和setValues()复制并粘贴它们

  • 见第2条。五,

  • 查看如何在应用程序脚本中获取和格式化日期

  • 将日期指定给变量并使用setValue()

  • 我鼓励您尝试根据这些步骤构建脚本 你自己,这本书为你提供了很好的参考 和指导,如何做到这一点。如果在测试过程中遇到特定问题 您无法通过文档解决的步骤之一是feel 自由提问


    欢迎来到StackOverFlow,请借此机会学习如何使用和。@Cooper完成,谢谢。我在发帖之前也这么做过,所以如果我的帖子中有不清楚的地方,请告诉我。我在电子表格示例脚本编辑器中留下了伪代码样式的说明和代码片段,因为我认为这篇文章越来越长了,但我可以把它移到这里。然而,它可能是垃圾代码,因为它是几个小时的研究和调整的基本重新启动尝试的一部分,这导致了许多脚本错误,或者我试图让代码工作,但无法使用多个电子表格(.copyTo等)。我很乐意帮您编写它。我建议你开始。好的,谢谢。我很感激。我将重做应用程序脚本,然后根据需要编辑我的帖子。我已经编辑了我的帖子并包含了我的代码。我最大的问题是将不直接相邻的列粘贴到不同的电子表格中–我尝试了几种不同的方法,但很难确定是语法错误还是该方法不适合我想要实现的目标。谢谢,非常感谢。我将阅读,重做我的应用程序脚本,然后询问是否需要进一步的帮助。感谢链接文档。我已经编辑了我的代码。我的主要问题是替换.CopyTo,因为它不能用于将数据复制并粘贴到其他电子表格。我的另一个问题是复制彼此不直接相邻的列。请不要混淆范围和工作表的copyTo()方法。后者可用于将整个工作表复制到不同的电子表格。但是,如果您只想将一个范围复制到另一个电子表格,则需要使用
    getValues()
    setValues()
    。啊,我明白了。很高兴知道,谢谢。我正在尝试
    .getValues()
    .setValues()
    。我遇到的错误是:“TypeError:无法在对象RangeList中找到函数getValues。”
    var sourceValues=sourceRange.getValues()本帖第21行。GoogleSheet示例中的第33行(为了便于使用,我在这里删除了代码中的一些注释)。谢谢