나는 다음과 같은 것을 가지고 있습니다. script.동일한 스프레드 시트의 여러 시트에서 Google 스크립트를 자동으로 실행하는 방법
상황 :
내가 10 개 워크 시트 15 사용자가 로그인하고 수정과 스프레드 시트를 가지고있다.
스크립트 기능 :
Inserts the number of days between two days in the activesheet in a specific column, Script compare date from column J and TodayDay and inserts the difference in the column F.
문제 :
I can not run this script with using timed triggers. I want to run this script every 15 min for the concurrent sheet.
테스트 케이스 :
The trigger only runs with timing if I have only one sheet in the spreadsheet. The trigger doesn't run with timing if I have more than one sheet. The trigger only runs for more than one sheet if I set the same trigger OnEdit.
내가 모든 시트 또는 활성 시트마다 15 분 내가 가지고 있기 때문에이 스크립트를 실행해야합니다 OnEdit를 실행하는 다른 두 개의 스크립트. OnEdit에서도이 스크립트를 설정하면 스프레드 시트가 천천히 돌아옵니다.
function onOpen() {
var menuEntries = [ {name: "UpdateAge", functionName: "toTrigger"},
];
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu("Tools",menuEntries);//
}
// create a timer trigger that will call "toTrigger" every 15 minutes
function toTrigger(){
var sh = SpreadsheetApp.getActiveSheet();
var data = sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
for(var n=0;n<data.length;++n){
if(typeof(data[n][9])=='object'){
data[n][5]=dayToToday(data[n][9])
}
}
sh.getRange(1,1,data.length,data[0].length).setValues(data)
}
function dayToToday(x){
var refcell = x;;// get value in column A to get the reference date
var refTime = new Date(refcell);
var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
var today = new Date();
var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
var day = parseInt(TD-ref);// get the difference in days (integer value)
return day ; // return result that will be in cell
}
편집 :
안녕 Srik, 너무 많은 지금 노력하고 있습니다
감사 작업입니다.
function onOpen() {
var menuEntries = [ {name: "UpdateAge", functionName: "shellFunction"},
];
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu("Tools",menuEntries);//
}
function shellFunction(){
var sheets = ['Sheet1','Sheet2','Sheet3','Sheet4'];
for (var s in sheets){
toTrigger(sheets[s]);
}
}
// create a timer trigger that will call "toTrigger" every 15 minutes
function toTrigger(sheetName){
var ss = SpreadsheetApp.openById('SHEET ID');
var sh = ss.getSheetByName(sheetName);
var data = sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
for(var n=0;n<data.length;++n){
if(typeof(data[n][9])=='object'){
data[n][5]=dayToToday(data[n][9])
}
}
sh.getRange(1,1,data.length,data[0].length).setValues(data)
}
function dayToToday(x){
var refcell = x;;// get value in column A to get the reference date
var refTime = new Date(refcell);
var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
var today = new Date();
var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
var day = parseInt(TD-ref);// get the difference in days (integer value)
return day ; // return result that will be in cell
}
왜 스프레드 시트 기능을 사용하지 않습니까? 소란없이 각 행의 일별 차이를 계산할 수 있습니다. 참조 날짜와 toda의 날짜를 함수 매개 변수로 보내주십시오. – Taras
매번 스프레드 시트가 수정 중이므로 ex에 수식 배열을 사용할 수 없습니다. 해당 행의 활동이 완료되면 삭제됩니다.
예 : 수식을 사용하는 경우 누군가를 새로운 행으로 드래그해야합니다. 오류 또는 복잡한 시트를 피하려면이 스크립트를 사용하여 아무런 문제없이 자동으로 번호를 삽입합니다. 누군가 수식이있는 셀을 삭제하면됩니다.
배열 수식을 사용하지만 새 행을 추가 할 때 수식은 배열을 사용하여 자동으로 끌지 않습니다.
제 경우에는 수식을 구현할 수 없습니다. 어떤 제안이라도 있으면 알려주세요. –