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