私は先生です。私のクラスでは、学生一人につき1部ずつ、ブランクのグレーディングルークをコピーする必要があります。このルーブリックはGoogleのシートです。 (1)クラス名簿が入っている別のシートにアクセスし、(2)学生の名前を名簿から読んで、(3)生徒ごとに新しいスプレッドシートを作成し、生徒の名前で保存しますファイル名すべての作品(それは何らかの理由で非常に遅いですが、動作します)。スクリプト作成シートの名前をそのシートのセルに書き込む方法は?
今、私はその学生のルーブリックのコピーのセルに学生の名前を書き込もうとしています。私の考えは、元のルーブリックの関連するセルに生徒の名前を書いて、それを生徒の名前の下に保存することでした。しかし、その部分は機能しません。セル内の名前がファイル名と一致しません。代わりに、セル内の名前は、の前にの生徒の名前と一致します。ここでは、コードです:
function onerubricperstudent(){
//"roster" is the roster spreadsheet. Change the value in quotation marks to whatever your roster's ID is.
var roster = SpreadsheetApp.openById("1SN2x6bKzga6bRwwvt5diuaETBiXeHqY7bLJMY5If9js");
//"sheet" is sheet to be copied
var sheet = SpreadsheetApp.getActiveSpreadsheet();
//range is the range on the roster sheet containing the student names
var range = roster.getRange('Sheet1!A1:A17');
//do this as many times as there are students in the class
for (var i = 1; i < 18; i++) {
//get the next student name
var studentname = range.getCell(i, 1);
//log the name (for troubleshooting if the script fails)
Logger.log(studentname.getValue());
//Write the student's name to the name cell on the sheet
sheet.getRange('B2').setValue(studentname.getValue());
//Make a copy of the sheet and save it with the student's name
DriveApp.getFileById(sheet.getId()).makeCopy(studentname.getValue());
}
}
期待通りに動作しないラインがある:
sheet.getRange('B2').setValue(studentname.getValue());
私が間違って何をしているのですか?
注:
function onOpen() {
var sheetname = SpreadsheetApp.getActive().getName();
var sheet = SpreadsheetApp.getActiveSpreadsheet();
sheet.getRange('B2').setValue(sheetname);
}
:回避策として、私は学年に学生の作品をルーブリックを開いてコピーし、生徒名のセルにシート名をこの開く時のスクリプトを追加しましたこれは仕事を終わらせますが、元のコードの何が間違っているかを知りたいです。
ありがとうございます!
ブリリアント:ここ
はいくつかのコードです! 'Spreadsheetapp.flush()'がトリックを行いました。また、あなたのコードは私のものよりも、よりリーンでエレガントです(これはスクリプト作成の2回目または3回目の試みです;私は多くのことを学ぶ必要があります)。あなたの助けをありがとう。 – murph
@murph - 援助できることを嬉しく思います:) – Will