工作表 - 使用表单添加数据,但根据数据输入来命名工作表

问题描述 投票:0回答:1

正如标题所解释的,我在 Google 表格中创建了一个工作簿。有一个标记为“表单”的工作表,用于将数据输入到 12 个工作表之一(一年中的月份标记为 2023 年 4 月、2023 年 5 月等...)。

用户将从下拉列表中选择月份,然后从第二个下拉列表中提供该月内的日期。我想将这两个单元格输入分配给一个变量,该变量可用于告诉脚本将数据发送到哪个工作表。

如果我在脚本中明确命名该工作表,它就可以正常工作:

your text
var dataS = ss.getSheetByName("2023 年 4 月"); //数据表

但我希望“2023 年 4 月”部分是动态的,基于用户输入。

我尝试过这样的事情:

var month = formS.getRange("C1").getValue().toString(); //Get month from cell C1
var yearC2 = formS.getRange("C2").getValue(); //Get date selected within month chosen in C1 
var year = yearC2.toString().substring(15,11); //Extract year in YYYY from var yearC2
var dataS = ss.getSheetByName('month'+" "+'year'); //insert data in Data Sheet

我收到此错误:TypeError:无法读取 null 的属性(读取“getRange”)。调试突出显示下面的粗体代码行。

//Submit Data
function SubmitData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formS = ss. getSheetByName ("Form"); //Data entry Sheet
  //var dataS = ss.getSheetByName("Apr 2023"); //Data Sheet
  
  var month = formS.getRange("C1").getValue().toString(); //Get month from cell C1
  var yearC2 = formS.getRange("C2").getValue(); //Get date selected within month chosen in C1 
  var year = yearC2.toString().substring(15,11); //Extract year in YYYY from var yearC2
  var dataS = ss.getSheetByName('month'+" "+'year'); //insert data in Data Sheet

  var amountchoice = formS.getRange("D4").getValue()
  
  if (amountchoice == true){
  var amount = formS.getRange("E4").getValue();
  }
  else {
  var amount = formS.getRange("C4").getValue();  
  }
  
  var values = [[formS.getRange("C2").getValue(),
                formS.getRange("C3").getValue(),
                amount,    
                formS.getRange("C5").getValue(),
                formS.getRange("C6").getValue(),
                formS.getRange("C7").getValue(),
                formS.getRange("C8").getValue(),
                formS.getRange("C9").getValue(),
                formS.getRange("C10").getValue(),
                formS.getRange("C11").getValue()]];
  **dataS.getRange(dataS.getLastRow()+1, 1, 1, 10).setValues(values);**
  ClearCells();
}

如有任何帮助,我们将不胜感激。

javascript google-sheets dynamic spreadsheet variable-assignment
1个回答
0
投票

在代码的这一部分中,您已经用单引号括住了变量名称,这意味着它将把这些名称作为文字字符串,因此它正在查找名为“月年”的工作表并返回 null。

尝试更改此行

  var dataS = ss.getSheetByName(month + ' ' + year); //insert data in Data Sheet

将记录器/控制台日志添加到代码中以帮助识别此类内容绝对是一个好习惯。

Logger.log('example text: ' + exampleVariable);
© www.soinside.com 2019 - 2024. All rights reserved.