スクリプトでフォームを再生成する機能を維持しながら、特定のフォーム URL を一貫して再利用する必要があります。そのために、フォーム データを削除する関数を作成しました。最初に、form.getItems() を実行していて、トピックにエラーが表示されていました。私はプログラマーではなく、コードが非常に非効率的である可能性が高いためだと考えて、ルーチンを書き直して、各 itemType と各項目の削除間の遅延を分割しました。これにより、ルーチンが信じられないほど遅くなりますが、Googleがそれを機能させることができれば、遅くても対処できます.
ここに私が現在持っているコードがありますが、残念ながら、まだ同じエラーが発生しています。私の問題は、実際には Google のバックエンドの問題ですか? それは私のコードですか?両方?
フォーム情報用のグローバル変数があります。
var formurl='*a url that works for me*'
var form=FormApp.openByUrl(formurl);
function DeleteFormItems() {
var formcheckboxitems=form.getItems(FormApp.ItemType.CHECKBOX);
var formdateitems=form.getItems(FormApp.ItemType.DATE);
var formdatetimeitems=form.getItems(FormApp.ItemType.DATETIME);
var formdurationitems=form.getItems(FormApp.ItemType.DURATION);
var formgriditems=form.getItems(FormApp.ItemType.GRID);
var formimageitems=form.getItems(FormApp.ItemType.IMAGE);
var formlistitems=form.getItems(FormApp.ItemType.LIST);
var formmultiplechoiceitems=form.getItems(FormApp.ItemType.MULTIPLE_CHOICE);
var formpagebreakitems=form.getItems(FormApp.ItemType.PAGE_BREAK);
var formparagraphtextitems=form.getItems(FormApp.ItemType.PARAGRAPH_TEXT);
var formscaleitems=form.getItems(FormApp.ItemType.SCALE);
var formsectionheaderitems=form.getItems(FormApp.ItemType.SECTION_HEADER);
var formtextitems=form.getItems(FormApp.ItemType.TEXT);
var formtimeitems=form.getItems(FormApp.ItemType.TIME);
for (var i = formcheckboxitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formdateitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formdatetimeitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formdurationitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formgriditems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formimageitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formlistitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formmultiplechoiceitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formparagraphtextitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formscaleitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formsectionheaderitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formtextitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formtimeitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
for (var i = formpagebreakitems.length-1; i >= 1; i--) {
Utilities.sleep(2000)
form.deleteItem(i);
};
}
これが私の更新されたスクリプトです。件名に記載されているエラーがまだ発生していますが、メッセージを取得する前にさらに進行します(いくつかのアイテムを削除します)。
var formurl='*a url that works for me*'
var form=FormApp.openByUrl(formurl);
function DeleteFormItems() {
var formitems=form.getItems();
Logger.log('There are '+formitems.length+' total form items');
for (var i = 1; i <= formitems.length-1; i++) {
Utilities.sleep(2500)
form.deleteItem(formitems[i]);
};
}