我正在嘗試從出席人數中找到一個員工ID,該ID跨越多個工作表並將時間戳記拉成一張工作表。從多個工作表中提取值Google工作表
Google工作表中有多張工作表。每個工作日都有單獨的工作表:
每張出勤單有兩列。爲了知道員工登錄的所有時間,我希望將所有工作表中的員工ID發生的所有事件以及時間戳記拉到合併表中:。
我在Excel中做過類似的事情,可以使用Google Apps腳本在Google工作表中完成猜測。
如果有人能指引我使用Google表格中的內置或自定義功能,這將會很有幫助。
我正在嘗試從出席人數中找到一個員工ID,該ID跨越多個工作表並將時間戳記拉成一張工作表。從多個工作表中提取值Google工作表
Google工作表中有多張工作表。每個工作日都有單獨的工作表:
每張出勤單有兩列。爲了知道員工登錄的所有時間,我希望將所有工作表中的員工ID發生的所有事件以及時間戳記拉到合併表中:。
我在Excel中做過類似的事情,可以使用Google Apps腳本在Google工作表中完成猜測。
如果有人能指引我使用Google表格中的內置或自定義功能,這將會很有幫助。
我會幫你提供一個基本的概要,一些建議和一些資源來幫助,但不要指望我寫出整個事情。
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]]);
注意getValues
和setValues
與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);
有適合您的神奇的正則表達式來了,這將過濾它們。
希望這會有所幫助,祝你好運!
我想你將不得不爲此編寫一個自定義函數。如果數據總量足夠小以適應可用的RAM,則只需將所有信息讀取到javascript對象/數組中,然後以合適的格式將其寫入合併表。 – SpiderPig
@SpiderPig自定義工作表功能無法使用任何需要身份驗證的服務,因爲它們以匿名用戶身份執行,例如SpreadsheetApp服務。有關詳情,請參閱以下網址:https://developers.google.com/apps-script/guides/services/authorization –