Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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_Copy_Copy Paste_Google Sheets Macros - Fatal编程技术网

Google apps script 为什么赢了';我的宏是否仅在第一个实例之后才正确复制/粘贴值?

Google apps script 为什么赢了';我的宏是否仅在第一个实例之后才正确复制/粘贴值?,google-apps-script,google-sheets,copy,copy-paste,google-sheets-macros,Google Apps Script,Google Sheets,Copy,Copy Paste,Google Sheets Macros,更新了所有内容,包括此电子表格的最终目标和我在早期测试中遇到的问题,以便如果有更好的方法可以让有经验的人确定,我可以改变我的方法并改为这样做 问题: 此宏使用“粘贴特殊”(仅值)两次,但它仅正确粘贴第一次,而对第二次不执行任何操作。例如,第一个实例从C6复制数据,并仅将值粘贴到F6,它会这样做。第二个从K6复制并仅将值粘贴到M6,但它不这样做。除此之外,其他一切都正常运行 对于上下文,此宏还会在两个复制/粘贴操作之间向下复制公式。您将看到下面的代码。它按预期工作,所以你可以忽略它 在下面的帮助

更新了所有内容,包括此电子表格的最终目标和我在早期测试中遇到的问题,以便如果有更好的方法可以让有经验的人确定,我可以改变我的方法并改为这样做

问题: 此宏使用“粘贴特殊”(仅值)两次,但它仅正确粘贴第一次,而对第二次不执行任何操作。例如,第一个实例从C6复制数据,并仅将值粘贴到F6,它会这样做。第二个从K6复制并仅将值粘贴到M6,但它不这样做。除此之外,其他一切都正常运行

对于上下文,此宏还会在两个复制/粘贴操作之间向下复制公式。您将看到下面的代码。它按预期工作,所以你可以忽略它

在下面的帮助下,我们发现问题在于第二个“仅粘贴值”函数无法工作,因为它在单元格完成公式求和之前复制了单元格

例如,假设K6=sum(K4+K5),K4=1,K5=4。在总和可以在该单元格中记录答案“5”之前,副本正在抓取空数据并粘贴它,因此没有粘贴任何内容

我尝试使用睡眠设置延迟,但这不是一个一致的解决方案。它只在大约50%的时间有效。如果有可能在让公式完成输出的基础上设置延迟,那将是一个完美的解决方案。如果有人有类似问题的经验或对优化线程的建议,请在下面链接。如果我能找到解决办法,我会回电的

目标和背景: 这是一个内部跟踪器的模型,我们使用它来衡量项目的可用性(分钟),以大致确定项目何时完成。我们使用这个跟踪器来确定是否会有延迟,我们的团队是否有能力承担更多的项目,等等。这都是手动的,我们没有特别擅长脚本的人

现在,我们的解决方案是在基本求和公式的帮助下手动输入每个单元格中的可用性。这需要很多时间,并且容易出现人为错误。因此,我正试图找到一个宏,用我在脚本/宏方面有限的经验为我们做数学计算

在“理想”选项卡中,我手动创建了一个我最终努力实现的示例——一个宏,它根据可用性和项目分钟数对数据进行求和和和输入。我显然是新来的,所以不可避免地会有低效,我可能完全走错了方向。如果是这样的话,请告诉我,并给我一个解释,就好像你是在和一个有基本计算机知识的祖父母说话一样

谢谢大家的帮助

代码如下:

function TestCalc1() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('D5:H5').activate();
  spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('D5:H6'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
  spreadsheet.getRange('I6').activate();
  spreadsheet.getRange('H6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('H6').activate();
};
试试这个

function TestCalc1() {
  var spreadsheet = SpreadsheetApp.getActive();
  var cellsD5H5 = spreadsheet.getRange("D5:H5").getValues();
  spreadsheet.getRange("D6:H6").setValues(cellsD5H5);
  var cellH6 = spreadsheet.getRange("H6").getValues();
  spreadsheet.getRange("I6").setValues(cellH6);
  //spreadsheet.getRange("H6").activate();
};
getValues()-

通过移除积垢简化代码(即,为什么激活范围只是为了复制到活动范围?只需复制到范围而不激活它)。为什么要复制k6->L6,然后将L6复制到m6?只需k6->m6。由于写缓存缓冲,您的脚本第二次复制失败。您好,tehhowch!我使用宏特性创建了这段代码,因此这段代码是由宏生成的,而不是由我手动编写的。能否请您更具体地说明如何清除积垢以及积垢的具体线路?如前所述,我是新来使用这个的,所以如果你能具体一点,我会觉得这很有帮助。@tehhowch啊,我想我明白你的意思了。你说的是:spreadsheet.getRange('L6').activate();spreadsheet.getRange('K6').copyTo(spreadsheet.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_值,false);电子表格.getRange('M6').activate();spreadsheet.getRange('L6').copyTo(spreadsheet.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_值,false);它应该是怎样的:spreadsheet.getRange('L6').activate();spreadsheet.getRange('M6').copyTo(spreadsheet.getActiveRange(),SpreadsheetApp.copypesttype.PASTE_值,false)@tehhowch没有角色了,抱歉。那也不行。它仍然不会只返回第二个粘贴值,但我会在原始ask中更新代码。如果你是说别的,我洗耳恭听!谢谢。您的宏是确定性的。您应该删除
电子表格应用程序.getActiveRange()
的所有用法以及
.activate()
的所有用法。你应该回顾一下谷歌的应用程序脚本优化,特别是“写缓存缓冲”。(要复制的中间值尚未写入)