2016-07-29 71 views
2

我正在嘗試從出席人數中找到一個員工ID,該ID跨越多個工作表並將時間戳記拉成一張工作表。從多個工作表中提取值Google工作表

Google工作表中有多張工作表。每個工作日都有單獨的工作表:Daily sheets

每張出勤單有兩列。爲了知道員工登錄的所有時間,我希望將所有工作表中的員工ID發生的所有事件以及時間戳記拉到合併表中:Consolidation sheet

我在Excel中做過類似的事情,可以使用Google Apps腳本在Google工作表中完成猜測。

如果有人能指引我使用Google表格中的內置或自定義功能,這將會很有幫助。

+0

我想你將不得不爲此編寫一個自定義函數。如果數據總量足夠小以適應可用的RAM,則只需將所有信息讀取到javascript對象/數組中,然後以合適的格式將其寫入合併表。 – SpiderPig

+0

@SpiderPig自定義工作表功能無法使用任何需要身份驗證的服務,因爲它們以匿名用戶身份執行,例如SpreadsheetApp服務。有關詳情,請參閱以下網址:https://developers.google.com/apps-script/guides/services/authorization –

回答

1

我會幫你提供一個基本的概要,一些建議和一些資源來幫助,但不要指望我寫出整個事情。


1步 - 創建一個自定義菜單選項

你會希望能夠從電子表格訪問你的腳本。您可以通過創建自定義菜單選項來完成此操作。這是一個article by google on custom menus

雖然google使用簡單的觸發器onOpen,但我發現installable triggers更可靠。

第2步 - 獲取用戶輸入

這將是很好的提示輸入員工的ID,並有腳本的工作它的魔力。這裏是一個article by google on dialogs and sidebars,討論如何獲得腳本的用戶輸入。

第3步 - 閱讀並從電子表格數據寫入

您可以用SpreadsheetApp訪問spreadsheeet數據。從自定義菜單調用腳本時,可以使用SpreadsheetApp.getActiveSpreadsheet;但是,如果要在腳本編輯器中測試代碼,則不存在「活動電子表格」,因此請改用SpreadsheetApp.openById

通過訪問電子表格,您可以撥打:

spreadsheet.getSheetByName("name").getRange(1, 1, 2, 2).getValues(); 
spreadsheet.getSheetByName("name").getRange(1, 1, 2, 2).setValues([[1, 2], [3, 4]]); 

注意getValuessetValues與2維數組

警告工作 - 像往常一樣,I/O需要大量的處理時間,以避免不必要地調用getRange().XetValues,這google article about appscript best practices進入更多的細節。另外,如果你有很多出勤單,那麼你可能要考慮將它們凝聚成一個。

第4步 - 獲取適當的張

你需要某種方式來區分哪個電子表格中的表是簽到表:

function isAttendanceSheet(sheet) { 
    return /Magical regex/.test(sheet.getName); 
} 

var sheets = spreadsheet.getSheets().filter(isAttendanceSheet); 

有適合您的神奇的正則表達式來了,這將過濾它們。


希望這會有所幫助,祝你好運!

相關問題