私は、行と列とセルの配置が同じ2つのスケジュールを持っています。常に一定になるセルがありますが、フィールドが変更されるセルがあります。だから私は、2つの同一のシートの1つを呼び出すと、事前定義されたセルをクリアカスタムメニューのスクリプトを持っています。スクリプト側では、基本的に同じスクリプトを2回コピー/ペーストし、アクティベートシート名を変更しました。しかし、私はそのように重複しているように感じる。私はただ1つのスクリプトを持つことができる方法はありますか、私はそれを選択したメニュー項目に応じて、適切なスケジュールを拭くでしょうか?googleスクリプトをよりコンパクトにする(コンテンツを消去するためのスクリプト)
このカスタムメニュースクリプト
function resetsheetbutton() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Advanced Menu')
.addSubMenu(ui.createMenu('Reset Schedule')
.addItem('Schedule 1', 'resetschedule1')
.addSeparator()
.addItem('Schedule 2', 'resetschedule2'))
.addToUi();
}
これは、それが2 をスケジュールするためにポイントを除いてこれは、スケジュール2で同じ正確なスクリプトですスケジュールを一掃するためのスクリプト1
function resetschedule1(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName('Notification'));
var sheet = spreadsheet.getActiveSheet();
var spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet1.getSheetByName('Schedule 1'));
var sheet1 = spreadsheet1.getActiveSheet();
var startRow = 2;
var lastRow = 80;
var range = sheet.getRange(2,11,lastRow-startRow+1,1);
var numRows = range.getNumRows();
var reset = range.getValues();
for (var i = 0; i < numRows; i++) {
var row = reset[i];
sheet1.getRange(row).clearContent();
}
sheet1.getRange('C3').setValue('Insert new Date here');
sheet1.getRange('D3').setValue('Insert this week's task');
sheet1.getRange('D29').setValue('Insert this week's task');
sheet1.getRange('D55').setValue('Insert this week's task');
sheet1.getRange('D81').setValue('Insert this week's task');
sheet1.getRange('D107').setValue('Insert this week's task');
sheet1.getRange('C6').setValue('=C5');
sheet1.getRange('C25').setValue('=C5');
sheet1.getRange('C32').setValue('=C31');
sheet1.getRange('C51').setValue('=C31');
sheet1.getRange('C58').setValue('=C57');
sheet1.getRange('C77').setValue('=C57');
sheet1.getRange('C84').setValue('=C83');
sheet1.getRange('C103').setValue('=C83');
sheet1.getRange('C110').setValue('=C109');
sheet1.getRange('C129').setValue('=C109');
}
です私はシートをアクティベートシートを一掃するのではなく、シートに具体的に名前を付けるので、スケジュールをクリアする人が間違ったスケジュールを誤ってクリアしないようにします。
function resetschedule2(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName('Notification'));
var sheet = spreadsheet.getActiveSheet();
var spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet1.getSheetByName('Schedule 2'));
var sheet1 = spreadsheet1.getActiveSheet();
var startRow = 2;
var lastRow = 80;
var range = sheet.getRange(2,11,lastRow-startRow+1,1);
var numRows = range.getNumRows();
var reset = range.getValues();
for (var i = 0; i < numRows; i++) {
var row = reset[i];
sheet1.getRange(row).clearContent();
}
sheet1.getRange('C3').setValue('Insert new Date here');
sheet1.getRange('D3').setValue('Insert this week's task');
sheet1.getRange('D29').setValue('Insert this week's task');
sheet1.getRange('D55').setValue('Insert this week's task');
sheet1.getRange('D81').setValue('Insert this week's task');
sheet1.getRange('D107').setValue('Insert this week's task');
sheet1.getRange('C6').setValue('=C5');
sheet1.getRange('C25').setValue('=C5');
sheet1.getRange('C32').setValue('=C31');
sheet1.getRange('C51').setValue('=C31');
sheet1.getRange('C58').setValue('=C57');
sheet1.getRange('C77').setValue('=C57');
sheet1.getRange('C84').setValue('=C83');
sheet1.getRange('C103').setValue('=C83');
sheet1.getRange('C110').setValue('=C109');
sheet1.getRange('C129').setValue('=C109');
}
ご協力いただければ幸いです。
コメントにもこの値を追加します。あなたは誰でも実行のスピードについてコメントすることができますか?現在、私はセル名の列を持っています(例えば、A2、D3:D5、E7など)は約80行です。私はループを通ってそれらを実行しています。実行には約25〜40秒かかります。私はその後、それをスピードアップするために配列関数を介してそれらを実行する間につまずいたが、それは速度で何もしなかった。それがシートを通過し、それらの細胞をより速くクリアするために私ができることは何もありませんか? – User125