Запись в ячейку на основе сегодняшней даты - PullRequest
0 голосов
/ 28 апреля 2020

Я изучаю кодирование в Sheets и уже собрал вместе пару игр (основанных на очень ограниченных знаниях кодирования. Очень забавно видеть, как это происходит вместе)

Следующая задача: я записываю свои часы, потраченные на выполнение «Рост» (например, учеба, упражнения, работа и т. Д. 1027 *.) И «Отдых» (например, телевидение, игры, прокрутка FB и т. Д. 1028 *). До сих пор я просто прокручивал до сегодняшней даты и добавлял чисел вручную. Было бы интересно иметь кнопку в верхней части моего листа, которая на сегодня просто добавляет часы к ячейкам «Рост» или «Досуг».

Я использовал формулы в ячейке G371, чтобы показать A1 обозначение моей целевой ячейки, надеясь, что я смогу использовать эту информацию в сценарии для записи в эту ячейку:

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

Где ячейка A1 содержит = today () и A2: A367 - все даты года. В столбцах C и D содержатся номера для роста и отдыха соответственно.

Тогда я попробовал этот код, чтобы попытаться увидеть, как писать в AC флигель. Я понимаю, что, возможно, мне не хватает некоторых очень фундаментальных знаний ...

  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 голосов
/ 29 апреля 2020

Формула в ячейке может не соответствовать полученному вами значению. Чтобы этого не произошло, вы можете использовать getDisplayValue () вместо getValue().

Другой способ:

Кроме того, если вы просто хотите получить В ячейку, в которую записывается сегодняшний рост (или отдых), вам не нужно следовать этому окольному способу создания формулы в другой ячейке для ссылки на эту. Вы можете сделать это вместо этого (проверить комментарии):

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...