我正在学习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
答案 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
}