0

運が悪かったので答えを探したので、これまでに見たことのない賢い人がいることを願っています。これが私の問題です:

I.注文データを取得するためにスプレッドシートに関連付けられたGoogleフォームがあります。そのスプレッドシートには、フォーム(SubTotal)で行われた選択に基づいて金額を計算するために、1つのセルに配列式があります。

II。フォームのデータに基づいて確認メールを注文者に送信し、他の関係者をコピーするGASを作成しました。OnFormSubmitのトリガーイベントがあります。

III。スクリプトによって生成された電子メールでフィールドSubTotalの値が「未定義」として表示されることを除いて、すべてがうまく機能します。

GASコードは次のとおりです。

function orderconfemail(e) {
  var timestamp = e.values[0];
  var playerLastName = e.values[1];
  var playerFirstName = e.values[2];
  var jerseyNumber = e.values[3];
  var ageGroup = e.values[5];
  var parentLastName = e.values[6];
  var parentFirstName = e.values[7];
  var toAddress = e.values[8];
  var ccAddress = e.values[17];
  var teamName = e.values[13];
  var coachName = e.values[14];
  var mgrName = e.values[16];
  var homeSize = e.values[20];
  var homeQty = e.values[21];
  var awayOrdered = e.values[22];
  var awaySize = e.values[23];
  var awayQty = e.values[24];
  var shortSize = e.values[26];
  var shortQty = e.values[27];
  var jcktOrdered = e.values[28];
  var jcktSize = e.values[29];
  var jcktQty = e.values[30];
  var pntsOrdered = e.values[31];
  var pntsSize = e.values[32];
  var pntsQty = e.values[33];
  var bagOrdered = e.values[34];
  var bagQty = e.values[35];
  var orderTotal = e.values[36];
  var subject = "Futura FC Uniform Order Confirmation for " + playerFirstName + " " + playerLastName;
  var htmlBody = "Thank you for your uniform order, " + parentFirstName + "! Your order date / time was: " + timestamp + "." + 
      "<br/>&nbsp;</br>Your order details are as follows: " +
      "<br/>&nbsp;<br/><b>Player Name:</b> " + playerFirstName + " " + playerLastName +
      "<br/><b>Jersey Number:</b> " + jerseyNumber +
      "<br/><b>Age Goup:</b> " + ageGroup +
      "<br/><b>Team:</b> " + teamName +
      "<br/><b>Coach:</b> " + coachName +
      "<br/><b>Manager:</b> " + mgrName +
      "<br/><b>Home Jersey Size:</b> " + homeSize + 
      "<br/><b>Home Jersey Qty:</b> " + homeQty +
      "<br/><b>Away Jersey Ordered?</b> " + awayOrdered +
      "<br/><b>Away Jersey Size:</b> " + awaySize +
      "<br/><b>Away Jersey Qty:</b> " + awayQty +
      "<br/><b>Short Size:</b> " + shortSize +
      "<br/><b>Short Qty:</b> " + shortQty +
      "<br/><b>Warm Up Jacket Ordered?</b> " + jcktOrdered +
      "<br/><b>Jacket Size:</b> " + jcktSize +
      "<br/><b>Jacket Qty:</b> " + jcktQty +
      "<br/><b>Warm Up Pants Ordered?</b> " + pntsOrdered +
      "<br/><b>Pants Size:</b> " + pntsSize +
      "<br/><b>Pants Qty:</b> " + pntsQty +
      "<br/><b>Backpack Ordered?</b> " + bagOrdered +
      "<br/><b>Backpack Qty:</b> " + bagQty +
      "<br/>&nbsp;<br/><b>Your Order Total:</b> " + orderTotal;
  var optAdvancedArgs = {cc: ccAddress, bcc: "someone@aol.com,someone@embarqmail.com", htmlBody: htmlBody};
  MailApp.sendEmail(toAddress, subject, "Message Body", optAdvancedArgs);
}

そして、これが私の電子メールにどのように表示されるかです(スペースのために小計行以外のすべてを切り取りました)。

親よ、制服をご注文いただきありがとうございます!ご注文日時は2012年5月23日20:10:23でした。

注文合計:未定義

スプレッドシートには、計算された正しい小計が表示されますが、電子メールには表示されません。できますか:

I. GASでその小計を計算しますか?

II。メールを送信する前に、スクリプトにスプレッドシートに行を書き込むように強制しますか?

前もって感謝します!

4

3 に答える 3

1

ヘンリケに同意します。最善の策は、GAS スクリプト内で合計を計算することです。それ以外の

var orderTotal = e.values[36];

あなたが持つことができます

var orderTotal = // ここで計算します。ただし、e.values のすべてのパラメーターは文字列であるため、parseInt(e.values[x]) があることを確認してください。

于 2012-05-24T05:16:47.970 に答える
0

Ⅱ.電子メールを送信する前に、スクリプトで行をスプレッドシートに書き込むように強制しますか?

関数がトリガーされる前に、データは既にスプレッドシート上にあります (したがって、強制する方法はありません)。

問題は、スプレッドシートの値ではなく、フォーム (すべての文字列) で送信されたイベント パラメーターで渡された値を取得していることです。

残念ながら、実際のフォーム値が保存された行を特定する (取得できるようにする) ことは、私たちが望むほど簡単ではありません。詳しくは128号をご覧ください。

orderTotalとにかく、あなたのシナリオでは、スクリプト自体で を計算する方がはるかに簡単だと思います。

于 2012-05-24T03:30:33.023 に答える
0

Henrique と Srik の両方が、私を正しい方向に向けるのに非常に役立ちました。各数量を整数に解析する別の変数を作成し、簡単な計算を行って計算することができました。正しく機能している GAS スクリプトは次のようになります。

function orderconfemail(e) {
  var timestamp = e.values[0];
  var playerLastName = e.values[1];
  var playerFirstName = e.values[2];
  var jerseyNumber = e.values[3];
  var ageGroup = e.values[5];
  var parentLastName = e.values[6];
  var parentFirstName = e.values[7];
  var toAddress = e.values[8];
  var ccAddress = e.values[17];
  var teamName = e.values[13];
  var coachName = e.values[14];
  var mgrName = e.values[16];
  var homeSize = e.values[20];
  var homeQty = e.values[21];
  var homeQtyInt = parseInt(e.values[21]);
  var awayOrdered = e.values[22];
  var awaySize = e.values[23];
  var awayQty = e.values[24];
  var awayQtyInt = parseInt(e.values[24]);
  var shortSize = e.values[26];
  var shortQty = e.values[27];
  var shortQtyInt = parseInt(e.values[27]);
  var jcktOrdered = e.values[28];
  var jcktSize = e.values[29];
  var jcktQty = e.values[30];
  var jcktQtyInt = parseInt(e.values[30]);
  var pntsOrdered = e.values[31];
  var pntsSize = e.values[32];
  var pntsQty = e.values[33];
  var pntsQtyInt = parseInt(e.values[33]);
  var bagOrdered = e.values[34];
  var bagQty = e.values[35];
  var bagQtyInt = parseInt(e.values[35]);
  var orderTotal = ((homeQtyInt*40.50)+(awayQtyInt*25)+(shortQtyInt*24)+(jcktQtyInt*50)+(pntsQtyInt*32.50)+(bagQtyInt*40));
  var subject = "TEST! Futura FC Uniform Order Confirmation for " + playerFirstName + " " + playerLastName;
  var htmlBody = "Thank you for your uniform order, " + parentFirstName + "! Your order date / time was: " + timestamp + "." + 
      "<br/>&nbsp;</br>Your order details are as follows: " +
      "<br/>&nbsp;<br/><b>Player Name:</b> " + playerFirstName + " " + playerLastName +
      "<br/><b>Jersey Number:</b> " + jerseyNumber +
      "<br/><b>Age Goup:</b> " + ageGroup +
      "<br/><b>Team:</b> " + teamName +
      "<br/><b>Coach:</b> " + coachName +
      "<br/><b>Manager:</b> " + mgrName +
      "<br/><b>Home Jersey Size:</b> " + homeSize + 
      "<br/><b>Home Jersey Qty:</b> " + homeQty +
      "<br/><b>Away Jersey Ordered?</b> " + awayOrdered +
      "<br/><b>Away Jersey Size:</b> " + awaySize +
      "<br/><b>Away Jersey Qty:</b> " + awayQty +
      "<br/><b>Short Size:</b> " + shortSize +
      "<br/><b>Short Qty:</b> " + shortQty +
      "<br/><b>Warm Up Jacket Ordered?</b> " + jcktOrdered +
      "<br/><b>Jacket Size:</b> " + jcktSize +
      "<br/><b>Jacket Qty:</b> " + jcktQty +
      "<br/><b>Warm Up Pants Ordered?</b> " + pntsOrdered +
      "<br/><b>Pants Size:</b> " + pntsSize +
      "<br/><b>Pants Qty:</b> " + pntsQty +
      "<br/><b>Backpack Ordered?</b> " + bagOrdered +
      "<br/><b>Backpack Qty:</b> " + bagQty +
      "<br/>&nbsp;<br/><b>Your Order Total:</b> " + orderTotal;
  var optAdvancedArgs = {cc: ccAddress, bcc: "mmcgriggs@aol.com,futurauniforms@embarqmail.com", htmlBody: htmlBody};
  MailApp.sendEmail(toAddress, subject, "Message Body", optAdvancedArgs);
}

私が遭遇したもう1つの「落とし穴」。私のフォームには、NULL 値を許可する Qty フィールドがいくつかありました。その値が検出されると、OrderTotal は電子メールで「NaN」として報告されます。私は単純に戻って、これを修正するためにすべての数量フィールドのデフォルトを 0 にしました。みんな、ありがとう!

于 2012-05-25T05:03:57.957 に答える