根据今天的日期写入单元格

时间:2020-04-28 18:06:05

标签: google-apps-script google-sheets

我正在学习Sheets中的编码,并且已经将一些游戏进行了拼图(基于非常有限的编码知识。很高兴看到它们融合在一起

下一个任务: 我记录了我在“成长”(例如学习,锻炼,工作等)上与“休闲”(例如电视,游戏,FB滚动等)上花费的时间。到目前为止,我只是向下滚动到今天的日期并手动添加数字。在工作表的顶部有一个按钮,今天会增加几个小时到“增长”或“休闲”单元中,这会很有趣。

我已使用G371单元格中的公式来显示目标单元格的A1表示法,希望我可以在脚本中使用此信息来写入该单元格:

= substitute(Cell(“ address”,vlookup(A1,A2:D367,3)),“ $”,“”)

单元格A1包含= today()的位置 和A2:A367是一年中的所有日期。 C和D列分别包含增长和休闲数字。

然后,我尝试使用此代码尝试查看如何写入单元格。我意识到我可能缺少一些非常基础的知识...

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cellname = ss.getRange('G371')     // makes cellname refer to G371
  var input = cellname.getValue()        // makes 'input' return the contents of G371, in today's case its 'C120'
  var test = ss.getRange(input)          // hopefully reads 'C120' instead of "input"

  test.setValue(1)                       // setting value to 1 for now, as I'm just testing cell 
                                         //   referencing. later I will work on figuring out the 
                                         //   math for the buttons. I'm not there yet.

所以它没有用。显然问题出在ss.getRange(input)上,但我不知道该怎么办。

所以我的问题是如何写入另一个单元中命名的单元?

希望有道理

谢谢!

PS这是工作表的副本 https://docs.google.com/spreadsheets/d/1KkoCb8kY1XICMeB9bx65HXsldCS-fa75xJCaU52WGg8/edit?usp=sharing

1 个答案:

答案 0 :(得分:0)

单元格中的公式可能与您检索的值混淆。为确保不会发生这种情况,可以使用getDisplayValue()代替getValue()

另一种方式:

此外,如果您只想检索写今天的增长(或休闲)记录的单元格,则无需遵循这种在另一个单元格中创建公式的formula回方式来引用该单元格。您可以改为执行此操作(检查评论):

function todayGrowthCell() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var date = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "d/M"); // Format today's date as in spreadsheet, in order to compare
  var firstRow = 2; // Row where days start
  var column = 3; // Column C (Growth)
  var dates = sheet.getRange(2, 1, 366).getDisplayValues().map(row => row[0]); // Retrieve columns with dates (its display value, in order to compare with today's date, which is formatted accordingly)
  var row = dates.indexOf(date) + firstRow; // Today's row
  var cell = sheet.getRange(row, column); // Today's growth cell
  cell.setValue(1); // Set value to today's growth cell
}