2

Google スプレッドシート用に 3 つの個別の関数を作成しました。それぞれが学生の電子メール アドレス (firstname.lastnameXX@d155.org) を入力として受け取ります。ここで、XX は学生の卒業年を表し、3 つの情報のうちの 1 つを返します。それぞれ。

  1. ファーストネーム
  2. 苗字
  3. クラス(初級、中級、中級、上級)

どの列に学生のメールアドレスのリストが含まれているかをユーザーに尋ねるアドオンを作成し、その列をループして、各学生のメールアドレスで各関数を実行し、データを別々の列に分けたいと思います。メニュー項目を作成し、機能を割り当てることに慣れています。すばらしい for ループまたは 3 が必要な気がします。また、いくつかのロジックと、ユーザーがどの列に電子メール アドレスがあるかを選択する方法を組み込む必要もあります。以下は、私の各関数のコードです。どんな助けでも大歓迎です!

   //Takes a student's email address and returns their proper first name. 
function FNAME(input) {
  var length = input.length;
  var shortened = input.substring(0, length-11);
  var replaceSpace = shortened.replace('.', ' ');
  var spacePlace = replaceSpace.indexOf(" ");
  var fName = replaceSpace.charAt(0).toUpperCase() + replaceSpace.slice(1, spacePlace);
  return fName;

}

//Takes a student's email address and returns their proper last name. 
function LNAME(input) {
  var length = input.length;
  var shortened = input.substring(0, length-11);
  var replaceSpace = shortened.replace('.', ' ');
  var spacePlace = replaceSpace.indexOf(" ");
  var lName = replaceSpace.charAt(spacePlace+1).toUpperCase() + replaceSpace.slice(spacePlace+2);
  return lName;

}

//Takes a student's email address and returns their class.
function GLEVEL(input) {
  var currentTime = new Date();
  var length = input.length;
  var shortened = input.substring(0, length-9);
  var newLength = shortened.length;
  var gyear = input.substring(newLength-2, newLength);
  var year = currentTime.getYear();
  var month = currentTime.getMonth();

  if (year - gyear == 2000 && month <= 6) {
    gyear = "Senior";
  }
  else if (year - gyear == 1999 && month >= 7) {
    gyear = "Senior";
  }

  if (year - gyear == 1999 && month <= 6){
    gyear = "Junior";
  }
  else if (year - gyear == 1998 && month >= 7) {
    gyear = "Junior";
  }

  if (year - gyear == 1998 && month <= 6){
    gyear = "Sophomore"
  }
  else if (year - gyear == 1997 && month >= 7) {
    gyear = "Sophomore";
  }

  if (year - gyear == 1997 && month <= 6){
    gyear = "Freshman";
  }
  else if (year - gyear == 1996 && month >= 7) {
    gyear = "Freshman";
  }
  return gyear;  

}
4

2 に答える 2

1

そこには:

getColumn()

Range クラスのメソッド。

Google ドキュメント - getColumn

function askUserToSelectColumn() {

  var thisSS = SpreadsheetApp.getActiveSpreadsheet();

  Browser.msgBox('Please click anywhere in the column that has the emails.  then click OK');

  var activeColumn = thisSS.getActiveCell().getColumn();

  var runCheck = Browser.msgBox('The active Column is Column x.  Run Program?', Browser.Buttons.OK_CANCEL);

  if (runCheck === 'ok') {
    loopThroughTheColumn(activeColumn); //Trigger function to run and pass the column number
  };  
};

列を処理する関数:

function loopThroughTheColumn(argWhatColumn) {
  Logger.log('argWhatColumn: ' + argWhatColumn);
  var thisSS = SpreadsheetApp.getActiveSpreadsheet();
  var theSheet = thisSS.getSheetByName('theSheetNameToGet');

  //getRange(row, column, numRows, numColumns)
  var columnData = theSheet.getRange(2, argWhatColumn, 10, 1);
  Logger.log('columnData: ' + columnData);

  for (i=0;i<columnData.length;i++) {
    //Code for each row in the column
  };
};

Logger.log()ステートメントの使用に注意してください。このLogger.log()ステートメントは情報を LOGS に出力し、[VIEW]、[LOGS] メニューから表示できます。

また、デバッガーの使用方法も学びます。

デバッガーとブレークポイント

于 2015-03-20T14:58:43.837 に答える
0

数式を使用できますが、本当にアドオンを作成したい場合は、プログラムで数式を挿入することをお勧めします。

ここにそれらのシートがあります: https://docs.google.com/spreadsheets/d/1iGwlZ6w8M8O5ye8Sjg8dxQmSTbB6ilT5ZIG9J-9LW80/edit?usp=sharing

colA: John.doe15@d155.org
colB: =left(A2,search(".",A2)-1)   ~ result: John
colC: =mid(A2,search(".",A2)+1,search("@",A2)-search(".",A2)-3)   ~ result: doe
colD: =mid(A2,search("@",A2)-2,2)   ~ result: 15
colE: =if(D2="15","Senior",if(D2="16","Junior",if(D2="17","Sophmore",if(D2="18","Freshmen"))))  ~ result: Senior

これを arrayFormula() 関数で囲むこともでき、列全体に自動入力されます。

colA: John.doe15@d155.org
B2: =arrayFormula(left(A2:A10,search(".",A2:A10)-1))
C2: =arrayFormula(mid(A2:A10,search(".",A2:A10)+1,search("@",A2:A10)-search(".",A2:A10)-3))
D2: =arrayFormula(mid(A2:A10,search("@",A2:A10)-2,2))
E2: =ArrayFormula(if(D2:D10="15","Senior",if(D2:D10="16","Junior",if(D2:D10="17","Sophmore",if(D2:D10="18","Freshmen")))))
于 2015-03-20T15:05:10.750 に答える