2015-05-04 5 views
0

Итак, я создал таблицу Google для группы людей, которая будет использовать отслеживание еженедельных «подсчетов» для большой группы людей в подраздел Reddit. То, что я пытаюсь автоматизировать, - это две вещи. Тот, с которым у меня возникают проблемы, - это тот, который, как я думал, был бы самым простым, просто скопировав значения из одного набора (G2: G200), чтобы перезаписать значения в другом (E2: E200). У меня есть и другие проблемы, но меня больше интересует объяснение того, что я делаю неправильно, чем просто ответ. Самый большой из них заключается в том, что предполагается создать пользовательское меню на листе, и я не могу заставить его работать, хотя я в основном копировал сценарий из учебника Google для этого. Я пробовал сценарий для этих двух способов, один используя тот же сценарий, как Excel распечатан при записи той же самой основной вещи:copy paste google spreadsheet

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.'); 
    } 
} 

Это возвращает arror на линии «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') 
} 

Я чувствую, что я что-то очень очевидное отсутствует , особенно с целым «, кажется, не изменяет лист в любом случае». Спасибо за любую помощь


Есть несколько ответов, и теперь он работает, спасибо за всю помощь:

Понял, спасибо за помощь. Новый код выглядит следующим образом:

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.'); 
    } 
} 
+0

Хорошо, я установил верхнюю часть, и сценарий теперь работает, по крайней мере, с помощью «онлайн» путь, но это не делает на самом деле что-то делать, по крайней мере, насколько я могу судить. –

ответ

0

Чтобы добавить данные в лист нужно использовать:

Вы имеете получил функцию внутри корпуса if:

if (result == ui.Button.YES) { 
    // User clicked "Yes". 
    function copyFunction() { 
    . . . . 
    } 
} 

Если вы хотите, чтобы вызвать другую функцию в этой точке, вы можете использовать:

if (result == ui.Button.YES) { 
    // User clicked "Yes". 
    copyFunction(); 
}; 

function copyFunction() { 
    . . . 
}; 
0

Вы должны установить значение от inputRange к 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); 
} 

Ничего из этого не действительны приложения код сценария:

Range("G2:G200").Select; 
    Selection.Copy; 
    Range("E2:E200").Select; 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False; 
+0

Это, похоже, ничего не делало Спенсером, ни одно из значений не изменилось при запуске скрипта. –

+0

Нет, это не работает. Похоже, вы добавили изменения в свой код. –