Google Apps脚本格式

时间:2012-08-19 03:12:59

标签: google-apps-script google-sheets

首先为礼仪或愚蠢的问题道歉,这是我第一次尝试使用谷歌电子表格进行脚本编写,我必须说我在excel中比VBA更难挣扎。无论如何我的问题;

我有一个包含四列和五十三行的电子表格。列保持;周数(例如33),周开始日期(例如13/08/12),工作小时数(例如31:15:00)和到期工资(例如150.00美元)。 第一行有标题,第2行到第53行是一年中的几周。 太容易campese了。现在我已经设法编写了一个脚本,运行时会给我发送一周的摘要电子邮件。我的代码如下;

  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日星期一”,显示时间的总工作时间和显示为货币的工资。但是,该脚本不会保留电子表格中的格式。

1 个答案:

答案 0 :(得分:4)

在Apps脚本中无法获得电子表格可视化格式化的单元格,只有它们背后的真实值。有getNumberFormat方法,您可以在其中获取用户可能已应用于单元格的任何特定格式。但是这种方法不能按预期工作,因为它无法在很多情况下检索正确的格式,例如货币和百分比值,也不检索默认格式,仅在用户更改时才会检索。

在您的情况下,可能更容易在代码本身中格式化您的值,因为您手动连接它们。要格式化日期,您可以使用Utilities.formatDate,对于数字,您可以使用普通的javascript函数(num.toFixed())和一些字符串连接来处理您的货币符号。

顺便说一下,我开发了一个可以进行邮件合并并具有这种格式化功能的脚本,你可能会发现它比这个片段更适合你。它被称为FormEmailer,可在脚本库和its site上找到。