复制粘贴 google 电子表格
copy paste google spreadsheet
所以,我为一群人制作了一个 Google Spreadsheet,用于跟踪 Reddit 子上一大群人的每周 "counts"。我试图自动化的事情是两件事。我遇到问题的那个是我认为最简单的那个,只需复制一组 (G2:G200) 中的值以覆盖另一组 (E2:E200) 中的值。我也有其他一些问题,但我更感兴趣的是解释我在那里做错了什么,而不仅仅是一个答案。最大的一个是,这应该是在 sheet 上制作自定义菜单,但我似乎无法让它工作,即使我基本上从 Google 教程中复制了脚本.我已经尝试了这两种方式的脚本,一种使用与 Excel 相同的脚本,在记录相同的基本内容时打印出来:
function UpdateLore_() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.alert(
'Please confirm',
'Only do this once per week, at end of updates.',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
Range("G2:G200").Select;
Selection.Copy;
Range("E2:E200").Select;
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False;
} else {
// User clicked "No" or X in the title bar.
ui.alert('No Changes Made.');
}
}
这 returns 是 "Selection.PasteSpecial" 行上的一个错误。我尝试的另一种方法是使用我可以在网上找到的方法:
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
function copyFunction () {
var inputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
var inputValue = inputRange.getValue();
var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200");
}
代码的顶部如下所示:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Weekly Update')
.addItem('Update for Lore', 'UpdateLore')
.addItem('Update for XP Master', 'UpdateMaster')
}
我觉得我遗漏了一些非常明显的东西,尤其是整个 "doesn't seem to change the sheet in anyway" 部分。感谢您的帮助
得到了一些答案,现在可以使用了,感谢所有帮助:
知道了,感谢大家的帮助。新代码如下所示:
function UpdateLore() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.alert(
'Please confirm',
'Only do this once per week, at end of updates.',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
copyFunction ();
}
function copyFunction () {
var inputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
var inputValues = inputRange.getValues();
var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200").setValues(inputValues);
}
if (result ==ui.Button.NO) {
// User clicked "No" or X in the title bar.
ui.alert('No Changes Made.');
}
}
要向 sheet 添加数据,您需要使用:
- 设置值()
- setValues()
- appendRow()
您在 if
正文中有一个函数:
if (result == ui.Button.YES) {
// User clicked "Yes".
function copyFunction () {
. . . .
}
}
如果你想在此时调用另一个函数,你可以使用:
if (result == ui.Button.YES) {
// User clicked "Yes".
copyFunction ();
};
function copyFunction () {
. . .
};
您需要设置从输入范围到输出范围的值。使用 outputRange 上的 .setValues() 来执行此操作。
function copyFunction () {
var inputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
var inputValues = inputRange.getValues();
var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200").setValues(inputValues);
}
None 这是有效的应用程序脚本代码:
Range("G2:G200").Select;
Selection.Copy;
Range("E2:E200").Select;
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False;
所以,我为一群人制作了一个 Google Spreadsheet,用于跟踪 Reddit 子上一大群人的每周 "counts"。我试图自动化的事情是两件事。我遇到问题的那个是我认为最简单的那个,只需复制一组 (G2:G200) 中的值以覆盖另一组 (E2:E200) 中的值。我也有其他一些问题,但我更感兴趣的是解释我在那里做错了什么,而不仅仅是一个答案。最大的一个是,这应该是在 sheet 上制作自定义菜单,但我似乎无法让它工作,即使我基本上从 Google 教程中复制了脚本.我已经尝试了这两种方式的脚本,一种使用与 Excel 相同的脚本,在记录相同的基本内容时打印出来:
function UpdateLore_() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.alert(
'Please confirm',
'Only do this once per week, at end of updates.',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
Range("G2:G200").Select;
Selection.Copy;
Range("E2:E200").Select;
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False;
} else {
// User clicked "No" or X in the title bar.
ui.alert('No Changes Made.');
}
}
这 returns 是 "Selection.PasteSpecial" 行上的一个错误。我尝试的另一种方法是使用我可以在网上找到的方法:
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
function copyFunction () {
var inputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
var inputValue = inputRange.getValue();
var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200");
}
代码的顶部如下所示:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Weekly Update')
.addItem('Update for Lore', 'UpdateLore')
.addItem('Update for XP Master', 'UpdateMaster')
}
我觉得我遗漏了一些非常明显的东西,尤其是整个 "doesn't seem to change the sheet in anyway" 部分。感谢您的帮助
得到了一些答案,现在可以使用了,感谢所有帮助:
知道了,感谢大家的帮助。新代码如下所示:
function UpdateLore() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.alert(
'Please confirm',
'Only do this once per week, at end of updates.',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
copyFunction ();
}
function copyFunction () {
var inputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
var inputValues = inputRange.getValues();
var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200").setValues(inputValues);
}
if (result ==ui.Button.NO) {
// User clicked "No" or X in the title bar.
ui.alert('No Changes Made.');
}
}
要向 sheet 添加数据,您需要使用:
- 设置值()
- setValues()
- appendRow()
您在 if
正文中有一个函数:
if (result == ui.Button.YES) {
// User clicked "Yes".
function copyFunction () {
. . . .
}
}
如果你想在此时调用另一个函数,你可以使用:
if (result == ui.Button.YES) {
// User clicked "Yes".
copyFunction ();
};
function copyFunction () {
. . .
};
您需要设置从输入范围到输出范围的值。使用 outputRange 上的 .setValues() 来执行此操作。
function copyFunction () {
var inputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
var inputValues = inputRange.getValues();
var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200").setValues(inputValues);
}
None 这是有效的应用程序脚本代码:
Range("G2:G200").Select;
Selection.Copy;
Range("E2:E200").Select;
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False;