2012-10-19 39 views
1

我有一份表格,希望我的員工每天都能完成。爲此,我在電子表格中添加了一個腳本,用於將表單的鏈接自動通過電子郵件發送給共享電子表格的每個人。還有每週發送回他們回覆的電子郵件。我已將所有共享用戶存儲在ScriptDb中。我想要做的是編寫一個UiApp,以便設置用戶偏好,以便每日/每週的電子郵件可以被禁用。我還希望能夠在這裏添加沒有與他們共享的工作表的新用戶(對於那些只有鏈接的用戶)。我的整個公司使用谷歌,所以我不必擔心沒有人登錄或訪問的人。如何修改或複製谷歌電子表格中的共享屏幕

起初,我嘗試創建一個簡單的UiApp表單,只顯示現有的共享用戶與電子郵件首選項的複選框。我的doPost從未被叫過,我仍然不確定爲什麼。但是,我真正喜歡的屏幕看起來就像共享設置屏幕,但不是編輯/查看訪問權限,我將擁有用戶首選項。將用戶添加到我的自定義版本的屏幕不會將其添加爲協作者或查看者。

有關如何使用UiApp重新創建共享屏幕的任何想法?

如果這是不可能的,那麼我在當前的簡單首選項屏幕上做錯了什麼?

function editUserPreferences() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 

updateUserPreferences(); 
var db = ScriptDb.getMyDb(); 
var results = db.query({}); 
var saveUserRow = []; 

//define form 
var app = UiApp.createApplication().setTitle("Edit User's Email Preferences"); 
app.setHeight(550).setWidth(800); 
var form = app.createFormPanel().setId('frm'); 
var formContent = app.createGrid(results.getSize()+5,3); 
formContent.setWidget(0, 0, app.createLabel('Email Address')); 
formContent.setWidget(0, 1, app.createLabel('Receive Daily')); 
formContent.setWidget(0, 2, app.createLabel('Receive Weekly')); 
formContent.setWidget(1, 1, app.createLabel('Reminder')); 
formContent.setWidget(1, 2, app.createLabel('Entries')); 

var row = 2; 
while (results.hasNext()) { 
var obj = results.next(); 
row = row+1; 
formContent.setWidget(row, 0, app.createTextBox().setValue(obj.email).setReadOnly(true)); 
formContent.setWidget(row, 1, app.createCheckBox().setValue(obj.preferences.dailyEmail).setName('daily' + row)); 
formContent.setWidget(row, 2, app.createCheckBox().setValue(obj.preferences.weeklyEmail).setName('weekly' + row)); 
obj.row = row; 
saveUserRow.push(obj); 
} 

// file changes 
var results = db.saveBatch(saveUserRow, false); 
if (db.allOk(results)) { 
// everything went swimmingly, proceed 
} 
else { // partial or no success 
for (var i = 0 ; i < results.length; i++) { 
var item = results[i]; 
if ((typeof item.success) == 'function' && !item.success()) { 
MailApp.sendEmail(Session.getActiveUser().getEmail(), "Error Updating Script Database", Logger.getLog()); 
} 
} 
} 

row = row + 2; 
formContent.setWidget(row, 1, app.createSubmitButton('Submit')); 

form.add(formContent); 
app.add(form); 
ss.show(app); 
} 

function doPost(e) { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var app = UiApp.getActiveApplication(); 
var db = ScriptDb.getMyDb(); 
var results = db.query({}); 
var editedUserData = []; 

Logger.log("in doPost"); 
while (results.hasNext()) { 
var obj = results.next(); 
var dailyParam = "daily" + obj.row; 
var weeklyParam = "weekly" + obj.row; 
Logger.log("test"); 
Logger.log(obj.email); 
Logger.log(dailyParam); 
Logger.log(weeklyParam); 
obj.preferences.dailyEmail = e.parameter.dailyParam; 
obj.preferences.weeklyEmail = e.parameter.weeklyParam; 
Logger.log(Utilities.jsonStringify(obj)); 
editedUserData.push(obj); 
} 

app.close(); 
return app; 
} 

沒有從記錄的doPost和執行交易的最後一個條目是:

FormPanel.getId() 
FormPanel.getId() 
UiInstance.isStandardsMode() 

回答

0

國民黨 - 有沒有辦法通過編程控制共享屏幕。你必須像在這裏一樣重建它。

關於你的問題與doPost - 我看到它的工作。我認爲在doPost中生成的日誌有一個記錄器問題(異步不工作)。嘗試在doPost中創建一個文件或附加到電子表格,這將起作用。

+0

謝謝,我最終在電子表格中創建了另一張表來控制用戶訪問。謝謝! – kmt

+0

很高興知道。記錄器問題現在也應該解決。 –

相關問題