私がGoogle Appsスクリプトのプロジェクトに取り組んでいると私は、コードの私の最後の行で問題に遭遇していますGoogle Appsのスクリプトのスプレッドシート名の変更エラー
sheets[0].setName(sheet.getRange(i,3).getValue());
スクリプトは、スプレッドシートにターゲットGoogleのフォーム入力を受け取り"mysheet"と入力してフォームを作成します。列I(9)にテキストがない場合は、スクリプトが起動し、新しいフォームが作成され、列9が埋められ、aは現在のブックに新しい宛先スプレッドシートを作成します。
これはすべてうまくいきます。私が持っている問題は、作成された新しく作成されたスプレッドシートの名前を変更する最後の段階です。スクリプトはエラーなしで終了するか、わかりにくいサービスコードエラーが表示されます。私は基本的に、新しく生成されたスプレッドシートをフォームの名前に変更する必要があります。私はvlookupを行う別のシートがあり、新しいシートの名前はランダムな "フォームレスポンス#"にすることはできません。
Googleのコードシステムにこのバグが見つかりました。 https://code.google.com/p/google-apps-script-issues/issues/detail?id=5537
これは、とにかく、何が起こっているかを説明します。プロジェクトの早い段階で、バグは、システムが0であると考えたときに、位置1のシートに名前を変更させていました。なぜそれがもう起こっていないのか分かりません。私は何かを変えたにちがいないが、スクリプトエディタは数十程度のリビジョンに戻ってしまい、追跡できない。
私はシート「てMySheet」に名称リセットを強制あればと思った:
sheet.setName("mySheet");
それがうまくいくかもしれません。そしてそれはしました。それ以来、私はより多くのコードを追加しました(以下はスケルトンバージョンです)。私はそれが私が追加した何かであるかどうかを確認するために私のコードをもう一度整理しましたが、それはまだ動作していないようです。私はまた、別のシートをアクティブなシートに設定しようとしましたが、どちらも機能していないようです。
誰にも提案はありますか?あなたの考えを事前に感謝します。
function myFunction() {
var ss = SpreadsheetApp.openById('1gg8FTt_3_Ude5qEmpqlvjZdQocXbYzOKJrgGeLC3cMc');
var sheet = ss.getSheetByName("mySheet");
var range = sheet.getRange("A1:I7");
for (var i = 1; i <= range.getNumRows(); i++) {
var cell = sheet.getRange(i,9).getValue();
if(cell == ''){
var form = FormApp.create(sheet.getRange(i,3).getValue());
var linktoliveform = form.getPublishedUrl();
var contentsforcell = '=HYPERLINK("' + linktoliveform + '","' + sheet.getRange(i,3).getValue() + '")';
sheet.getRange(i,9).setValue(contentsforcell);
form.setCollectEmail(true);
form.setDescription(sheet.getRange(i,4).getValue());
var item = form.addParagraphTextItem();
item.setTitle(sheet.getRange(i,5).getValue());
form.setDestination(FormApp.DestinationType.SPREADSHEET,'1gg8FTt_3_Ude5qEmpqlvjZdQocXbYzOKJrgGeLC3cMc');
//sheet.setName("mySheet"); //reset name on mySheet sheet to force sheets/getsheets list to renumerate. https://code.google.com/p/google-apps-script-issues/issues/detail?id=5537
var sheets = ss.getSheets();
sheets[0].setName(sheet.getRange(i,3).getValue());
}
}
}
値がi、3から返されたことを確認しましたか?あなたは同じシートを7回改名していますが、私はその理由を伝えられません。 – Jonathon
こんにちはJonathon。はい、私は、フォームが呼び出されるはずの名前の名前を正しく返します(差別化)。それは私のドライブに正常にフォームを作成します。ループは、基本的にはどの行がまだ処理されていないかをスキャンするために、シート・マイシート全体(このポストの場合は7セルに制限されていました。したがって、列Iの最初の3つの行に既にフォームがある場合、新しい行は取得されません。 – user3853379
'setName'コマンドの前に' SpreadsheetApp.flush() 'を試して、このコマンドを実行する前に実際にシートが作成されていることを確認してください。 –