【问题标题】:How to grab object values from spreadsheet to paste to html input form如何从电子表格中获取对象值以粘贴到 html 输入表单
【发布时间】:2020-05-20 01:18:57
【问题描述】:

我要粘贴到的 HTML 部分

  <div>
    <label for="entryRef">Ref</label><button id="FindByRef">Find</button>
    <input id="entryRef" list="EntryRef">
  </div>
  <div>
    <label for="entryDate">Date</label>
    <input id="entryDate" type="date">
  </div>
  <div>
    <label for="entryName">To/From</label>
    <input id="entryName" list="Name_list">
  </div>
  <div>
    <label for="entryDescription">Description</label>
    <textarea id="entryDescription"></textarea>
  </div>

HTML 脚本部分,我被这部分卡住了。我跑了,没有粘贴到他们身上,请帮忙!

function refSelect(ref) {
  document.getElementById("entryDate").value = ref.date
  document.getElementById("entryName").value = ref.name
  document.getElementById("entryDescription").value = ref.desc
} //**** to paste the data to HTML, need to fix this part? ****

function entryGet() {
  var refSelected = document.getElementById("entryRef").value

  google.script.run.withSuccessHandler(refSelect).getEntry(refSelected)
}

document.getElementById("FindByRef").addEventListener("click",entryGet)

谷歌脚本部分。我从对象中获取数据

function getEntry(refSelected) {

  var filtered = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Core!A4:F").getValues().filter(r => r[0] === refSelected)

  return {
    ref : filtered[0],
    date : filtered[1],
    name : filtered[2],
    desc : filtered[3],
    acc : filtered[4],
    amt : filtered[5]
  }
}

示例电子表格 [Ctrl + Alt + Shift + 1] 打开表单 https://docs.google.com/spreadsheets/d/1lpXqW7-VXBFPjtzXIzjUHa9p2uTFJrl67CO6AH2kKoQ/edit?usp=sharing

提前谢谢你

【问题讨论】:

  • getRangeByName() 用于命名范围..
  • 谢谢你,我应该注意到这一点,我在下面修复了@Tanaike 的答案 - 但仍然无法正常工作

标签: html google-apps-script google-sheets


【解决方案1】:

这个答案怎么样?

修改点:

  • 我认为在您的脚本中,Google Apps 脚本方面的getEntry 存在问题。
    • 如果Core!A4:F是a1Notation,请将getRangeByName修改为getRange
    • SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Core!A4:F").getValues().filter(r =&gt; r[0] === refSelected) 返回二维数组。所以在你的情况下,当搜索值为唯一值时,请添加[0]

当以上几点反映到你的脚本中时,它变成如下。

修改脚本:

从:
var filtered = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Core!A4:F").getValues().filter(r => r[0] === refSelected)
到:
var filtered = SpreadsheetApp
  .getActiveSpreadsheet()
  .getRange("Core!A4:F")
  .getValues()
  .filter(r => r[0] === refSelected)[0];

并且,如果“B”列是日期对象,也请修改如下。

从:
  return {
    ref : filtered[0],
    date : filtered[1],
    name : filtered[2],
    desc : filtered[3],
    acc : filtered[4],
    amt : filtered[5]
  }
到:
  return {
    ref : filtered[0],
    date : `${filtered[1].getFullYear()}-${("0" + (filtered[1].getMonth() + 1)).slice(-2)}-${("0" + filtered[1].getDate()).slice(-2)}`,  // Modified
    name : filtered[2],
    desc : filtered[3],
    acc : filtered[4],
    amt : filtered[5]
  }

注意:

  • 如果Core!A4:F是命名范围,请使用getRangeByName("Core!A4:F")
  • 当您使用 Web 应用打开 HTML 时,修改脚本后,请将 Web 应用重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。

【讨论】:

  • 谢谢你,我应该注意到了。我修复了这部分,但数据仍然没有显示
  • @zummontt 感谢您的回复。我带来的不便表示歉意。在这种情况下,为了正确理解您的情况,当您提供用于复制当前问题的示例电子表格时,将有助于考虑您当前的问题。因为在我的环境中,当filtered 返回正确的值时,refSelect 有效。这个怎么样?
  • @zummontt 虽然我不确定您的电子表格,但我又添加了一个修改点。你能确认一下吗?如果这不是直接的解决方案,我深表歉意。届时,您能否提供您期望的样本电子表格?借此,我想确认一下。
  • 我不知何故得到了样本电子表格工作:D,但我的主要工作不会。一定是我的海量代码。非常感谢。无论如何,我将分享示例电子表格,我现在正在尝试修复它
  • @zummontt 感谢您回复并添加更多信息。不幸的是,我无法理解but my main won't.。顺便说一句,当我测试反映我修改点的共享电子表格时,似乎在设置Ref 并单击Find 按钮时,会检索到值。当我的修改点没有反映时,不会返回任何值。那么您目前的问题是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多