【问题标题】:Can you help me create a Google Apps Script that will return values from a database to an on-sheet form?您能帮我创建一个将值从数据库返回到表单表单的 Google Apps 脚本吗?
【发布时间】:2021-11-27 22:49:10
【问题描述】:

我的问题是将保存在数据库中的值返回到范围内每个单元格中的表单。下面的 saveToDB 脚本能够将表单中的值保存到数据库中,但我不知道如何检索这些值。希望你能帮助我。非常感谢!

表格:sample form 数据库:database sample

function saveToDB(){

  range = ["C2","C4","C6"]

  var newRange = range.map(f => formSheet.getRange(f).getValue())

  dbSheet.appendRow(newRange)
}

function loadToForm(){

  range = ["C2","C4","C6"]

  var dbArray = dbSheet.getRange(2,1,dbSheet.getLastRow(),dbSheet.getLastColumn()).getValues()

  var newArray = dbArray.filter(function(row){
    if(row[0] === "Fred" && row[0] !== -1){
      return row !== ""
    }
  })

  //Don't know how to return each value to each cell in the range
  //Update - this is the code that did it
  range.map((f,i) => formSheet.getRange(f).setValue(newArray[0][i]))
}

【问题讨论】:

  • 你好,咪咪!出于某种原因,您的 loadToForm 代码给了我这个错误:异常:无法将“PromptResponse”转换为 int。此外,这是为我完成的代码行: range.map((f,i) => formSheet.getRange(f).setValue(newArray[0][i])) 非常感谢您的关注!

标签: arrays google-apps-script google-sheets userform


【解决方案1】:
function saveToDB() {
  const ss = SpreadsheetApp.getActive();
  const fsh = ss.getSheetByName('Form Sheet Name');
  const dsh = ss.getSheetByName('Database Sheet Name')
  let arr = ["C2", "C4", "C6"].map(e => fsh.getRange(e).getValue());
  dsh.appendRow(arr);
}

function loadToForm() {
  const range = ["C2", "C4", "C6"];
  const ss = SpreadsheetApp.getActive();
  const dsh = ss.getSheetByName('Database Sheet Name');
  const fsh = ss.getSheetByName('Form Sheet Name');
  let r = SpreadsheetApp.getUi().prompt('Row Number','Enter Row Number', SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
  if(r.getSelectedButton() == SpreadsheetApp.getUi().Button.OK) {
    let vs = dsh.getRange(row, 1, 1, dsh.getLastColumn()).getValues()[0];
    range.forEach((e,i) => { fsh.getRange(e).setValue(vs[i])
    });
  }
}

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可能会提高其长期价值。
  • @andrewJames 我不确定它是否能回答这个问题。我正在等待操作的回复。
【解决方案2】:

您所要做的就是使用setValue() 函数并像这样遍历每个单元格:

function loadToForm(){

  range = ["C2","C4","C6"]

  var dbArray = dbSheet.getRange(2,1,dbSheet.getLastRow(),dbSheet.getLastColumn()).getValues()

  var newArray = dbArray.filter(function(row){
    if(row[0] === "Fred" && row[0] !== -1){
      return row !== ""
    }
  })

  //Remove useless extra dimension from array
  newArray = newArray[0];

  //Solution 1 using RangeList
  var ranges = formSheet.getRangeList(range).getRanges();
  for(var i in newArray){
    ranges[i].setValue(newArray[i]);
  }

  //Solution 2 not using RangeList
  for(var i in newArray){
    formSheet.getRange(range[i]).setValue(newArray[i]);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多