2017-03-17 6 views
1

Google 시트 스크립트에 정통하지 않은 사실을 바탕으로 인터넷 검색 및 물건 제작에 나만의 노력을 기울였습니다.사용자 정의 Google 시트 고정 타임 스탬프 수식

RSS 리더에 기사를 저장하면 IFTTT.com을 사용하여 자동으로 Google 시트를 추가합니다.

IFTTT가 작동하는 방식으로 저장된 기사의 다양한 특성을 기반으로 시트의 맨 아래에 행이 추가됩니다.

행에 자동 비 휘발성 타임 스탬프를 추가 할 때 문제가 있습니다.

셀에 입력 할 때 작동하지만 시트가 추가 될 때 작동하지 않는 아래의 자동 타임 스탬프 기능을 사용해 보았습니다.

function onEdit(event) 
{ 
    var timezone = "GMT-5"; 
    var timestamp_format = "MM-dd-yyyy"; // Timestamp Format. 
    var updateColName = "Article Title"; 
    var timeStampColName = "Date Discovered"; 
    var sheet = event.source.getSheetByName('Sheet1'); //Name of the sheet where you want to run this script. 


    var actRng = event.source.getActiveRange(); 
    var editColumn = actRng.getColumn(); 
    var index = actRng.getRowIndex(); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
    var dateCol = headers[0].indexOf(timeStampColName); 
    var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1; 
    if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself! 
    var cell = sheet.getRange(index, dateCol + 1); 
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format); 
    cell.setValue(date); 
    } 
} 

IFTTT는 어떤 컬럼에 이식됩니다 어떤 데이터를 설정할 수 있습니다, 그리고 Feedly의 데이터는 컬럼에 넣을 수 있습니다 특정 "재료"를 가지고있다.

정적 텍스트와 수식도 허용됩니다.

이 사실을 깨닫고 다음과 같은 사용자 지정 함수를 발견했습니다. 이는 다소 효과가있는 것 같습니다.

function timestamp() { 
return new Date() 
} 

이 기사의 제목에 내용이 있는지 여부를 확인하는 기능을 추가하고, 사실 인 경우 타임 스탬프를 추가 할 수있게되었습니다.

= 타임 스탬프 (간접 ("E"& ROW())) 오늘 시트를 다시로드 할 때

이상하게도이 공식 첫 번째 행은 변경되지 않았다는 (어제 공식을 입력),도 아니다 않았다 시트 아래로 더 내려가십시오.

소스 시트 : 미리 https://docs.google.com/spreadsheets/d/1ybfgOgBkqHdld9_sexzMfdMV2lT6Qp7WgQ8Di96S-a8/edit?usp=sharing

많은 감사합니다.

+0

아마도 OnEdit 또는 OnSubmit {Event Object} (https://developers.google.com/apps-script/guides/triggers/events)에서 기능을 실행하고 타임 스탬프를 적절한 위치에 배치하십시오. 이것은 Trigger IFTTT가 발생시키는 것의 함수입니다. OnEdit이면 트리거에 전달 된 데이터에서 행을 가져올 수 있습니다. 다른 트리거는 스프레드 시트를 통해 루핑하여 마지막 행을 찾습니다. –

답변

0

검색 날짜에만 관심이 있고 정확한 시간이 너무 걱정되지 않기 때문에. 자정 이후 매일 매일 함수를 실행하는 시간 트리거를 설정하여 어제 날짜의 타임 스탬프를 비어 있지 않은 "기사 제목"열로 행에 추가 할 수 있습니다. 여기

그냥을 수행하는 코드는 또한 매일 트리거를 설정하기

// Run this function to setup daily trigger to run at midnight to set the date of discovery. 

function IntializeTrig(){ 

ScriptApp.newTrigger("addTimeStamp").timeBased().atHour(0).everyDays(1).create() 
    // If you have issues with timezone or if you work late at night you can change time to say 2 am by changing to this ".atHour(2)" 
} 
// This function checks to see if the column Date Discovered is empty and add yesterday date to it, if Article Title column is a Non empty String 
function addTimeStamp(){ 
var ss = SpreadsheetApp.getActive() 
var sheet = ss.getSheetByName("Sheet1") 
var updateColName = "Article Title"; 
var timeStampColName = "Date Discovered"; 
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
var dateCol = headers[0].indexOf(timeStampColName), dateCol =dateCol + 1; 
var articleCol = headers[0].indexOf(updateColName), articleCol = articleCol + 1; 
var numOfCol 
if (dateCol < articleCol){ 
    numOfCol = articleCol 
}else { 
    numOfCol = dateCol 
} 
var yesterday = new Date(Date.now() - 864e5) 
var yestDate = yesterday.toISOString().slice(0,10) 
var data = sheet.getRange(2, 1,sheet.getLastRow()-1, numOfCol).getValues() 
for (var i = 0 ; i< data.length ; i++){ 
    if (data[i][articleCol - 1] !== "") 
    if (data[i][dateCol - 1] == "") 
     data[i][dateCol - 1] = yestDate 
} 
    sheet.getRange(2,1,data.length , data[0].length).setValues(data) 
} 

이 도움이 희망하는 기능을 추가합니다!

+0

이것은 아름답게 일했습니다! –