2

まず、エチケットの悪さや愚かな質問についてお詫びします。これは、Googleスプレッドシートでのスクリプト作成への私の最初の進出であり、ExcelのVBAよりも苦労していると言わざるを得ません。とにかく私の問題に。

4列53行のスプレッドシートがあります。列は保持されます。週番号(例:33)、週開始日(例:13/08/12)、労働時間(例:31:15:00)、および支払期日(例:$ 150.00)。最初の行には見出しがあり、2行目から53行目はその年の週です。簡単すぎるキャンピーズ。これで、実行時に1週間の要約メールを送信するスクリプトを作成できました。私のコードは次のとおりです。

  function sendEmail() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Summary");
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow()-1;   // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
  // Fetch values for each row in the Range.
  var data = dataRange.getValues()
  //Logger.log(data)

  for (i in data) {
    var row = data[i];
    var date = new Date();
    var sheetDate = new Date(row[1]);
    Sdate=Utilities.formatDate(date,'GMT-1000','w')  
    SsheetDate=Utilities.formatDate(sheetDate,'GMT-1000', 'w')
    //Logger.log(Sdate+' =? '+SsheetDate)
    if (Sdate == SsheetDate){
      var emailAddress = row[0];  // First column
      var weeknum = row[0];
      var week = row[1];
      var hours = row[2];
      var pay = row[3];
      var subject = "Timesheet Report for Week " + weeknum;
      MailApp.sendEmail('me@myemail.com', 
                        subject, 
                        "Chris, \n\nBased on the timesheet data you have submitted last week So and So has recorded the following hours and should be due the calculated pay.\n\n" +
                        "Week Beginning; " + week +
                        "\n\nTotal Hours Worked For The Week; " + hours +
                        "\n\nPay Due For The Week; " + pay);
     //Logger.log('SENT :'+emailAddress+'  '+subject+'  '+message)
    }    
  }
}  

今の私の問題は、週に「8月13日月曜日」を表示し始めたいことです。合計時間は時間を表示し、Payは通貨として表示します。ただし、スクリプトはスプレッドシートのフォーマットを保持しません。

4

1 に答える 1

4

Apps Script では、スプレッドシートの視覚的に書式設定されたセルを取得する方法はなく、その背後にある実際の値のみを取得できます。ユーザーがセルに適用した可能性のgetNumberFormatある特定の書式設定を取得できるメソッドがあります。しかし、このメソッドは、通貨やパーセント値など、多くの状況で正しい形式を取得できず、ユーザーが変更した場合にのみデフォルトの形式を取得しないため、期待どおりには機能しません。

あなたの場合、値を手動で連結しているので、コード自体で値をフォーマットする方が簡単かもしれません。日付をフォーマットするには、 Utilities.formatDatenum.toFixed()を使用できます。数値については、おそらく通貨記号の文字列連結として、プレーンな JavaScript 関数を使用して解決できます。

ところで、私は差し込み印刷を行うスクリプトを開発しましたが、このような書式設定機能を備えているため、このスニペットよりも適していることがわかるかもしれません。これは FormEmailer と呼ばれ、スクリプト ギャラリーとそのサイトで入手できます。

于 2012-08-19T05:49:30.933 に答える