我在Google Spreadsheet中使用應用程序腳本來使用表單執行多項操作。我從一個PARAGRAPH_TEXT類型的項目中獲得「無法在對象項中找到函數作爲ParagraghTextItem」
編輯:視覺的人喜歡自己:https://docs.google.com/file/d/0B0dOXR40dAVgNk1MVkZjdjFDLW8/edit?usp=sharing
電子表格首先創建基於特定的細胞在目標表中的值表。這意味着它會填充新創建的與用戶指定的單元格匹配的項目。
電子表格然後將新創建的表單連接到自身,以便將發送到表單的響應也發送到電子表格。通過這樣做,電子表格中會創建一個新工作表來包含這些響應。
用戶然後可以請求電子表格生成一個URL。該URL針對的是表格,但是基於目標表中已經填寫的內容。必須生成URL,因爲這是表單中的項目具有預填充值的唯一方法。
新生成的URL後面跟着另一個用戶。 URL將它們帶到表單中,但它包含由生成該URL的電子表格定義的預填充值。
其他用戶可以編輯表單的這些值並點擊提交。響應被髮送到表單,表單然後將其發送到電子表格以填充爲了包含這些響應而創建的表單中最底部的行。
一個觸發器被激活(稱爲onFormSubmit),然後抓取最上面一行的值(在包含列標籤的行的正下方)並立即刪除該行。電子表格然後使用這些值來填寫靶片的單元格的值 - 即用於產生從步驟那個URL 3.
爲了澄清相同的那些,所有這些點是創建不可信任的用戶(如果沒有的話,被授予編輯電子表格權限的用戶基本上可以訪問所有事物,包括腳本!)和擁有電子表格的用戶之間的安全連接。擁有電子表格的用戶可以通過編程方式限制不可信任的用戶通過這種方式在電子表格上編輯的內容。
這只是這個時候,事情開始出差錯......
根據所提交的響應的目標表已經被編輯後後,必須生成一個新的URL 遏制那些新更新的值。用戶必須再次請求電子表格生成一個URL來取代舊的。
- 這不會因爲某些原因而發生。它曾經工作得很好,但由於某種原因,現在它只是在解析表單中的第一個項目時崩潰。
執行紀錄:
[13-08-26 10:10:33:779 EDT] Starting execution
[13-08-26 10:10:33:799 EDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
[13-08-26 10:10:33:950 EDT] Spreadsheet.getSheetByName([**REDACTED**]) [0.15 seconds]
[13-08-26 10:10:33:950 EDT] Sheet.getRange([B11:L68]) [0 seconds]
[13-08-26 10:10:33:969 EDT] Spreadsheet.getSheetByName([Element Types]) [0.018 seconds]
[13-08-26 10:10:33:988 EDT] Spreadsheet.getSheetByName([Due Date Last Checked]) [0.018 seconds]
[13-08-26 10:10:33:988 EDT] Sheet.getRange([1, 5]) [0 seconds]
[13-08-26 10:10:33:989 EDT] Range.setFormula([]) [0 seconds]
[13-08-26 10:10:33:989 EDT] Range.setFormula([=NOW()]) [0 seconds]
[13-08-26 10:10:34:173 EDT] Range.getValue() [0.183 seconds]
[13-08-26 10:10:34:420 EDT] DriveApp.getFolderById([**REDACTED**]) [0.247 seconds]
[13-08-26 10:10:34:420 EDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
[13-08-26 10:10:34:429 EDT] Spreadsheet.getName() [0.008 seconds]
[13-08-26 10:10:34:429 EDT] Folder.getFilesByName([**REDACTED**]) [0 seconds]
[13-08-26 10:10:35:018 EDT] (class).hasNext() [0.588 seconds]
[13-08-26 10:10:35:018 EDT] (class).next() [0 seconds]
[13-08-26 10:10:35:027 EDT] File.getId() [0 seconds]
[13-08-26 10:10:35:249 EDT] FormApp.openById([**REDACTED**]) [0.221 seconds]
[13-08-26 10:10:35:336 EDT] Form.getItems() [0.083 seconds]
[13-08-26 10:10:35:381 EDT] Form.createResponse() [0.039 seconds]
[13-08-26 10:10:35:398 EDT] Spreadsheet.getSheetByName([Cover Sheet]) [0.009 seconds]
[13-08-26 10:10:35:398 EDT] Sheet.getRange([G26]) [0 seconds]
[13-08-26 10:10:35:410 EDT] Range.getValue() [0.011 seconds]
[13-08-26 10:10:35:411 EDT] Item.toString() [0 seconds]
[13-08-26 10:10:35:572 EDT] Execution failed: TypeError: Cannot find function asParagraghTextItem in object Item. (line 82, file "Form Scripts") [1.653 seconds total runtime]
的代碼問題在此腳本導致崩潰的塊看起來是這樣的:
var form = FormApp.openById(forms.next().getId());
var items = form.getItems();
var form_response = form.createResponse();
var item = items[0];
//Logger.log(item_i+","+"expected ParagraphTextItem: "+item.getType());
var comment = spreadsheet.getSheetByName("Cover Sheet").getRange("G26").getValue();
if(comment){
//THIS LINE BELOW ME IS THE LINE THAT'S CAUSING THE CRASH
var response = item.asParagraghTextItem().createResponse(comment);
form_response.withItemResponse(response);
}
所以!如果我重新運行該腳本,但與記錄器的東西(這是註釋掉的)行,我們得到這樣的記錄:
[13-08-26 10:35:15:225 EDT] undefined,expected ParagraphTextItem: PARAGRAPH_TEXT
這是非常奇怪,因爲飛機墜毀是由該項目所致顯然不是ParagraghTextItem類型的。
任何想法?希望有人在谷歌注意到這一點,因爲我敢肯定這是一個編碼器的bug,而不是一個運行時錯誤這是對我來說有些不好的結果代碼(雖然我可能只是因爲有可能是錯在這裏,在這種情況下,在實現之後,我會接受健康的謙卑)。
男人,我覺得愚蠢缺少的。我正在談論的那種謙卑,哇......感謝你的幫助。 – DylanRaub